繁体   English   中英

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

[英]Getting Audio Data From MP3 File using NAudio

我希望能够使用NAudio从MP3文件中获取音频数据,对左右声道中的数据求平均以创建一个数据集,然后将平均的44.1KHz音频数据重新采样为8Khz,但是我在理解数据的方式时遇到了麻烦在NAudio Wavestream中表示。

如果我有1秒的MP3音频值,那么WaveStream中将有多少字节? 通过查看一些代码样本,似乎一个样本是4个字节,音频是以44100Hz采样的,并且我们有2个不同的通道,所以这意味着我们在波流中将有(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));

我一直在考虑使用WaveFormatConversionStream转换WaveStream ,但是下面的代码引发NAudio.MmException消息,消息为“ AcmNotPossible调用Acmstreamopen”。

 var targetFormat = new WaveFormat(8000,1);
 var resampled = new WaveFormatConversionStream(targetFormat, inputStream);

如果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并不是一个好主意,因为最终会产生很多混叠,因此理想情况下首先应使用低通滤波器。 左右声道以交错方式存储,因此您会得到一个左采样,然后是一个右采样,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM