C# “接收”;非波形文件-无RIFF头“;从mp3转换流创建波形流时

C# “接收”;非波形文件-无RIFF头“;从mp3转换流创建波形流时,c#,.net,naudio,C#,.net,Naudio,我正在尝试使用NAudio将mp3转换为波形流。不幸的是,在创建WAVE阅读器时,我在第三行收到错误不是WAVE文件-没有RIFF头 var mp3Reader = new Mp3FileReader(mp3FileLocation); var pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader); var waveReader = new WaveFileReader(pcmStream) 这些流不应该一起正常工作

我正在尝试使用NAudio将mp3转换为波形流。不幸的是,在创建WAVE阅读器时,我在第三行收到错误
不是WAVE文件-没有RIFF头

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

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

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

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

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

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

我将在这篇文章的开头加上一张我从未使用过NAudio的便条。话虽如此,在他们的Github网站上有一个指南

查看了API之后,您不能直接使用
Mp3FileReader
,因为它没有实现
ISampleProvider
。但是,您可以使用
AudioFileReader

假设您有一个
IEnumerable
(又称
列表
或数组)文件名,这些文件名是您想要加入命名的
文件

var sampleList = new List<ISampleProvider>();

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

WaveFileWriter.CreateWaveFile16("outfilenamegoeshere.wav", new ConcatenatingSampleProvider(sampleList));
var sampleList=newlist();
foreach(文件中的字符串文件)
{
添加(新的AudioFileReader(文件));
}
CreateWaveFile16(“outfileNameGoesher.wav”,新的连接采样提供程序(sampleList));

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

查看了API之后,您不能直接使用
Mp3FileReader
,因为它没有实现
ISampleProvider
。但是,您可以使用
AudioFileReader

假设您有一个
IEnumerable
(又称
列表
或数组)文件名,这些文件名是您想要加入命名的
文件

var sampleList = new List<ISampleProvider>();

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

WaveFileWriter.CreateWaveFile16("outfilenamegoeshere.wav", new ConcatenatingSampleProvider(sampleList));
var sampleList=newlist();
foreach(文件中的字符串文件)
{
添加(新的AudioFileReader(文件));
}
CreateWaveFile16(“outfileNameGoesher.wav”,新的连接采样提供程序(sampleList));

看看这个,看看这个,看看这个,确实有一个警告,所有文件都必须使用相同的采样率、通道计数和位深度。否则,您可能必须先对文件进行一些欺骗(并将其保存为新文件?)
CreateWaveFile16
不接受
IEnumerable
,因此此代码不会编译。如果您想要串联
ISampleProviders
,可以使用
followerby
扩展方法将它们链接在一起。采样率和通道计数可能与MP3相匹配,因为它们通常为44.1kHzstereo@MarkHeath哎哟,我错过了创建
连接采样提供程序
对象。是的,这将与采样率/通道计数有关的警告一起工作。我的WAV是相同的采样/通道,但mp3是完全不同的文件类型,但它可以处理上述代码(必须添加ConcatenatingSampleProvider部分)。采样/通道必须仅为wav,或者mp3转换为wav,并且自动匹配第一个wav?似乎有一个警告,即所有文件必须使用相同的采样率、通道计数和位深度。否则,您可能必须先对文件进行一些欺骗(并将其保存为新文件?)
CreateWaveFile16
不接受
IEnumerable
,因此此代码不会编译。如果您想要串联
ISampleProviders
,可以使用
followerby
扩展方法将它们链接在一起。采样率和通道计数可能与MP3相匹配,因为它们通常为44.1kHzstereo@MarkHeath哎哟,我错过了创建
连接采样提供程序
对象。是的,这将与采样率/通道计数有关的警告一起工作。我的WAV是相同的采样/通道,但mp3是完全不同的文件类型,但它可以处理上述代码(必须添加ConcatenatingSampleProvider部分)。样本/频道必须仅为wav,或者mp3转换为wav,并且它们自动匹配第一个wav?