2

我想将 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 或 Raw 音频的音频流制作为 secondaryBuffer?

先感谢您,

4

2 回答 2

3

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

于 2013-04-11T15:29:00.443 回答
1

我已经实现了将 MP3 转换为 WAV 而无需通过使用将其写入磁盘MemoryStreamWaveFileWriter.WriteWavFileToStream 您还可以使用设置 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();
        }
    }
}
于 2021-04-24T01:10:27.453 回答