Arduino平臺的Wave Shield是Adafruit早期的一個面罩套裝,一直以來,它依然是那么受歡迎。我們有足夠的理由相信,這是給Arduino添加高質(zhì)量音效的最容易和最便捷的方法。
像一瓶好酒,開源項目隨著時間而得到提高。我們被告之這個面罩有一個新的技巧:那就是一個實時的變聲器。發(fā)音就像每個人都喜歡的男中音歌手Sith Lord一樣,或者如Lollipop Guild的跟唱一般。Wave Shield一早成為商家歡迎的萬圣節(jié)項目。最新添加上去的東西也是緊扣這個主題的。
核心部分的清單
這個項目里面有三個和新型的元件:
Arduino Uno(老版本的Arduino Duemilanove或者328 Diecimila也適合,但Arduino Mega或者Leonardo就不適兼容了。)
Adafruit Wace Shield
Adafruit麥克風(fēng)放大器接頭
你還需要基本的焊接工具,電線以及bits & bobs
其他部件
這是一個可擴(kuò)展的項目,而用什么元器件嘖去決議你打算用它來達(dá)到什么目的。通讀整個過程,留意在一些細(xì)節(jié)部分的觀點以及建議。
因為有聲音輸出,因此你需要一個頭戴式耳機(jī)、便攜MP3揚聲器或者我們經(jīng)典的D類功放。示范掃描大概用到一個12鍵鍵盤去觸發(fā)預(yù)錄制的聲音。若果你只是想使用音效。你的應(yīng)用只需要一些簡單的按鍵,又或者什么都不用。
如果要添加一些預(yù)錄制的聲音,你需要一個包含有WAV文檔的SD卡。
用一個10K的電位計來調(diào)節(jié)音高。又或者你可以進(jìn)行簡單的永久設(shè)置。
如果你想撥弄這些電線,一個額外的樣機(jī)面罩和堆棧頭部可以很容易實現(xiàn)。焊接帶有堆棧頭部的wave shield,同時將原型面罩放在上面。
為了使其可以像服裝和小道具那樣輕便使用,要添加電池,電池套等。
重申一下,細(xì)讀整個流程是很有必要的,因為這樣可以便于購買你項目中所需的元件。我們會展示一些實例。但這些東西并不是最新的。但這些都是Arduino的精華。
先強調(diào)一下重要的事情
我們強烈建議,應(yīng)該說是要求你在開始這個項目之前完成這個原版的Wave Shield教程的閱讀。這是在添加額外層次的復(fù)雜性之前驗證關(guān)鍵部分能夠正常工作的一個好方法。
現(xiàn)在就解析一些令人討厭的背景理論知識。如果你只是想做點東西,那么你就可以跳過一下的文章。
音頻樣本
不管你是否曾經(jīng)玩弄過父親的LP唱盤,又或者涉獵過最新的PC上面的數(shù)字音頻程序。你在這些現(xiàn)象上面或多或少都應(yīng)該有一些經(jīng)驗。就拿錄音來說,這只不過是一個以特有速度的回放。之后改變速度,或者壓縮、拉伸時間。之后音頻的音高就會隨之改變。壓縮時間會使音高上升,拉伸時間會降低音高。頻率是波長的倒數(shù)。
利用錄音是很容易得出這些效果的,但在直播音頻的時候,我們就不能那么奢侈,實時就是實時,我們并不能壓縮或者拉伸。它們沿著自身的狀況發(fā)展。這種情況下,所謂的聲音改變能夠做點什么?
在這里設(shè)計一個叫做福利葉變換的復(fù)雜技術(shù),通過變換可以轉(zhuǎn)變一個函數(shù)(或者可以講是改變音頻流),將其轉(zhuǎn)為一個頻譜。最后的出來的頻率值可以改變,同時一個相反的轉(zhuǎn)變會應(yīng)用來還原這個音頻。這就是純粹的數(shù)學(xué)問題。但除了Arduino的處理之外,我們還需要一些額外的處理和方法。一個相當(dāng)強悍的CPU或者DSP是必須的。我們也需要一些便捷方法或者做一些嘗試。
在數(shù)字音樂圈,顆粒合成是一個將大量的短音頻樣本糅合和分層的技術(shù)。這也是為了建造更多更復(fù)雜的聲音或者樂器合成。現(xiàn)在圖片是一個單獨的聲音樣本,十毫秒左右。同時我們持續(xù)從直播麥克風(fēng)更新這個聲音樣本。通過實踐壓縮或者延伸這個微小的環(huán),重復(fù)或者丟棄短小的片段去跟上實時。我們以實時音高轉(zhuǎn)換為基礎(chǔ)。這個看起來是不能工作的,但實際上是有效的。語音波形在短期內(nèi)會重復(fù),同時我們可以丟棄或者重復(fù)一些波形。
這種方法總體上是適合于Arduino的有限處理能力和RAM,得出的結(jié)果是不符合好萊塢品質(zhì)的。但這比架子上大部分的聲音改變玩具好很多。現(xiàn)在你將要去制造它了,很酷是吧。
聲音采樣
人的聲音頻率范圍大約是300HZ到3500HZ。奈奎斯特抽樣定理有如下的闡述:要如實重建一個信號必須需要至少兩倍的采樣率。對于人聲來說,那就是7KHZ的采樣率。但多一點的話也無妨。
在一個循環(huán)里重復(fù)調(diào)用Arduino的標(biāo)準(zhǔn)模擬Read()函數(shù)是一種方法,這種方法對這個項目來說也太慢了。我們需要Arduino的ADC、特別儲存器和模式有一個更深入的了解。一個叫做自由震蕩的模式以快速、固定間隔,同時并不反復(fù)查詢代碼的方式快速收集模擬采集信號。每當(dāng)一個新的采樣信號準(zhǔn)備好了,一個中斷處理程序會被自動調(diào)用。這個會有規(guī)律的進(jìn)行。全速的運行,一個16MHZ的Arduino每秒可以捕獲9615個10位的樣本。這對于聲音采樣來說足夠了。
聲音樣本存儲在一個環(huán)形緩沖器里面,這是計算機(jī)科學(xué)里面的“當(dāng)你到達(dá)緩沖器末端的時候,回調(diào)到最初,并重寫”的一種美妙的描述。但從概念上說,這只是幫助理解文字上所說的循環(huán)。
錄音的頻率會很少精準(zhǔn)符合緩沖長度。同時聲音樣本是被存儲和以不同速率讀取。這會產(chǎn)生一個明顯的間斷。每次輸入和輸出點交匯時,會產(chǎn)生一個間歇性的噪音。現(xiàn)在用一個小型的額外緩沖器存儲一些優(yōu)先的音頻樣本,同時在邊界編碼交錯單變的音頻可以減少噪音。
因為我們的音頻樣本是相當(dāng)短,大概只有10毫秒,RAM則需要適中的,大概幾百字節(jié)。問題是,因為Wave shield的設(shè)計目的的緣故,我們經(jīng)常會持續(xù)做采樣的工作。也就是,回放WAV文件。這需要從一個SD卡讀取文件,這會需要比較大的RAM,很幸運的是這個WAV播放編碼的設(shè)計使我們獲得訪問庫存儲的權(quán)利,同時回收滿足我們需要。
源代碼的這個技術(shù)細(xì)節(jié)備受好評。因此如果你對執(zhí)行的標(biāo)準(zhǔn)有所好奇,查看源代碼。
限制
當(dāng)把Arduino介紹給新用戶的時候,我通常將其描述為“具有足夠能力去處理好任何一件事”。嚼口香糖的時候走路是一個挑戰(zhàn)。因此對這個項目來說,它是很完美的。記住以下的限制:
1.它可以處理聲音效果或者WAV回放,但你不能同時做到。
2.當(dāng)聲音效果在運行的時候,你不能讀取其他模擬輸入。(例如,你不能用一個電位計持續(xù)轉(zhuǎn)換音高)。如果用到模擬穿高企作為聲音觸發(fā)器,考慮工作的時候就如在數(shù)字輸入時用一個精心調(diào)整過的分壓器,或者另一個MCU去處理數(shù)字輸入,透過串行或者I2C連接進(jìn)行正向觸發(fā)。
建造過程
步驟一:
參照原版本的Wave Shield教程
再強調(diào)一遍,在做聲音轉(zhuǎn)換器之前通讀原版本的Wave Shield教程!
這個項目有很多獨立的部分,其中的任何一次過失會導(dǎo)致整個項目的失敗,因為在所有可能性之間查出問題所在是一個很復(fù)雜的工作。現(xiàn)在花一些時間去使最基本的Wave Shield實例工作,尤其是“Pi Speak”樣本。這會讓你明白到這個shield是正確裝配的,SD卡是正確格式化等等。之后我們會添加額外的特征。
開始的時候要下載Arduino的WaveHC庫,這并不只是為WAV回放,同時使為了編碼過程中的聲音轉(zhuǎn)變。我們有一個Arduino庫安裝指南,下載PI的包含WAV文件的壓縮文件,然后依照教程直至Wave Shield工作。
步驟二:
添加聲音效果和一個聲音觸發(fā)器鍵盤
基本的Wave Shield工作的時候,我們可以添加聲音轉(zhuǎn)換和聲音觸發(fā)器鍵盤,你可以在你的工作臺利用一塊模擬板完成這個步驟。遲點我會使這些變成可攜帶的。之后,確認(rèn)它是能工作的。
下載Arduino的Adavoice擴(kuò)展,這個時候你應(yīng)該完成了上一步驟提到的WaveHC庫的安裝。
Arduino的地線和3.3V線需要連接到幾個不同的點,因此你可能需要一個工作臺電源軌來完成這個。Arduino的3.3V線連接到駐極體麥克風(fēng)功放的VCC接口,同時連接到一個10K的電位計輸出腳,還要連接到Arduino的AREF端口。Arduino的接地線應(yīng)該連接到麥克風(fēng)功放的接地點,同時接到電位計的反向輸出腳。
PS:別忘記連接到AREF,否則整個電路不會工作。
麥克風(fēng)功放的輸出連接到模擬的pin0,同時電位計的中心腳連接到模擬的pin1。
如果你打算利用數(shù)顯錄音的音頻效果(一些樣本儲存在WAV的文件夾里),你需要一個FAT格式的SD卡,并把文件放置到根目錄里,。一個12鍵的鍵盤連接到數(shù)字的PIN6、PIN7和PIN8(列)。同時連接到模擬的PIN2、3、4、5(行)。對這個草案還需要一些調(diào)整,這就適合于應(yīng)用一些按鍵或者其他的觸發(fā)器。
一個小型揚聲器可以直接連到Wave Shield的功放輸出,為了獲取更大音量,我們建議使用類似ipod和MP3
一樣的便攜式功放喇叭,或者是一些經(jīng)典的D類音頻放大器輸出。
如果你還沒完成以上工序,上傳Adavoice到Arduino。如果所有的東西已經(jīng)接通并裝載正確,你應(yīng)該在設(shè)計圖開始的時候啟動鳴響。如果沒有聲音,用Arduino動態(tài)監(jiān)測同時留意診斷信息。
一旦運轉(zhuǎn)以后,你可以對著麥克風(fēng)說話,同時你應(yīng)該透過揚聲器或者頭戴式耳機(jī)聽到轉(zhuǎn)換過的聲音(麥克風(fēng)應(yīng)該遠(yuǎn)離揚聲器,避免干擾)。按下任何按鍵會停止聲音效果,并播出響應(yīng)的聲音,然后重新開始。
注意到這個音高撥號并不是實時工作!這個很正常,同時這是我們?nèi)龠\行的這個ADC方式的一個限制。為了得到新的音高讀取,你需要去回放一個聲音或者按下重置按鍵。
步驟三:
實現(xiàn)電池供電,使其能夠攜帶
為了簡化布線圖,我們在以下部分的說明將會忽略掉鍵盤。但如果你愿意的話,你仍然可以將其包括在里面。連接如上所述。
因為模擬板電路對于便攜式應(yīng)用來說太脆弱,我們會直接添加一些元器件。
Wave Shield自身能夠驅(qū)動一個小型揚聲器,但這并不提供足夠的吸引力。聚會和漫畫展通常都是很嘈雜的,因此你們可能需要一個推動!我們利用我們帶有一對4歐姆揚聲器的D類功放。同時也有很多為ipod和其他MP3準(zhǔn)備好的電源揚聲器也適合Wave Shiled的接口。只不過用我們的D類功放有一種訂做的感覺。
最好分別給Arduino和音頻功放供電。尤其是在大聲的時候,音頻功放會產(chǎn)生很大的電流,會引起電壓的瞬間下降導(dǎo)致Arduino重啟。而給Arduino提供獨立電源可以避免這樣的情況發(fā)生。我們將一個9V的電源連接到DC接口,或者將6個AA電池組連上。無論如何,在Arduino和音頻功放部分的地線連接是一致的,電路的3.3V部分的連接也是一致的。
??? 下圖我們將所有的零件用雙層泡沫膠帶固定在一塊有機(jī)玻璃上面,然后用尼龍繩固定,以使其固定在人的胸口。我們用膠帶是為了方便,你們也可以用螺絲之類的東西。
你可以將麥克風(fēng)連接到面具或者偷窺,一個伺服電機(jī)擴(kuò)展線提供一個方便的3分離點。因此你可以武裝你的頭部并安裝。將伺服電纜剪成兩段,將一段焊接到麥克風(fēng)功放,另一端焊接到Arduino電路。
關(guān)于這個服裝的一些TIPS
1.提前讓你的系統(tǒng)跑一段時間,不要一做好就在聚會上使用。知道電池的續(xù)航時間。檢查導(dǎo)線和接口。確保元器件是焊接好的。微調(diào)音頻,降低反饋干擾。
2.將系統(tǒng)做到最好,絞線比實心線的可折性高,要用結(jié)實的。NASA標(biāo)準(zhǔn)的連接。執(zhí)行拉力測試避免連接斷開。模擬板易于原型測試。但你要焊接并進(jìn)行調(diào)整。
3.不要大喊大叫,要輕生說話,讓功放擴(kuò)大你的聲音。你需要人們聽到你“變異”的聲音,而不是原聲。
4.將揚聲器和麥克風(fēng)分開,避免干擾。一些小的角度都會造成干擾的很大區(qū)別。
5.汗的腐蝕性很強,因為它基本是鹽水,更慘的是它有導(dǎo)電性。因此將所有的部件密封。熱縮管保護(hù)所有的接口。在服裝里面的所有電子器件上用塑料外殼或者環(huán)氧樹脂。如果在面距離阿敏用到一個麥克風(fēng)。用氣球?qū)Ⅺ溈孙L(fēng)保護(hù)起來。
6.可以的話,帶上備用電池、安全別針、一些尼龍扣條和一些管道膠帶。
7.絕不讓技術(shù)妨礙良好的性能。樣品用到按鍵很小的薄膜鍵盤,這對于桌面印版樂器來說是很好的。但對動來動去哥斯拉服裝來說是一個悲劇,因為要不停的尋找特別的小按鍵。多的未是好的,在一個手套里面有一兩個按鍵就足夠了。在參加聚會之前要熟習(xí)按鍵操作。
評論