2013-01-22 78 views
0

我想編寫一些代碼來進行聲學分析,我正在嘗試確定適合這項工作的工具。我通常會在Python中使用numpy和scipy以及可能用於分析部分的Cython來寫這樣的東西。我發現Python音頻庫的世界有點混亂,在各種開發狀態下都有很多非常有限的軟件包。音頻領域特定語言與Python

我還遇到過一些音頻/聲學特定語言,如SuperCollider,Faust等,這些語言似乎使音頻處理變得簡單,但IO和分析能力可能會受到限制。

我目前正在使用默認安裝Alsa和PulseAudio的Linux。如果可能的話,我寧願不涉及像傑克這樣的各種各樣的其他音頻包,儘管這不是一個硬性要求。

我對這個問題的主要興趣是確定是否有一個特定領域的語言能夠提供更快的原型和測試,或者像Python這樣的通用語言是否更合適。謝謝。

回答

2

SuperCollider對這些產品有很多支持,包括外部/插件或夸克。這就是說,這取決於你想要做什麼。如果你只是想檢測事件,Onsets.kr會沒事的。如果你正在尋找頻率/音調信息,PitchTartini會工作(我發現Tartini更準確)。如果你試圖跟蹤幅度,Amplitude.ar和一些簡單的數學的組合也可以工作。

同樣,也SpecCentroid.kr(一類亮度分析),Loudness.krSpecFlatness.kr

以上都是很一般,而且有很多以上(JoshUGens的外部包有一些有趣的FFT的相關的聲學材料)。所以我會推薦下載該程序,加入郵件列表(如果您還有其他問題),它將生活在之間,並在Externals,Quarks和Standard UGens中尋找答案。

儘管如此,由於我不確定你在做什麼,我不能提出比上述更具體的建議,加上我覺得這是最有意義的去SC,而不是寫所有的自己從事Python的工具。

4

我對SuperCollider和Python有很多經驗(有和沒有Numpy)。我做了很多音頻分析,恐怕答案取決於你想做什麼。

  1. 如果您想要創建將實時輸入或輸出音頻的系統,那麼Python不是一個好的選擇。音頻I/O庫(如你所說)有點粗略。 Python的垃圾收集器並不是真正爲實時設計而設計的基本問題。 您應該使用從頭開始實時設計的系統。 SuperCollider對此很不錯,正如caseyanderson所說,一些用於音頻分析的標準構建模塊就在那裏。還有其他的環境。

  2. 如果你想做核心工作,如應用各種機器學習算法,不一定實時(即如果你可以擺脫閱讀/寫入WAV文件而不是實況音頻),那麼你應該使用一個具有廣泛支持的通用編程語言,以及爲您想要的額外事物提供良好圖書館生態系統。使用Python與libs如numpy和scikits-learn非常適合。這對於快速原型製作來說非常有用,但它不僅缺乏穩定的實時音頻,而且還具有更少的標準音頻構建塊。這些是在音頻流水線原型設計時阻礙你的兩件重要事情。

那麼,你被夾在這兩個選項之間。根據您的應用程序,您可以通過在實時環境中操作音頻I/O,並使用OSC消息傳遞或shell腳本與外部Python進程進行通信來結合兩個。這裏的侷限性在於,你不能真正將大量數據放在兩者之間(你不能合理地將所有音頻傳送到其他進程,這很愚蠢)。

0

我不是100%確定你想要做什麼,但作爲一個額外的建議,我會提出:在Common Lisp中使用腳本。如果你正在做的事情涉及大量的頻譜分析,那麼你可以用Spear進行沉重的提升,並使用通用音樂的Common List進行所有這些。 Spear在編輯非常具體的部分方面有一些很棒的工具。