如何解释MP3文件中的原始pcm数据

时间:2015-03-11 21:42:07

标签: c# audio mp3

我正在使用NAudio从MP3文件中检索原始pcm数据。然后我需要以设定的间隔(基于时间)读取这些数据。

但是,我很难理解如何解释这些数据。例如,如果MP3是立体声vs单声道与其他任何东西,我应该如何读取数据?我如何检查MP3是立体声还是单声道?还有哪些因素可以改变我需要读取数据的方式?

我希望在这里提供示例代码,但感谢任何帮助。

NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(mp3FilePath));
int someInterval = 88200;//~1 second depending on the file specs
byte[] buffer = new byte[someInterval];
int current = 0;
int ret = 0;
do
{
     ret = pcm.Read(buffer, current, someInterval);

     //do something

     current += someInterval;
} while (ret != -1);

上一个问题的背景:(How to relate audio data to time

If you have a raw audio file (no headers or anything) with a single channel (mono, not stereo) sampled at 44.1kHz 16 bit, then you would read 88,200 bytes per second of data [to read 1 second of audio data].

如何检测频道?然后我如何读取pcm数据以匹配它?

1 个答案:

答案 0 :(得分:2)

您可以从pcm.WaveFormat获取格式,您可以从中找到频道数,频道数,每秒平均字节数等等。

NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(mp3FilePath));
int someInterval = pcm.WaveFormat.Channels * pcm.WaveFormat.SampleRate * pcm.WaveFormat.BitsPerSample/8;

从那里你需要将字节解码为整数或浮点数。解决这个问题的SO有很多答案。