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

使用MixingSampleProvider对接WasapiOut实现低延迟播放报错如何解决?

这个方案是被支持的,你遇到的报错是音频格式不匹配导致的,和使用MixingSampleProvider无关,以下是具体解决方法:

报错根因

你遇到的0x88890003错误对应AUDCLNT_E_UNSUPPORTED_FORMAT,无论是共享还是独占模式,WasapiOut都要求输入的音频格式和当前选中设备支持的格式完全匹配,你硬编码44.1kHz单声道IEEE浮点格式,和设备实际支持的格式不符,才会触发报错。

共享模式解决方法

共享模式下系统会强制所有音频流使用声卡的默认共享格式,你需要先读取设备的默认格式,再把混音器的输出格式对齐:

  • 首先通过selectedDevice.AudioClient.MixFormat获取当前设备共享模式的标准格式
  • 把你的MixingSampleProvider的WaveFormat改成和上述格式完全一致,如果你的各路输入流格式和该格式不一致,需要在输入混音器前先做重采样转换

独占模式解决方法

独占模式下不能硬编码格式,需要先枚举设备支持的所有独占格式,选匹配你需求的再使用:

  • 调用selectedDevice.AudioClient.GetSupportedFormats(AudioClientShareMode.Exclusive)枚举所有可用独占格式
  • 从枚举结果里优先选符合你需求的格式(比如优先IEEE浮点、采样率尽量接近44.1kHz、声道数符合你的混音要求)
  • 用选中的格式初始化MixingSampleProvider,再初始化WasapiOut

低延迟优化建议

你当前代码里禁用了事件同步,低延迟场景下建议开启:把WasapiOut构造函数的第三个参数改成true,可以有效降低播放抖动和延迟。

修改后的参考代码

// 先获取设备支持的格式,这里以共享模式为例,独占模式替换为枚举后的格式即可
var deviceFormat = selectedDevice.AudioClient.MixFormat;
// 确保混音器格式和设备格式完全一致
this.mixer = new MixingSampleProvider(deviceFormat)
{
   ReadFully = true
};

try
{
   // 开启事件同步,降低延迟
   using (this.audioOut = new WasapiOut(selectedDevice, AudioClientShareMode.Shared, true, 25))
   {
      this.audioOut.Init(this.mixer);
      this.audioOut.Play();
   }
}
catch (Exception e)
{
   Console.WriteLine(e);
   throw;
}

内容的提问来源于stack exchange,提问作者TheLever

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:04