八音繞人 餘音聯歡

硬體部分

▲Kinect

  Kinect是由微軟開發,應用於Xbox 360和Xbox One主機的周邊設備。它讓玩家不需要手持或踩踏控制器,而是使用語音指令或手勢來操作Xbox 360和Xbox One的系統介面。它能捕捉玩家全身上下的動作,用身體來進行遊戲,帶給玩家「免控制器的遊戲與娛樂體驗」。此設備是微軟研究院的研究成果之一。

  Kinect感應器是一個外型類似網路攝影機的裝置。Kinect有三個鏡頭,中間的鏡頭是RGB彩色攝影機,左右兩邊鏡頭則分別為紅外線發射器和紅外線 CMOS 攝影機所構成的3D結構光深度感應器。Kinect還搭配了追焦技術,底座馬達會隨著對焦物體移動跟著轉動。Kinect也內建陣列式麥克風,由多組麥克風同時收音,比對後消除雜音。   

  在技術部份我們主要運用到Kinect的鏡頭來偵測人體骨架的位置,水平視角為57度、垂直視角為43度(±27度),最佳使用距離為1.2m至4m。在Kinect的使用及原理上,我們先以Kinect的座標軸為基準(下圖一),並將Kinect的視野分割成20個BLOCK(下圖二),待偵測到人體骨架的位置後,取出頭部的X及Z之座標,判斷該座標屬於事先分割好的哪一BLOCK,再按照該BLOCK相對應的音訊進行播放。

圖一 圖二

▲音效卡 Xonar U7

  
  音效卡是電腦中用來處理聲音的介面卡。音效卡可以把來自不同設備的聲音變成數位信號交給電腦處理,並以文件形式存檔,還可以把數位信號還原成為真實的聲音輸出,目前幾乎所有主機板上都有內建。
  但由於我們需要使八個喇叭播放出不同的聲音,因此主機板上內建的雙聲道音效卡無法處理,所以我們改以外接的方式加掛一個7.1聲道的音效卡也就是Xonar U7,來負責處理我們輸出的音訊給喇叭。

▲播放器材

  喇叭的部分因為我們播放的都是同一種音訊,所以為了統一我們都採用同一個品牌型號的喇叭,讓每個訊號部會因為喇叭阻抗的不同而比較小聲或大聲的關係,在分析上也能夠不用理會每一個喇叭的差異所產生的影響。

軟體部分

▲Kinect開發平台--C#

  微軟在2011年6月推出了Kinect for Windows SDK Beta,可以使用C#與NET Framework 4.0來進行開發。Kinect for Windows SDK 主要是針對Windows7設計,內含驅動程式、豐富的原始感測數據串流程式開發介面、自然用戶介面、安裝文件以及參考範例。Kinect for Windows SDK 可讓使用C++、C#或Visual Basic語言搭配Microsoft VisualStudio2010工具的程式設計師輕易開發使用。目前最新是V2.0。   

  我們使用的是V1.8版本並且搭配VisualStudio2015的C#的WPF環境進行開發。主要需要的配件有kinect for windows SDK v1.8及kinect for windows Toolkit v1.8。

▲音檔寫入工具--Matlab

  我們的目的是要利用聲音的延遲使的不同區域會因為波形疊加或相消的效應,而有的區域聲音會比較大,有的則是幾乎沒甚麼聲音,而主要利用的概念有兩個。   

  一個是聲波疊加的概念,聲波是屬於一種疏密波,可以用一個聲壓強來度量介質中每一點的被拉伸和擠壓的強度,而這個強度可以是可以線性疊加,所以我們能使用一些疊加的概念去使波形在我們不希望有聲音的地方抵銷掉,而在我們希望有聲音的地方能夠線性疊加。

  另一個則是延遲的部分,因為當人站在一個定點的時候,和每一個喇叭的距離都不一樣,也就是說每一個喇叭播出的聲音傳到我們耳朵的時間都不太一樣,於是我們就利用Matlab處理使靠近我們的喇叭播放出音樂的時間比離我們遠一點的喇叭播出的時間晚一點,這樣就能夠使每一個喇叭播出的聲音同時抵達到我們的耳朵,而我們有透過一些計算來求得我們的延遲,下方的式子就是我們計算的方法。