2013-06-26 45 views
6

我試圖實現一個系統,可以產生一張鋼琴作品的音樂作爲和當它被播放時,也就是說,它應該是一個實時轉錄,而不是一個錄製的片。實時音樂轉錄

到目前爲止,我一直在測試上wav文件,使用FFt on MATLAB,但是當涉及到實時的系統需要真的,真快

什麼樣的方式,我可以使用,則型板的任何建議(我想用Arduino的)。我可以用的,因爲我想直接轉移我MATLAB code,而不是將其轉換爲C.

+1

+1有趣的項目,我沒有音樂轉錄工作還,但在我看來,你需要記錄小片段片和成績單他們。 –

+0

我想這種方法只適合轉錄獨立筆記。轉錄和絃可能不會帶來好的結果。一個midi鍵盤會容易得多。 –

+0

非常有趣的項目。你能告訴我們目前基於fft的實施工作有多快?我以爲fft應該是O(n log(n)),這已經很快了。 – Oli

回答

1

任何建議上,我可以用什麼樣的方式,主板的類型(我想用的Arduino的)。我可以用的,因爲我想直接轉移我的MATLAB代碼,而不是將其轉換爲C.

你可以有不同的方法到您的項目,我能想到的:

  1. 首先出現是一些有電子設備的鋼琴,可以通過MIDI接口輸出彈奏音符的速度和位置。這是跟蹤播放音符的最準確和最快速的解決方案,儘管DIY並不多。在電腦方面,你只需要一個MIDI接口(可以使用arduino輕鬆完成),並且有一個軟件可以將MIDI音符轉換成樂譜;
  2. 然後,您可以通過將鋼琴鍵盤連接到能夠測量速度和已彈奏音符的傳感器來模仿該行爲。有許多策略可以使用(從在機械上使用激光器到壓力開關......),這一切都取決於您準備做出的投資;有一個arduino(如巨型或應收)可以是一個很好的解決方案。
  3. 但是,當您在談論FFT時,我假設您想要錄製鋼琴發出的聲音並檢測琴鍵。在音樂研究方面,您已經掌握了最先進的知識,您遇到的問題是multiple f0 detection inpolyphonic music,雖然有strategies specific to piano,但它仍然是一個非常活躍的研究領域。
  4. 讓我們假設你只對轉錄進行單音檢測。問題在於,Arduino中包含的模擬數字轉換器很糟糕,它具有10bit的定義,這太低而無法檢測到任何有用的東西。藉助Arduino DUE,您可能會有更多的定義,因爲它具有16通道12位1Msps ADC。對於一個好的轉錄來說,這還不算太多。因此,您必須創建一個外部ADC,如Linear LTC2383-16,這是一個16位1Msps的SPI接口,最低要開始播放。在這之後,您需要找到正確的麥克風,並在ADC和麥克風之間建立良好的電子線路(我不太瞭解這些)。
  5. 最後,用一臺小型計算機(比如Beaglebone或RaspberryPI 5)更容易一些,插入一個非常好的USB ADC /聲卡,並使用該電路板來完成轉錄?你也可以在雲服務器上運行你的軟件(比如谷歌appengine或AWS),它有足夠的處理器來讓你的Matlab運行愉快。

因此,要製作一個良好的實時和音樂嵌入式轉錄,最好的解決方案是第一個解決方案(或第二,如果你真的想去DIY)。如果你真的想要通過「空氣」接口,我認爲最好的解決方案是第五個。最後,關於代碼,我建議你將你的代碼從Matlab轉換到Python(如果你不想編寫C/C++代碼),它將運行得更快。所以你可以弄清楚Matlab有多糟糕,當我爲IRCAM工作時,我已經寫了一個將Matlab源代碼轉換爲C++源代碼的工具,一旦編譯結果速度提高了40倍。

HTH