2017-08-14 18 views

答えて

0

組み込み機能はありませんが、AudioFileReaderを使用すると、すべてのサンプルの値を調べて最大絶対サンプル値を見つけることができます。これにより、元のファイルをクリッピングしないでどれだけ増幅できるかを調べることができます。

その後は、オーディオを増幅するためAudioFileReaderVolumeプロパティを使用して、新しい(IEEE浮動小数点)WAVファイルにそれを書き出すWaveFileWriter.CreateWaveFileを使用することができます。 WaveFileWriter.CreateWaveFile16は、正規化後に16ビットの出力が必要な場合に使用できます。

は、ここではいくつかの非常に簡単なサンプルコード

var inPath = @"E:\Audio\wav\input.wav"; 
var outPath = @"E:\Audio\wav\normalized.wav"; 
float max = 0; 

using (var reader = new AudioFileReader(inPath)) 
{ 
    // find the max peak 
    float[] buffer = new float[reader.WaveFormat.SampleRate]; 
    int read; 
    do 
    { 
     read = reader.Read(buffer, 0, buffer.Length); 
     for (int n = 0; n < read; n++) 
     { 
      var abs = Math.Abs(buffer[n]); 
      if (abs > max) max = abs; 
     } 
    } while (read > 0); 
    Console.WriteLine($"Max sample value: {max}"); 

    if (max == 0 || max > 1.0f) 
     throw new InvalidOperationException("File cannot be normalized"); 

    // rewind and amplify 
    reader.Position = 0; 
    reader.Volume = 1.0f/max; 

    // write out to a new WAV file 
    WaveFileWriter.CreateWaveFile(outPath, reader); 
} 
+0

それはうまく動作しますが、それは269メガバイトにオリジナルとして10メガバイトから、私のファイルが巨大になります...なぜ任意のアイデアですか?私はそれを解決することはできますか? –

+0

は、リアルモードのようなファイルが残っているように見えます。私はそれを圧縮する必要があります。どのようにしてそれを達成するか、別の方法で正常に戻すには? –

関連する問題