从 mp3 转换流创建波形流时接收 "Not a WAVE file - no RIFF header"

Receiving "Not a WAVE file - no RIFF header" when creating wave stream from mp3 conversion stream

我正在尝试使用 NAudio 将 mp3 转换为波形流。不幸的是,我在创建 wave reader.

时在第三行收到错误 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)。

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

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

我将以我从未使用过 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));