GNU/Linux >> Linux の 問題 >  >> Linux

Linux でのリアルタイム オーディオ分析

Marsyas はこれを行うのに最適です。まさにこの種のタスク用に構築されています。

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

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 オブジェクトを作成します。シリーズでは、各コンポーネントが前の MarSystem の出力をシリアルに受け取ります。次に、.wav または .mp3 ファイルをフィードできる SoundFileSource を追加します。次に、重なっているオーディオのチャンクを出力する ShiftInput オブジェクトを追加します。これは、オーディオのそのチ​​ャンクの基本周波数を推定する AubioYin オブジェクトに供給されます。

次に、SoundFileSource に、AudioFileName 内のファイルを読み取りたいことを伝えます。

while ステートメントは、SoundFileSource のデータがなくなるまでループします。 whileloop 内で、ネットワークが処理したデータを取得し、(0,0) 要素を出力します。これが基本周波数推定値です。

Marsyas の Python バインディングを使用すると、これはさらに簡単になります。


http://clam-project.org/CLAM は、オーディオと音楽の分野における研究とアプリケーション開発のための本格的なソフトウェア フレームワークです。オーディオ信号の分析、合成、処理のためのツールだけでなく、概念モデルも提供します。

優れた API、優れた GUI、すべてを確認できるいくつかの完成したアプリがあります。


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


ALSA は、カーネル ドライバがカーネルに含まれ、OSS が減価償却されているため、Linux のデフォルトの標準のようなものです。ただし、低遅延のプロフェッショナル タイプのアプリケーションを対象としているように見える、jack などの ALSA ユーザー空間の代替手段があります。この API にはもっと優れた API があるようですが、私はそれを使用したことはありませんが、ALSA API に少し触れただけで、ほとんど何でも優れていると思います。


Linux
  1. Linux の JAVA_HOME ディレクトリ

  2. Linux で TCP ラウンドトリップ時間 (RTT) の見積もりを抽出する

  3. 特定の時間に Linux デバイスをウェイクアップすることは可能ですか?

  1. Linuxをより速く起動する

  2. Linuxリアルタイムシナリオとそのソリューションの問題

  3. Linux はリアルタイムクロックをどのように使用しますか?

  1. Linux –実際のメモリ使用量?

  2. Linux – Linuxでのユニオンマウント?

  3. Linux プロセスの状態