2009-03-04 4 views
1

DirectSoundバッファを含むメンテナンス作業を行っています。私は、バッファ内の要素をどのように解釈するか、つまりバッファ内の各値が何を表しているかを知ることを知りたいと思います。このデータはマイクからのものです。マイクキャプチャデバイスからのDirectSoundバッファ要素の解釈

この波フォーマットが使用されている:

WAVEFORMATEXTENSIBLE format = { 
    { WAVE_FORMAT_EXTENSIBLE, 1, sample_rate, sample_rate * 4, 4, 32, 22 }, 
    { 32 }, 0, KSDATAFORMAT_SUBTYPE_IEEE_FLOAT 
}; 

私の目標は、マイクの沈黙を検出することです。私は現在、各バッファ要素の強度が直接ボリュームに対応していると仮定して、バッファ内のすべての値がある閾値ボリューム値を超えないかどうかを単純に判断することによってこれを達成しています。

この私は現在しようとしています何:

bool is_mic_silent(float * data, unsigned int num_samples, float threshold) 
{ 
    float * max_iter = std::max_element(data, data + num_samples); 
    if(!max_iter) { 
    return true; 
    } 

    float max = *max_iter; 
    if(max < threshold) { 
    return true; 
    } 

    return false; // At least one value is sufficiently loud. 
} 

答えて

0

hereから、浮動小数点のPCM値は[-1、1]からです。

2

MSNによると、サンプルは32ビット浮動小数点型であると言われています。無音を検出するには、通常、RMS値を計算します。の平均値をサンプル値の一定の時間間隔(たとえば20〜50ms)で2乗し、この平均値を平方根と比較してしきい値と比較します。 マイクロホン信号に固有のノイズは、周囲の音が依然として無音と見なされる一方で、単一のサンプルが閾値を超えるようにすることができる。短い間隔での平均化は、我々の知覚とよりよく対応する値をもたらす。

0

平均サンプルに対する漢の提案に加えて、しきい値の校正を検討しています。異なる環境下、異なるマイクロフォンと異なるオーディオチャンネルでは、「沈黙」は多くのことを意味する可能性があります。

簡単な方法で、しきい値を設定することができます。または、しきい値を確認する「ノイズフロア測定」を許可します。

サンプルは線形ですが、オーディオ処理のレベルは通常dBです。したがって、yoruのターゲットオーディエンスによっては、読み込みと入力をdBに変換したい場合があります。

関連する問題