我尝试使用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)。
答案 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);
}