我想将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或原始音频来制作流?
提前谢谢你,
答案 0 :(得分:2)
WaveFileWriter
可以写入Stream
而不是文件,因此您只需传入MemoryStream
即可。此外,Mp3FileReader.Read
已经返回PCM,因此您可以读出byte[]
,然后根据需要将其插入到您的内存流中。
答案 1 :(得分:0)
我已经通过使用 MemoryStream
和 WaveFileWriter.WriteWavFileToStream
实现了将 MP3 转换为 WAV 而无需将其写入磁盘
您还可以使用 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();
}
}
}