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