如何将音频数据与时间相关联
How to relate audio data to time
假设我想从 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)?
不能直接从MP3中读取1毫秒的音频数据。 MP3 在具有固定大小时间片的频域中工作。一个典型的切片大约为 13 毫秒。
要获得准确的时序,您需要将音频转换回时域中的样本。使用 16 位 PCM 样本每秒对 CD 质量的音频进行 44,100 次采样。计算此数据的原始大小(以字节为单位)很简单:
sampleCount * bytesPerSample * channels
此外,1 毫秒的音频不会均匀地分成 44.1kHz,因此您需要选择可以分割的时间。
假设我想从 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)?
不能直接从MP3中读取1毫秒的音频数据。 MP3 在具有固定大小时间片的频域中工作。一个典型的切片大约为 13 毫秒。
要获得准确的时序,您需要将音频转换回时域中的样本。使用 16 位 PCM 样本每秒对 CD 质量的音频进行 44,100 次采样。计算此数据的原始大小(以字节为单位)很简单:
sampleCount * bytesPerSample * channels
此外,1 毫秒的音频不会均匀地分成 44.1kHz,因此您需要选择可以分割的时间。