2

私は、コンピューターのマイクから入ってくる音の振幅を知る必要があるプロジェクトに取り組んでいます。

現在、 Snack Sound ToolkitでPython を使用しており、マイクからの音声を録音できますが、その音声の音量を知る必要があります。録音をファイルに保存し、別のツールキットを使用してオーディオ ファイルから特定の時点での振幅を読み取るか、オーディオが入ってくる間に振幅を取得しようとすることができます (エラーが発生しやすくなる可能性があります)。

これに役立つライブラリやサンプル コードはありますか? 調べてみたところ、Snack Sound Toolkit が私の最善の希望のようですが、振幅に直接アクセスする方法はないようです。

4

3 に答える 3

3

Snack Sound Toolkit の例を見ると、dbPowerSpectrum 関数があるようです。

参照から:

dBPowerSpectrum ( )

(開始オプションで指定されたサンプル番号で) サウンドの対数 FFT パワー スペクトルを計算し、dB 値のリストを返します。残りのオプションの説明については、セクション項目を参照してください。オプションで、end オプションを使用して終了点を指定できます。この場合、結果は指定された範囲内の連続する FFT の平均です。デフォルトの間隔は fftlength から取得されますが、これはスキップ オプションを使用して変更できます。スキップ オプションは、各ステップで FFT ウィンドウを移動するポイントの数を示します。オプション:

編集:振幅と言うときは、時間領域の電圧ではなく、音が人間にどのように「大きく」見えるかを意味していると思います(正弦波の積分が0になるため、おそらく全長で0になります. 例: 10 * sin(t) は 5 * sin(t) よりも音量が大きくなりますが、時間の経過に伴う平均値は 0 です (いずれにせよ、AC 以外の電圧をスピーカーに送りたくはありません)。

音の大きさを知るには、各周波数成分の振幅を決定する必要があります。これは、サウンドをその周波数成分に分解するフーリエ変換 (FFT) で行われます。dbPowerSpectrum 関数は、各周波数の大きさのリストを提供するようです (これがパワー スペクトルの正確な定義と異なる場合はご容赦ください)。総音量を取得するには、リスト全体を合計するだけです (人間の耳には周波数応答自体があるため、知覚される音量とは異なる場合がありますが、これは近い値になります)。

于 2009-04-12T22:56:54.907 に答える
1

私はCookieOfFortuneからのこの「答え」に完全に同意しません。

確かに、質問の言い回しは不十分です...しかし、この答えは、物事を必要以上に複雑にします。「振幅」とは、知覚されるラウドネスを意味すると思います。技術的には、(PCM)オーディオストリームの各サンプルは、特定のタイムスライスでの信号の振幅を表します。ラウドネス表現を取得するには、簡単なRMS計算を試してください。

RMS

| K <

于 2009-04-23T14:28:38.357 に答える
0

これが役立つかどうかはわかりませんが、skimpygimpyは、WAVEファイルをPythonシーケンスに解析して元に戻す機能を提供します。これを使用して、波形サンプルを直接調べ、好きなことを行うことができます。いくつかのソースを読む必要があります。これらのサブコンポーネントは文書化されていません。

于 2009-05-10T16:30:16.187 に答える