2009-03-31 11 views
10

私は使用するのに推奨されるオーディオライブラリは何ですか?Linuxでのリアルタイムオーディオ解析

私は、楽器をチューニングするのに役立つ小さなプログラムを作ろうとしています。 (ピアノ、ギターなど)。私はALSA & Marsyasオーディオライブラリについて読んだことがあります。

マイクからデータをサンプリングするのがアイデアだと思っています。私が読んだところから5-10msのチャンクを分析しています。次に、FFTを実行して、どの周波数に最大ピークが含まれているかを把握します。

答えて

4

これを行うにはMarsyasが最適です。このようなタスクのために作られています。

楽器をチューニングするには、音の基本周波数(F0)を推定するアルゴリズムを使用する必要があります。これを行うためのアルゴリズムがいくつかありますが、最新で最高の は、Alain de Cheveigneによって開発されたYINアルゴリズムです。私は最近、YARアルゴリズム をMarsyasに追加しました。それを使用するのは簡単です。

ここであなたがマルシュアスで使用する基本的なコードです:

 
    MarSystemManager mng; 

    // A series to contain everything 
    MarSystem* net = mng.create("Series", "series"); 

    // Process the data from the SoundFileSource with AubioYin 
    net->addMarSystem(mng.create("SoundFileSource", "src")); 
    net->addMarSystem(mng.create("ShiftInput", "si")); 
    net->addMarSystem(mng.create("AubioYin", "yin")); 

    net->updctrl("SoundFileSource/src/mrs_string/filename",inAudioFileName); 

    while (net->getctrl("SoundFileSource/src/mrs_bool/notEmpty")->to<mrs_bool>()) { 
    net->tick(); 
    realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>(); 
    cout << r(0,0) << endl; 
    } 

このコードは、最初に、我々はにコンポーネントを追加しますSeriesオブジェクトを作成します。 Seriesでは、各コンポーネント は、以前のMarSystemの出力をシリアルで受け取ります。その後、SoundFileSourceを追加します。 を.wavまたは.mp3ファイルに埋め込むことができます。次に、重複するオーディオのチャンクを出力するShiftInputオブジェクトを追加します。 は、オーディオのチャンクの基本周波数を推定するAubioYinオブジェクトに入力されます。

次に、SoundFileSourceに、ファイルinAudioFileNameを読み込ませるように指示します。

whileステートメントは、SoundFileSourceでデータがなくなるまでループします。 whileループの中では、ループが処理したデータを取り出して、基本周波数推定値 である(0,0)要素を出力します。

これは、マルシアのPythonバインディングを使用するとさらに簡単です。

2

ALSAは、カーネルドライバがカーネルに組み込まれており、OSSが償却されているため、Linuxのデフォルト標準の一種です。しかし、低レイテンシのプロフェッショナルタイプのアプリケーションを目指しているような、jackのようなALSAユーザスペースの代替案があります。それはAPIがより良いAPIを持っているようですが、私はそれを使用していませんが、ALSA APIへの短期間の露出は、私がほとんどのものがより良いと思うようにするでしょう。

5

guideが役立ちます。アプリケーションにALSAを使用しないでください。より高いレベルのAPIを使用します。 JACKを使いたい場合はhttp://jackaudio.org/applicationsに3つの楽器チューナーがあり、これをサンプルコードとして使用できます。

0

Audacityには、周波数プロット機能が組み込まれており、FFTフィルタが組み込まれています。

3

http://clam-project.org/ CLAMは、オーディオおよび音楽ドメインの研究およびアプリケーション開発のための本格的なソフトウェアフレームワークです。これは、オーディオ信号の解析、合成、および処理のためのツールと同様に、概念モデルを提供します。

これらは素晴らしいAPIと素敵なGUIと、すべてを見ることができるいくつかの完成したアプリを持っています。

関連する問題