2009-04-12 1 views
2

私は、コンピュータのマイクから入ってくるサウンドの振幅を知る必要があるプロジェクトに取り組んでいます。サウンドファイル内の所定の時間に振幅を取得しますか?

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

これで私を助けるライブラリやサンプルコードはありますか?私は見てきましたが、今のところSnack Sound Toolkitは私の最大の希望ですが、振幅に直接アクセスする方法はないようです。

答えて

3

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

dBPowerSpectrum()

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

EDIT:私はあなたが振幅と言うとき、あなたは音が人間にどのように「大音量」であり、時間領域の電圧ではないかを意味すると仮定しています(積分から全長にわたって0例えば、10 * sin(t)は5 * sin(t)よりも大きくなりますが、時間の経過とともにその平均値は0になります。(AC以外の電圧をスピーカーに送信したくないいずれかの方法))。

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

1

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

与えられた問題は、表現が間違っています...しかし、この答えは物事を必要以上に複雑にしています。私は、あなたが知覚したラウドネスを意味する「振幅」によって仮定しています。技術的には、(PCM)オーディオストリームの各サンプルは、所与のタイムスライスにおける信号の振幅を表す。ラウドネスの表現は、単純なRMS計算してみてください取得するには:

RMS

を| K <

+0

ライブラリにはRMS機能がありませんでした。私は、すべての周波数でのパワースペクトルの積分は、RMSと数学的に比例していなければならないと考えています。 (パワースペクトラムはW/hzで、RMSはWで、すべてのhzに積分してWを残します)。 – CookieOfFortune

+1

あなたは間違っていません。ディスクリート信号のパワーを得るためにFFTを実行することは、ショットガンでイエバエを撃つようなものです。それは機能しますが、むしろ無駄です。 – kent

0

私はこれが役立つかどうかわからないんだけど、 skimpygimpy は、Python にWAVEファイルを解析するための機能を提供シーケンスとバック - 可能性がありますこの を直接波形のサンプルを調べると あなたが好きなことを行う。いくつかのソースを読む必要があります。 これらのサブコンポーネントは文書化されていません。

関連する問題