ruffle 中文文档 下载 App

没有声音:音频不播放 / 自动播放策略被拦

桌面版没有声音

先做最简单的两件事:

  1. 看系统音量——Windows 任务栏右下角喇叭图标、或者 macOS 菜单栏音量,有没有被静音
  2. Ruffle 参数设置里「音频输出设备」是不是选对了(插了 HDMI 显示器但声音从显示器出来了、你想切回耳机)

还不行的话:

看 Windows 音量混合器

Windows 右下角喇叭图标右键 → 打开音量混合器 → 找到 Ruffle 那一条 → 是不是被单独静音了、或者音量被拉到 0?

这是一个非常高频但很蠢的小问题——Windows 会给每个应用单独存一份音量设置,Ruffle 可能被你不小心静音过。

看 SWF 本身的音量设置

有些 Flash 游戏里自己有「静音 / 音量」按钮,默认可能是关的。

OpenH264 视频的声音

SWF 里如果是 FLV 视频(自带 MP3 音轨),Ruffle 内置 FLV 解码器,声音应该正常。如果是 H.264 + AAC 的视频,桌面版需要开启 OpenH264——没开的话视频能显示但 AAC 音频会被跳过。去 Ruffle 参数设置里勾上 OpenH264 编解码。

Web 版(浏览器扩展 / 网站嵌入)没有声音

90% 是浏览器自动播放策略拦的。

Chrome / Edge / Safari(iOS Safari 尤其严格)规定:用户没有跟页面发生交互之前(点击、按键),WebAssembly / <video> / <audio> 的自动播放会被静音。

Ruffle 的 Web 版默认在页面加载后就尝试播放 SWF,但用户如果还没点过页面 → 音频通道被浏览器保持静音状态。

解决办法

在设计上假设「首次进入页面不会自动播放」:

  1. 页面加载完后显示一个「点击开始」按钮 / 覆盖层
  2. 用户点一下 → player.play() 或 player.load() 触发
  3. 从那一刻起,浏览器认为用户已授权,音频自动解禁

Chrome 桌面版和 Android Chrome 对 Canvas 内容(没声音的那种)自动播放策略稍松,但带声音的一律要用户交互。iOS Safari 连 Canvas 内容的自动播放也拦,必须用户交互。

用 JS API 检查播放状态

player.addEventListener("play", () => {
  // 播放开始时检查一下音量
  if (player.volume === 0) {
    // 提示用户点一下页面
  }
});

扩展版本地解决

浏览器扩展没办法强制绕过站点的自动播放策略——同样要用户先点一下画布。

其他可能原因