C# 将wav转换为mp3并返回到wav
我正在使用NAudio包装器将我的wav文件转换为mp3。但是,当我使用NAudio将mp3转换回wav时,wav文件比原始wav文件大一点。有没有一种方法可以让原始和解码的wav文件大小完全相同?除此之外,其他一切都可以正常工作,我可以毫无问题地播放wav和mp3文件。谢谢,我已将我的转换功能包括在下面:C# 将wav转换为mp3并返回到wav,c#,winforms,mp3,wav,naudio,C#,Winforms,Mp3,Wav,Naudio,我正在使用NAudio包装器将我的wav文件转换为mp3。但是,当我使用NAudio将mp3转换回wav时,wav文件比原始wav文件大一点。有没有一种方法可以让原始和解码的wav文件大小完全相同?除此之外,其他一切都可以正常工作,我可以毫无问题地播放wav和mp3文件。谢谢,我已将我的转换功能包括在下面: private void ConvertWavMP3(string wavFile) { try { using (var w
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是一种原始格式,因此可能不完全相同,但应该相近。您是否比较了原始和输出比特率/通道/等,以确保在转换过程中没有变化?是的,两个通道之间的所有波形设置都相同。当我执行File.ReadAllBytes时,输出的wav文件字节数组比原始数组大得多。因此,mp3转换为原始wav录音添加了额外的样本。如果输入和输出设置相等(比特率=比特率=比特率采样*采样秒*通道),则整个文件大小必须相等(除非有轻微的时间长度变化),除非原始文件已经是压缩格式。您可以尝试手动读取标题(如果WaveileReader没有提供信息)查看它是否以相同的方式存储。当我比较ReadAllBytes返回的字节数组时,数组值是相同的,但是,解码的wav文件末尾有额外的字节。不过,感谢您提供的这些信息!我对音频压缩和编码不熟悉,因此这对我来说是非常有价值的信息。