Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将wav转换为mp3并返回到wav_C#_Winforms_Mp3_Wav_Naudio - Fatal编程技术网

C# 将wav转换为mp3并返回到wav

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

我正在使用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");
        }
    }

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

WAV是一种原始格式,因此可能不完全相同,但应该相近。您是否比较了原始和输出比特率/通道/等,以确保在转换过程中没有变化?是的,两个通道之间的所有波形设置都相同。当我执行File.ReadAllBytes时,输出的wav文件字节数组比原始数组大得多。因此,mp3转换为原始wav录音添加了额外的样本。如果输入和输出设置相等(比特率=比特率=比特率采样*采样秒*通道),则整个文件大小必须相等(除非有轻微的时间长度变化),除非原始文件已经是压缩格式。您可以尝试手动读取标题(如果WaveileReader没有提供信息)查看它是否以相同的方式存储。当我比较ReadAllBytes返回的字节数组时,数组值是相同的,但是,解码的wav文件末尾有额外的字节。不过,感谢您提供的这些信息!我对音频压缩和编码不熟悉,因此这对我来说是非常有价值的信息。