接收"不是WAVE文件 - 没有RIFF标题"从mp3转换流创建wave流时

时间:2018-02-19 14:01:24

标签: c# .net naudio

我尝试使用NAudio将mp3转换为wave流。不幸的是,在创建wave阅读器时,我在第三行收到错误Not a WAVE file - no RIFF header

var mp3Reader = new Mp3FileReader(mp3FileLocation);
var pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader);
var waveReader = new WaveFileReader(pcmStream)

这些流是否应该正常协同工作?我的目标是将几个mp3和wav组合成一个流,用于播放和保存到光盘(作为wav)。

2 个答案:

答案 0 :(得分:2)

我将在序言中加上我从未使用过NAudio的说明。话虽如此,他们的Github网站上有concatenating audio的指南。

查看了API后,您无法直接使用Mp3FileReader,因为它未实现ISampleProvider。但是,您可以使用AudioFileReader代替。

假设您要加入名为IEnumerable<string>的文件名List(又名files或数组):

var sampleList = new List<ISampleProvider>();

foreach(string file in files)
{
    sampleList.add(new AudioFileReader(file));
}

WaveFileWriter.CreateWaveFile16("outfilenamegoeshere.wav", new ConcatenatingSampleProvider(sampleList));

答案 1 :(得分:0)

你不需要第二行和第三行。 Mp3FileReader会为您转换为PCM,您可以直接使用WaveOutEvent等播放器播放。要在磁盘上实际生成WAV文件,请将其传递到WaveFileWriter.CreateWaveFile

using(var reader = new Mp3FileReader(mp3FileLocation))
{
    WaveFileWriter.CreateWaveFile(reader);
}