0

私の質問は少し抽象的ですが、十分な根拠があります。マイクのオーディオ データをスピーカーにループさせる C で記述された JACK スクリプトを正常に実行しましたが、再生中に自分でオーディオのストリームを変更する方法を知りたいです。高(または低)周波数(完全にカット)。私の理解では、オーディオはアナログ信号として送信され、デジタル値に変換されます(特定の範囲内)。

私はこの 2 つの方法のうちの 1 つを強制されていると思います。1 つの方法は、各値を処理し、それが望ましくない周波数を下回っているかどうか (または周波数を上回っているか) を確認してから、値を次のように変更することだと思います。 0 (または、再生中のオーディオの空白スポットを防ぐための最後のループ サイクルの前の値)。私が推測している2番目の方法は、JACKが周波数スペクトルによって割り当てられた値の完全な配列をバッファに提示することです。どうすればこれを行うことができますか?(将来、生データを使って他のことをしたいと思っていますが、これは生のオーディオ処理に慣れるための素晴らしいスタートだと思います)

ここに私の簡略化されたコードがあります: http://pastebin.com/Hmiumqkz 「フロート」であるはずのin値を 印刷しようとしたことがわかります。そこから周波数をフィルタリングできると思いましたが、そうではありませんこのコードを実行してもコンソールに何も出力されないので、マイクをスピーカーにループバックするだけですが、コンソールへの出力はありません.....

注: Gstreamer、ALSA、NAudio、irrKang、および Phonon ライブラリを使用するプログラムのコンパイルとテストは既に成功していますが、これらのライブラリでは、OS とオーディオに必要な生のオーディオ データとの間で必要な相互互換性を得ることができません。プロジェクト、私が尋ねるのは、「簡単」にするためだけに「他のライブラリ」を使用するように怠惰に報告する前に、よく考えてください.

4

2 に答える 2

0

SO でここで答えられるような質問をしていないので、外部のリソースを紹介します。

一般的なRBJ フィルターに基づいて EQ を設計するためのチュートリアルを次に示します。

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

そのほとんどは C ライクな擬似コードで記述されており、順を追って説明します。

于 2012-12-13T02:55:42.837 に答える
-1

正解は次のとおりです (proccess(){} コールバック関数の printf() 関数に気付くでしょう) for ループは、バッファー内の現在のフレームを出力します (周波数ドメインですが、for() ループはオーバー プリントしています)。時間なので、時間領域でもあります-周波数と時間の両方です)

http://pastebin.com/axDLw7cc

于 2012-12-13T06:09:19.870 に答える