首页
/ BizHawk模拟器中SubGBHawk核心音频输出崩溃问题分析

BizHawk模拟器中SubGBHawk核心音频输出崩溃问题分析

2025-07-02 12:09:39作者:瞿蔚英Wynne

问题概述

在BizHawk模拟器使用SubGBHawk核心时,当同时满足以下条件时会出现XAudio2音频输出崩溃的问题:

  1. 将"Input cycle"轴输入设置为0
  2. 使用音频节流(Audio Throttle)功能
  3. 启用了"Unthrottled"选项
  4. 使用XAudio2作为音频输出后端

技术细节分析

该问题表现为SharpGen.Runtime.SharpGenException异常,错误代码为XAUDIO2_E_INVALID_CALL,表明XAudio2音频接口接收到了无效调用。具体发生在IXAudio2SourceVoice.SubmitSourceBuffer方法调用时。

值得注意的是,SubGBHawk核心内部实际上会将0值的"Input cycle"输入自动转换为70224,因此理论上这个设置不应该直接影响核心运行。这表明问题可能与音频子系统处理特定输入状态的方式有关。

可能的影响因素

  1. 音频缓冲区设置:用户报告使用100毫秒的音频缓冲区大小,这可能影响音频系统的稳定性
  2. 输入设备映射:当将轴输入映射到WMouse X并缓慢滚动至0时,可能触发特定条件
  3. 音频后端差异:问题仅在使用XAudio2时出现,而OpenAL后端不受影响
  4. 设备依赖性:问题可能在某些特定音频硬件配置下才会显现

解决方案

开发团队已在BizHawk 2.10.1开发版本中修复了此问题。对于遇到类似问题的用户,可以采取以下临时解决方案:

  1. 改用OpenAL音频后端
  2. 避免将"Input cycle"轴输入设置为0
  3. 调整音频缓冲区大小设置
  4. 等待官方发布包含修复的稳定版本

技术背景

XAudio2是微软开发的低级音频API,BizHawk使用它来实现高性能音频输出。XAUDIO2_E_INVALID_CALL错误通常表示API被以不正确的方式调用,如传递了无效参数或在错误状态下调用方法。

音频节流功能与模拟器同步机制密切相关,当与特定输入配置结合时,可能导致音频子系统接收到不预期的调用序列,从而触发底层API的错误条件。

登录后查看全文
热门项目推荐
相关项目推荐