转换Mp3到WAV与naudio没有写入磁盘.(仅限流)

本文关键字:磁盘 Mp3 WAV naudio 转换 | 更新日期: 2023-09-27 18:08:54

我想把mp3文件转换成WAV。在举。DirectSound辅助缓冲区只支持WAV。我正在使用naudio转换文件,这工作得很好。

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

问题是我不能在磁盘上保存文件,所以我必须使用它们与流。

 Mp3FileReader mp3reader = new Mp3FileReader(filenamePathMp3);
 var stream=WaveFormatConversionStream.CreatePcmStream(mp3reader);
引发异常值的

不在预期范围内。我怎么能使一个流与音频转换为WAV或原始音频的secondaryBuffer没有写入磁盘?

提前感谢,

转换Mp3到WAV与naudio没有写入磁盘.(仅限流)

WaveFileWriter可以写入Stream而不是文件,因此您可以传入MemoryStream。此外,Mp3FileReader.Read已经返回PCM,因此您可以读入byte[],然后如果您愿意,将其插入到内存流中。

通过使用MemoryStreamWaveFileWriter.WriteWavFileToStream,我已经实现了将MP3转换为WAV而无需将其写入磁盘你也可以设置sampleRate比特率和通道使用RawSourceWaveStream

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();
        }
    }
}