2

wavファイルで音のないセクションを追跡する方法は?

開発したい小さなソフトはwavファイルを分割しており、ボリュームのない領域を分割点としています。

プログラムは wav ファイルのボリュームが少ないことをどのように知ることができますか? Java または MFC を使用します。

4

3 に答える 3

8

信号の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が特定のしきい値を下回っている場合は、サイレントであると見なすことができます。

于 2009-11-27T11:30:19.077 に答える
3

ええと、ウェーブ ファイルは基本的に値のリストであり、あるレート (通常は 44100 Hz) で離散的に分割された音波を表します。無音は基本的に値が 0 に近い場合です。いくつかのしきい値を設定し、値がそのしきい値を下回る連続した (たとえば 100 ミリ秒の長さ) 領域を探します。

于 2009-11-27T11:20:12.857 に答える
0

単純な無音検出は、サウンド チャンクを何らかの値 (レコードの品質に応じて選択) と順次比較することによって行われます。

何かのようなもの:

abs(track[position]) < 0.1

また

(track[position]) < 0.1) && (track[position]) > -0.1)

チャンクが [-1, 1] float であると仮定した場合。

サウンドが正規化されていると、よりうまく機能します。

于 2009-11-27T11:20:28.537 に答える