gpt4 book ai didi

c# - 使用 NAudio 从 MP3 文件中获取音频数据

转载 作者:行者123 更新时间:2023-12-03 02:15:48 25 4
gpt4 key购买 nike

我希望能够使用 NAudio 从 MP3 文件中获取音频数据,平均左右声道中的数据以创建一个数据集,然后将平均 44.1KHz 音频数据重新采样为 8Khz,但我无法理解数据是如何的以 NAudio Wavestream 表示。

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

我一直在考虑转换 WaveStream使用 WaveFormatConversionStream但下面的代码会抛出 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 并不是一个特别好的主意,因为最终会产生很多混叠,因此理想情况下首先应用低通滤波器。左右 channel 交错存储,因此您会得到一个左样本,然后是一个右样本,依此类推。

关于c# - 使用 NAudio 从 MP3 文件中获取音频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com