c# - 如何将音频数据与时间相关联

标签 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)?

最佳答案

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

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

sampleCount * bytesPerSample * channels

同样,一毫秒的音频不会平均分配到44.1kHz,因此您需要选择合适的时序。

关于c# - 如何将音频数据与时间相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888838/

相关文章:

ios - 设置RubyMotion应用以播放背景音频

apache-flex - 在多次调用的函数中增加全局变量

ffmpeg如何在不转换的情况下计算从webm到mp3的大小

c# - 在类里面收藏

c# - 打开/关闭 Windows Phone 设置

android - 我需要能够在SD卡上存储我的应用程序的声音文件

iOS 13 在后台关闭应用程序 : Audio Stream Issue

c# - 如何使用 NAudio 将任何音频格式转换为 mp3

c# - CA2213 代码分析规则和自动实现的属性

c# - 从三角形的每一行中获取最大的数字并将其相加