如何将音频数据与时间联系起来

时间:2015-03-05 22:15:23

标签: c# audio mp3 naudio

假设我想从Mp3文件中读取1毫秒的声音数据并显示它。像这样:

var stream = NAudio.WaveStream.Mp3FileReader(filename);
int intervalInMilliseconds = someInterval;
int bytesPerInterval = ???;
for(int i = 0; i < bytesPerInterval;i++)
{
     Console.WriteLine(stream.GetByte());
}

我需要做些什么来解决bytesPerInterval?这甚至可以做到准确吗? (注意:NAudio不是这里的要求,正是我目前使用的。)

或者,如果我有一个字节索引,是否可以确定该字节的播放时间点(相对于时间00:00:0000)?

1 个答案:

答案 0 :(得分:1)

您无法直接从MP3读取1毫秒的音频数据。 MP3在频域中工作,具有固定大小的时间片。典型的切片大约是13毫秒。

要获得准确的计时,您需要将音频转换回时域中的样本。使用16位PCM样本,每秒4400次采样CD质量的音频。计算此数据的原始大小(以字节为单位)很简单:

sampleCount * bytesPerSample * channels

此外,一毫秒的音频不能均匀分为44.1kHz,因此您需要选择适当的时序。