wavファイルで音のないセクションを追跡する方法は?
開発したい小さなソフトはwavファイルを分割しており、ボリュームのない領域を分割点としています。
プログラムは wav ファイルのボリュームが少ないことをどのように知ることができますか? Java または MFC を使用します。
信号のRMSを計算することにより、無音の検出に成功しました。これは次の方法で行われます(オーディオサンプルの配列があると仮定します)。
long sumOfSquares = 0;
for (int i = startindex; i <= endindex; i++) {
sumOfSquares = sumOfSquares + samples[i] * samples[i];
}
int numberOfSamples = endindex - startindex + 1;
long rms = Math.sqrt(sumOfSquares / (numberOfSamples));
rmsが特定のしきい値を下回っている場合は、サイレントであると見なすことができます。
ええと、ウェーブ ファイルは基本的に値のリストであり、あるレート (通常は 44100 Hz) で離散的に分割された音波を表します。無音は基本的に値が 0 に近い場合です。いくつかのしきい値を設定し、値がそのしきい値を下回る連続した (たとえば 100 ミリ秒の長さ) 領域を探します。
単純な無音検出は、サウンド チャンクを何らかの値 (レコードの品質に応じて選択) と順次比較することによって行われます。
何かのようなもの:
abs(track[position]) < 0.1
また
(track[position]) < 0.1) && (track[position]) > -0.1)
チャンクが [-1, 1] float であると仮定した場合。
サウンドが正規化されていると、よりうまく機能します。