如何计算NAudio音频采样的时长(适配Media Foundation的100纳秒单位)
计算NAudio音频采样的Media Foundation时长(100纳秒单位)
要计算音频采样的时长并转换为Media Foundation要求的100纳秒单位,核心是基于音频的采样率、通道数和总采样数三个参数推导,步骤如下:
核心公式推导
- 基础逻辑:采样率(如44100Hz)代表每个通道每秒采集的样本数。
- 时长(秒)= 单通道采样数 ÷ 采样率
- 转换为100纳秒单位:1秒 = 107个100纳秒单位(因为1秒=109纳秒,10^9 ÷ 100 = 10^7)
- 最终公式:
时长(100纳秒)= (单通道采样数 × 10000000) ÷ 采样率
结合NAudio的代码实现
假设你已经通过NAudio获取了音频数据和对应的WaveFormat对象(包含采样率、通道数、位深度等信息),可以这样计算:
// 从NAudio捕获设备或音频流获取的WaveFormat WaveFormat waveFormat = yourCaptureDevice.WaveFormat; // 捕获到的原始音频字节数组 byte[] capturedAudioBytes = ...; // 计算总采样数(所有通道的样本总和) int totalSamples = capturedAudioBytes.Length / (waveFormat.BitsPerSample / 8); // 计算单通道的采样数 int singleChannelSamples = totalSamples / waveFormat.Channels; // 转换为Media Foundation要求的100纳秒单位时长 long durationIn100Ns = (long)((double)singleChannelSamples * 10000000 / waveFormat.SampleRate);
关键说明
- 用
double计算是为了避免整数除法导致的精度丢失,最后转成long符合Media Foundation对时长参数的类型要求(通常是LONGLONG)。 - 如果你的音频数据是直接以采样数组形式获取(而非字节数组),可以直接用采样数组长度作为
totalSamples,再除以通道数得到单通道采样数。
内容的提问来源于stack exchange,提问作者Javid
相关产品推荐
相关产品推荐

