使用するオーディオ ライブラリの推奨事項を教えてください。
楽器のチューニングに役立つ小さなプログラムを作成しようとしています。(ピアノ、ギターなど)。ALSA と Marsyas オーディオ ライブラリについて読みました。
私は、マイクからデータをサンプリングし、5〜10ミリ秒のチャンクで分析することを考えています(私が読んだものから)。次に、FFT を実行して、どの周波数に最大のピークが含まれているかを調べます。
使用するオーディオ ライブラリの推奨事項を教えてください。
楽器のチューニングに役立つ小さなプログラムを作成しようとしています。(ピアノ、ギターなど)。ALSA と Marsyas オーディオ ライブラリについて読みました。
私は、マイクからデータをサンプリングし、5〜10ミリ秒のチャンクで分析することを考えています(私が読んだものから)。次に、FFT を実行して、どの周波数に最大のピークが含まれているかを調べます。
このガイドが役立つはずです。アプリケーションにALSAを使用しないでください。より高いレベルのAPIを使用します。JACKを使用する場合は、http://jackaudio.org/applicationsにサンプルコードとして使用できる3つのインストゥルメントチューナーがあります。
Marsyas はこれを行うのに最適な選択肢であり、まさにこの種のタスク用に構築されています。
楽器をチューニングするには、音の基本周波数 (F0) を推定するアルゴリズムが必要です。これを行うアルゴリズムは多数ありますが、最新かつ最良のアルゴリズムの 1 つは、Alain de Cheveigne によって開発された YIN アルゴリズムです。私は最近、YIN アルゴリズムを Marsyas に追加しましたが、それを使用するのは非常に簡単です。
Marsyas で使用する基本的なコードは次のとおりです。
MarSystemManager mng; // すべてを含むシリーズ MarSystem* net = mng.create("シリーズ", "シリーズ"); // AubioYin で SoundFileSource からのデータを処理します 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>()) { ネット->ティック(); realvec r = net->getctrl("mrs_realvec/processedData")->to<mrs_realvec>(); cout << r(0,0) << endl; }
このコードはまず、コンポーネントを追加する Series オブジェクトを作成します。シリーズでは、各コンポーネントが前の MarSystem の出力をシリアルで受け取ります。次に、.wav または .mp3 ファイルをフィードできる SoundFileSource を追加します。次に、重なっているオーディオのチャンクを出力する ShiftInput オブジェクトを追加します。これは、オーディオのそのチャンクの基本周波数を推定する AubioYin オブジェクトに供給されます。
次に、SoundFileSource に、AudioFileName 内のファイルを読みたいことを伝えます。
while ステートメントは、SoundFileSource のデータがなくなるまでループします。while ループ内で、ネットワークが処理したデータを取得し、(0,0) 要素を出力します。これは、基本周波数の推定値です。
Marsyas の Python バインディングを使用すると、これはさらに簡単になります。
http://clam-project.org/ CLAMは、オーディオおよび音楽ドメインでの研究およびアプリケーション開発のための本格的なソフトウェアフレームワークです。概念モデルと、オーディオ信号の分析、合成、処理のためのツールを提供します。
彼らは素晴らしいAPI、素晴らしいGUI、そしてあなたがすべてを見ることができるいくつかの完成したアプリを持っています。
ALSA は、カーネル ドライバーがカーネルに含まれ、OSS が減価償却されているおかげで、Linux のデフォルトの標準のようなものです。ただし、 jackのような ALSA ユーザー空間に代わるものがあります。これは、低レイテンシのプロフェッショナル タイプのアプリケーションを対象としていると思われます。私はそれを使用したことはありませんが、API にはより優れた API があるようです。ALSA API に少し触れただけで、ほとんど何でもより優れていると思います。
Audacityには周波数プロット機能が含まれており、FFTフィルターが組み込まれています。