C# 使用NAudio从MP3文件获取音频数据

C# 使用NAudio从MP3文件获取音频数据,c#,audio,naudio,C#,Audio,Naudio,我希望能够使用NAudio从MP3文件中获取音频数据,对左右声道中的数据进行平均以创建一个数据集,然后将平均的44.1KHz音频数据重新采样到8Khz,但我在理解NAudio波流中如何表示数据方面遇到了困难 如果我有1秒的MP3音频,那么在波流中会有多少字节?通过查看一些代码样本,似乎一个样本是4字节,音频是以44100Hz采样的,我们有两个不同的通道,那么这是否意味着我们在波流中会有(44100*4*2)字节,对吗 我应该使用以下3个流中的哪一个(AStream、PCM和inputStream

我希望能够使用NAudio从MP3文件中获取音频数据,对左右声道中的数据进行平均以创建一个数据集,然后将平均的44.1KHz音频数据重新采样到8Khz,但我在理解NAudio波流中如何表示数据方面遇到了困难

如果我有1秒的MP3音频,那么在波流中会有多少字节?通过查看一些代码样本,似乎一个样本是4字节,音频是以44100Hz采样的,我们有两个不同的通道,那么这是否意味着我们在波流中会有(44100*4*2)字节,对吗

我应该使用以下3个流中的哪一个(AStream、PCM和inputStream)来获取音频数据?如何分别访问左通道和右通道数据

var AStream = new MP3FileReader(myFilePath);
var PCM = new WaveConversionStream.Createpcm(AStream);
var inputStream = new WaveChannel32(new BlockAlignStream(PCM));
我一直在考虑使用
波形转换流
转换
波形流
,但是下面的代码抛出了一个
NAudio.MmException
,并显示一条消息“acmnotable calling Acmstreamopen”

如果targetFormat等于inputStream的格式,上面的代码甚至不起作用,所以我不知道我在这里做错了什么

//Still throws NAudio.MmException
var resampled = new WaveFormatConversionStream(inputStream.WaveFormat, inputStream);

其他信息:VS2012、WPF、NAudio 1.6。

您似乎复制了属于NAudio早期版本的代码示例。
Mp3FileReader
类将发出16位样本,并默认使用ACM MP3帧解压缩器。如果您希望直接使用浮点格式的示例,则可以使用
AudioFileReader


将44.1kHz直接重采样到8kHz并不是一个特别好的主意,因为最终会产生大量的混叠,因此最好先应用低通滤波器。左声道和右声道是交错存储的,因此您得到左声道采样,然后是右声道采样,等等。

你知道我将如何对这些音频数据进行低通过滤吗?代码/链接将非常有用。为什么波形转换流会抛出NAudio.mme异常,即使我试图将该流转换为另一个44.1KHz流?我必须看到确切的输入和输出波形才能确定。对于LPF,我已经在NAudio 1.7中公开了BiQuadFilter类,因此您可以使用它。我认为MediaFoundationResampler可能会自动执行LPF,但我还没有对此进行测试。它的上采样质量非常好。
//Still throws NAudio.MmException
var resampled = new WaveFormatConversionStream(inputStream.WaveFormat, inputStream);