簡體   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