【发布时间】:2017-08-23 06:40:55
【问题描述】:
我正在使用 LAME 的 NAudio 包装器将我的 wav 文件转换为 mp3。但是,当我使用 NAudio 将我的 mp3 转换回 wav 时,wav 文件比原始 wav 文件大一点。有没有办法让原始和解码的 wav 文件大小完全相同?除此之外,其他一切正常,我可以毫无问题地播放 wav 和 mp3 文件。谢谢,我在下面包含了我的转换函数:
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");
}
}
【问题讨论】:
-
WAV 是一种原始格式,因此可能不完全相同,但应该接近。您是否比较了原始和输出的比特率/频道/等,以确保在转换过程中没有发生任何变化?
-
是的,两者之间的所有waveformat设置都相同。当我执行File.ReadAllBytes时,输出的wav文件字节数组比原来的要大得多。因此 mp3 转换为原始 wav 录音添加了额外的样本。
-
如果输入和输出设置相等(比特率 = bitsPerSample * samplesPerSecond * 通道),除非原始文件已经是压缩格式,否则总文件大小必须相等(除非时间长度略有变化)。跨度>
-
您可以尝试手动读取标题(如果 WaveFileReader 没有为您提供信息)以查看它是否以相同的方式存储。 soundfile.sapp.org/doc/WaveFormat
-
当我比较从 ReadAllBytes 返回的字节数组时,数组值是相同的,但是解码后的 wav 文件最后有多余的字节。不过感谢您提供此信息!我是音频压缩和编码的新手,所以这对我来说是非常有价值的信息。
标签: c# winforms mp3 wav naudio