将wav转换为mp3并转换为wav
问题描述:
我为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");
}
}
答
MP3是一种有损编解码器,因此不会解压缩到您的编码完全相同的声音。它也通过创建一系列编码的“帧”来工作,每个帧都有一个固定的长度,所以解码后的MP3通常不会与输入的持续时间完全相同,但会延长几毫秒。
WAV是原始格式,因此它可能不完全相同,但应该接近。您是否比较了原始和输出比特率/通道/等,以确保在转换过程中某些内容不会发生变化? –
是的,所有waveformat设置在2之间是相同的。当我执行File.ReadAllBytes时,输出wav文件的字节数组比原来的大得多。所以mp3转换将额外的样本添加到原始的wav录音。 –
如果输入和输出设置相同(比特率= bitsPerSample * samplesPerSecond *通道),除非原始格式已经是压缩格式,否则整个文件大小必须相同(禁止轻微的时间长度变化)。 –