1

この例 のように、入力オーディオストリームから周波数情報を抽出する方法 (PortAudio を使用)? portaudio と numpy が気になる…

fft について 100% 確信が持てません。どうすれば numpy をチャンクに渡して、低音、中音、高音の -1.0 から 1.0 までの 3 つの値を取得できますか?

これのオーディオ部分を理解できるので、これが1つのチャネルだけであってもかまいません。それらを見ると、目の前を泳ぐのは数学です:)

4

2 に答える 2

1

あなたが指しているSOの質問に対する選択された回答で言及されているフーリエ変換は、「スペクトル」を提供します-さまざまな範囲/周波数のスライスのそれぞれで音の強さを与える値の大きなコレクションです(たとえば、で表​​現されますヘルツ)。

1,000 個の強度 (たとえば、スペクトルの各 10 ヘルツ スライスごとに 1 つ) を 3 つの数値に変換 (たとえば) する方法は、もちろん非常にヒューリスティックな問題です。周波数は「低音」と「高音」に対応し、その間のすべてが「中」であり、それぞれの平均強度を計算します。価値のあることとして、「低音」の一般的な規則は最大250Hz、「高音」の6KHz以上(その間が「ミッドレンジ」)であると思います。たとえば、このページを参照してください-しかし、それはむしろ任意の規則です。だから、「あなたの毒を選んでください」!-)

相対レベルを取得したら、それらを相互に正規化し、適切にスケーリングして目的の範囲に収まるようにします (おそらく対数スケールで、それが人間の聴覚のしくみです;-)。

于 2009-11-25T03:26:19.217 に答える
1

実際には、これを行うためにフーリエ変換を使用することはありません。

オーディオ信号を低音、中音、高音に分割するには、通常、フィルターを使用します。フィルタは、特定の周波数範囲を減衰させる信号処理デバイスです。フィルターは、デジタルまたは電気的に構築できます。たとえば、スピーカーのオーディオ クロスオーバー システムで使用されます。

低域の低音部分を得るには、ローパス フィルターを使用します。ローパス フィルターは、高周波数をフィルター処理します。「ハイカット」フィルターとも呼ばれます。
中間周波数の中間部分を取得するには、バンドパス フィルターを使用します。バンドパス フィルターは、低周波数と高周波数の両方をフィルター処理します。それらは「ベルフィルター」とも呼ばれます。
高周波の高音部分を得るには、ハイパス フィルターを使用します。ハイパス フィルターは、低周波数をフィルター処理します。これらは「ローカット」フィルターとも呼ばれます。

実際には、ハイパス フィルターとローパス フィルターのみを使用することもできます。元の信号から両方のフィルター処理された信号を減算すると、結果はバンドパス フィルター処理された信号になります。これにより、フィルターが 1 つ節約されます。

各フィルタにはしきい値周波数があります。しきい値周波数は、フィルタがフィルタリングを開始する特別な周波数です。フィルター次数に応じて、信号は 6 dB/oct (1 次)、12 dB/oct (2 次)、18 dB/oct (3 次) などで減衰されます。アプリケーションの場合、2 次設計はおそらく大丈夫です。
一般に、フィルタはいくつかの方法で信号を混乱させ、次数が高くなるほど、これが聞こえるようになることに注意してください。ところで、これは純粋な物理学であり、フーリエ変換を含むすべての信号処理に当てはまります。

これら 3 つのフィルターを使用することは、3 つのスペクトル ポイントのみを使用してフーリエ変換を行うことと同等です (可能性があります)。

于 2011-04-15T07:08:39.670 に答える