2012-12-29 110 views
6

實時並不一定需要,但是我爲我的最後一年項目創建了一個遊戲,我希望僅使用音頻的力量創建基於正在播放的音樂曲目的動態級別。我的目標是使用PlayStation mobile和C#爲PS Vita創建這個遊戲,但是如果我想讓我可以切換到C++和PSP。需要音頻分析庫來創建音頻文件的實時反饋?

我可以使用WAV文件,並希望提取波形的幅度,以及從該數據計算其他特性,如平均頻率和近似BPM以創建一個級別。

我對嘗試使用這些原始數據毫無疑問,我只是想知道一種方法,我實際上可以首先獲取這些信息。如果我可以提取樣本並確定這些樣本的不同特性,我可以將它們存儲起來,並計算響度,音調和更多的變化以創建便籤等。

我正在使用C#,但如果可能,我可以使用p/invoke或將我的項目切換到使用C++而不是C#的其他設備。

我在這裏恐慌,因爲我真的有點難過。

非常感謝的傢伙。

回答

3

你在這裏描述的問題是音樂/音頻特徵提取之一,並且存在大量的學術工作,你可以借鑑。另一個有用的藝術術語是音樂信息檢索(MIR)

研究人員嘗試從記錄中檢索的'特徵'列表大而多樣,從確定性事物(如音調和關鍵字)到情感特徵(如「能量」)都是如此。

其中大部分結果比您想象的要困難得多,通常只有60-70%準確 - 儘管對於您的要求而言,這可能是足夠的。

一個很好的入口點可能是下載Sonic Visualiser,其中有大量的特徵提取插件存在,並且是開源的。你至少會感受到什麼是可能的。

更新:本領域的另一種有用的術語是開始檢測 - 這是通常用於描述拍子檢測算法。

4

不幸的是,我不認爲你能夠使用C#來做到這一點 - AFAIK,它沒有JIT編譯器。我記得爲Mono讀過一些東西,可以用於C#,但我現在還不確定。

這就是說 - 我會用C++去。如果你這樣做,你可以使用大量的音頻分析庫,如CLAM(http://clam-project.org/)。

不要驚慌(想象大的,友好的信件。)一步一步設想項目的必要部分,一個接一個地解決,而且你很快就會完成。 =)

1

Aubio是一個C/C++庫,它可以進行音高跟蹤,起始點檢測和bpm跟蹤等等。對於「提取波形的幅度」,波形幅度,即,您可以每隔n個採樣選取絕對值最大的音頻採樣,並使用該值進行可視化的「幅度」部分。

Here's some code這可能會幫助您開始閱讀C#中的WAVE數據。

Here's some information關於爲FFTW庫編寫C#封裝器。