2017-03-29 137 views
0

我为LAME使用NAudio包装将我的wav文件转换为mp3。但是,当我使用NAudio将我的mp3转换回wav时,wav文件比原始wav文件稍大。有没有一种方法可以让原始和解码的wav文件尺寸完全相同?除此之外,其他所有工作,我可以播放WAV和MP3文件没有问题。谢谢,我已经包含了我下面的转换功能:将wav转换为mp3并转换为wav

private void ConvertWavMP3(string wavFile) 
    { 
     try 
     { 
      using (var wavRdr = new WaveFileReader(wavFile)) 
      using (var mp3Writer = new LameMP3FileWriter(wavFile.Replace(".wav", ".mp3"), wavRdr.WaveFormat, 128)) 
      { 
       wavRdr.CopyTo(mp3Writer); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error converting wav to mp3.", "CONVERSION ERROR"); 
     } 
    } 

    private static void ConvertMp3ToWav(string mp3File) 
    { 
     try 
     { 
      using (Mp3FileReader reader = new Mp3FileReader(mp3File)) 
      { 
       //using (WaveStream pcmStream = new WaveFormatConversionStream(new WaveFormat(8000, 16, 1), reader)) 
       using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(reader)) 
       { 
        WaveFileWriter.CreateWaveFile(mp3File.Replace(".mp3", ".wav"), pcmStream); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error converting mp3 to wav.", "CONVERSION ERROR"); 
     } 
    } 
+0

WAV是原始格式,因此它可能不完全相同,但应该接近。您是否比较了原始和输出比特率/通道/等,以确保在转换过程中某些内容不会发生变化? –

+0

是的,所有waveformat设置在2之间是相同的。当我执行File.ReadAllBytes时,输出wav文件的字节数组比原来的大得多。所以mp3转换将额外的样本添加到原始的wav录音。 –

+0

如果输入和输出设置相同(比特率= bitsPerSample * samplesPerSecond *通道),除非原始格式已经是压缩格式,否则整个文件大小必须相同(禁止轻微的时间长度变化)。 –

回答

0

MP3是一种有损编解码器,因此不会解压缩到您的编码完全相同的声音。它也通过创建一系列编码的“帧”来工作,每个帧都有一个固定的长度,所以解码后的MP3通常不会与输入的持续时间完全相同,但会延长几毫秒。