使用naudio将Mp3转换为WAV而无需在磁盘上写入。 (仅限流)

时间:2013-04-11 15:20:37

标签: c# mp3 wav naudio

我想将mp3文件转换为WAV。在DirectX.DirectSound中,辅助缓冲区仅支持WAV。我正在使用naudio转换文件,这工作正常。

using (Mp3FileReader reader = new Mp3FileReader(mp3File))
{
    WaveFileWriter.CreateWaveFile(outputFile, reader);
}

问题是我无法将文件保存在磁盘上,所以我必须将它们与流一起使用。

 Mp3FileReader mp3reader = new Mp3FileReader(filenamePathMp3);
 var stream=WaveFormatConversionStream.CreatePcmStream(mp3reader);
抛出异常的

值不在预期范围内。如何在不写入磁盘的情况下将音频转换为二级缓冲区的WAV或原始音频来制作流?

提前谢谢你,

2 个答案:

答案 0 :(得分:2)

WaveFileWriter可以写入Stream而不是文件,因此您只需传入MemoryStream即可。此外,Mp3FileReader.Read已经返回PCM,因此您可以读出byte[],然后根据需要将其插入到您的内存流中。

答案 1 :(得分:0)

我已经通过使用 MemoryStreamWaveFileWriter.WriteWavFileToStream 实现了将 MP3 转换为 WAV 而无需将其写入磁盘 您还可以使用 RawSourceWaveStream

设置 sampleRate 比特率和频道
public static byte[] ConvertMp3ToWav(byte[] mp3File)
{
    using (var retMs = new MemoryStream())
    using (var ms = new MemoryStream(mp3File))
    using (Mp3FileReader reader = new Mp3FileReader(ms))
    {
        var rs = new RawSourceWaveStream(reader, new WaveFormat(16000, 1));
        using (WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(rs))
        {
            WaveFileWriter.WriteWavFileToStream(retMs,pcmStream);
            return retMs.ToArray();
        }
    }
}