2017-08-14 245 views

回答

0

没有内置功能,但是如果您使用AudioFileReader,则可以检查所有样本的值以查找最大绝对样本值。从这里你可以计算出原始文件可以被削减多少。

然后,您可以使用AudioFileReaderVolume属性来放大音频,然后使用WaveFileWriter.CreateWaveFile将其写入新的(IEEE浮点)WAV文件。 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

它可以很好地,但它使我的文件很大,从10MB的原件269mb ...任何想法,为什么?我可以解决吗? –

+0

好像文件仍然像真实模式,我需要压缩它,任何想法如何做到这一点或以其他方式让它恢复正常? –