2010-12-06 14 views
3

私はオーディオ分析は初めてですが、(一見)簡単な作業を実行する必要があります。私は、16ビットの記録(シングルチャンネル)と44100のサンプルレートを含むバイト配列を持っています。どの瞬間でもボリュームを取得するための迅速な分析はどのように実行しますか?私はしきい値を計算する必要があるので、ある振幅(ボリューム)を超えていれば真を返し、そうでなければ偽を返す関数です。私はバイト配列を反復して、その値を調べることができると思ったが、255が最も大きい。しかし、これは何も記録せず、バックグラウンドノイズが入り、配列のいくつかがいっぱいであっても機能しないようだどんな提案もすばらしいでしょう。 ありがとうバイト配列からのボリューム

+0

16ビットデータの場合は、バイトペアをチェックする必要があります。 –

+0

私はそれをshortの配列に変換しようとしました。私は負の値と255より大きい値を取得し始めました。これは正常ですか?もしそうなら、単一のチャンネルで負の値は何を表し、最大の音量値は何ですか?ありがとう – Brap

答えて

4

16ビットのデータがあるので、信号は-32768と+32767の間で変化すると予想されます。 音量を計算するには、1000サンプルの間隔をとり、RMS値を計算します。二乗されたサンプル値を1000で割って平方根を取る。この数値をあなたのしきい値と比較して確認してください。

3

典型的には、root mean squareを使用して波のエネルギーを測定します。

より知覚的に正確にしたい場合は、discrete fourier transformを介して周波数領域の信号を取り、いくつかの重み関数を使ってその大きさに積分することができます(低周波波は知覚的に高い同じエネルギーでの周波数波)。

しかし、私はオーディオのものも知らないので、私はちょっとしたものを作っています。 ☺

+0

"ものを作る"のために、それはかなり良いと思った!ありがとう。 –

+0

ありがとう。 RMSは面白いです。私は正確である必要はない、ちょうどおおよその近似。私は基本的に、ユーザーが特定のしきい値を超えて話している場合にのみイベントを呼び出す必要があります。したがって、最速の方法は私が必要なすべてです。 – Brap

0

標準偏差スライディングウィンドウを適用することがあります。 OTOH、私は255 =最大だとは思わなかったでしょう。それは可能性がありますが、私はどのようなエンコーディングが使用されているか知りたいです。圧縮があれば、255は「最も大きい」と疑う。

+0

私はMSDNのMicrophoneクラスを使用しています - http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.microphone_members.aspx PCM Waveデータが必要です。 – Brap

関連する問題