You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算NAudio音频采样的时长(适配Media Foundation的100纳秒单位)

计算NAudio音频采样的Media Foundation时长(100纳秒单位)

要计算音频采样的时长并转换为Media Foundation要求的100纳秒单位,核心是基于音频的采样率、通道数和总采样数三个参数推导,步骤如下:

核心公式推导

  1. 基础逻辑:采样率(如44100Hz)代表每个通道每秒采集的样本数。
  2. 时长(秒)= 单通道采样数 ÷ 采样率
  3. 转换为100纳秒单位:1秒 = 107个100纳秒单位(因为1秒=109纳秒,10^9 ÷ 100 = 10^7)
  4. 最终公式:
    时长(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:20:28