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

使用MixingWaveProvider32实现NAudio多轨播放器的快进回退问题

NAudio多轨播放器快进时MmException的解决方向

直接修改AudioFileReader.CurrentTime触发MmException的核心原因是:音频输出设备处于活跃播放状态时,MixingWaveProvider32正在实时从各轨读取数据,此时修改输入源的位置会导致设备缓冲区状态冲突。以下是具体解决步骤:

  • 先暂停/停止音频输出设备
    在调整任何轨的时间前,必须暂停(或停止)WaveOutEvent/WasapiOut等输出设备,确保MixingWaveProvider32不再从输入源读取数据:

    // waveOut为你的输出设备实例
    waveOut.Pause();
    
  • 同步所有轨的CurrentTime
    遍历所有AudioFileReader实例,统一设置目标时间,保证多轨严格同步:

    var targetTime = TimeSpan.FromSeconds(30); // 目标快进时间
    foreach (var reader in trackReaders) // trackReaders是你的AudioFileReader集合
    {
        // 避免目标时间超出文件总时长导致越界
        if (targetTime < reader.TotalTime)
        {
            reader.CurrentTime = targetTime;
        }
    }
    
  • 恢复播放
    所有轨时间调整完成后,重新启动播放:

    waveOut.Play();
    

额外注意事项:

  • 若轨经过SampleProvider等中间处理(如音量调节、均衡器),请直接修改底层AudioFileReader的CurrentTime,多数上层SampleProvider不支持直接设置位置。
  • 若用Stop()替代Pause(),后续Play()会重新初始化设备,虽有短暂延迟,但状态更稳定。
  • 查看MmException的具体错误码(如MmsysErr.InvalidParam),可定位细节问题,比如某轨时间设置超出有效范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:12:20