📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。


音频问题排查指南

在旧版本中,音频配置往往是折腾模拟器系统时最让人头疼的一环。好消息是,从 v32 版本开始,Batocera 引入了全新的音视频服务层(Pipewire)来管理音频架构,这解决了绝大多数“哑巴”问题。本指南主要针对仍在使用旧版本的用户,或是那些即使升级后依然顽固存在的音频难题。


救命,我的设备没声音!

在开始复杂的调试之前,我们先进行两项针对显卡用户的“基础体检”:
* 如果你使用 Radeon 显卡(AMD):请首先检查是否已在引导命令行中启用了 HDMI 音频选项。
* 如果你使用 Nvidia 显卡:请确保已激活系统自带的官方驱动程序。

生活化类比:这就像是在检查音响是否有声之前,先看看功放的电源插头(驱动/引导设置)到底插没插好。


寻找正确的“音频频道”

如果硬件连接没问题,请按照以下步骤在系统内进行手动匹配:

  • 第一步:尝试不同的配置文件
    进入 主菜单(MAIN MENU) -> 系统设置(SYSTEM SETTINGS) -> 音频配置文件(AUDIO PROFILE)
    每切换一个选项,请尝试退出到主菜单查看。由于系统默认开启了背景音乐,只要设置正确,你会立刻听到声音。

  • 第二步:手动指定输出设备
    如果切换配置文件无效,请尝试手动设定 音频输出(AUDIO OUTPUT) 设备。
    【注意】:输出设备列表会随着你选择的“音频配置文件”不同而变化。因此,每更换一次配置文件,你都需要退出并重新进入主菜单,以刷新设备列表。


硬件输出模式的“地毯式搜索”

为了彻底测试你硬件支持的所有音频模式,你可能需要进行一次严格的排列组合测试。虽然这听起来有些繁琐且需要不断尝试,但好消息是:这种“一劳永逸”的工作你只需要做这一次。

音频输出深度调试步骤

如果你发现系统依然“沉默不语”,可以尝试下面这套排查流程。这虽然需要一点耐心,但能确保覆盖到每一个可能的硬件通道。

  • 第一步:锁定一个配置文件
    进入 主菜单(MAIN MENU) -> 系统设置(SYSTEM SETTINGS) -> 音频配置文件(AUDIO PROFILE),先选择列表中的第一个配置文件,然后退回到主菜单。
  • 第二步:遍历测试输出设备
    再次进入 系统设置 -> 音频输出(AUDIO OUTPUT),逐一尝试该列表下所有的输出选项。
    【注意】:每更换一个选项,都必须退回到主菜单听一下是否有背景音乐。
  • 第三步:循环尝试
    如果当前配置文件下的所有输出设备都没有声音,请回到第一步,选择下一个“音频配置文件”,然后重复第二步。

生活化类比:这就像是在找家里的电灯开关。你得先确定哪一排是客厅的空开(配置文件),然后逐个按那一排下的按钮(输出设备)。如果客厅的都不亮,就去试下一排厨房的空开。


进阶技巧:手动指定“通用名称”

如果你发现菜单里根本没有出现你想要的选项,我们可以直接在后台配置文件里给系统“下死命令”。

  • 第一步:打开配置文件
    通过网络找到并打开 system/batocera.conf 文件。
  • 第二步:修改音频键值
    找到 audio.device 这一行(如果没有就自己新建一行),将其修改为你的设备通用名称。例如,如果你想尝试强制走 HDMI 输出,可以设置为:
audio.device=hdmi

【提示】关于新版本的便利性

v32 及更高版本中,你不再需要像以前那样专门进入 Kodi 媒体中心去实时测试音频输出了。

现在,你只需在 EmulationStation(即 Batocera 的游戏主界面)的 主菜单 -> 系统设置 中调整音频选项并退出即可即时生效,无需重启系统

对于还在使用 v31 及更低版本的老用户来说,音频设置的操作感可能略显笨重。在这些旧版本中,你只能选择音频输出(AUDIO OUTPUT),且每次更改都必须重启系统才能生效。

为了避免频繁重启,我们可以利用内置的媒体中心 Kodi 作为一个“实时测试场”:

使用 Kodi 快速测试音频(适用于 v31 及以下版本)

  • 第一步:启动 Kodi 实验室
    主菜单(Main Menu)启动 Kodi,点击左上角的小齿轮图标进入设置(Settings)
  • 第二步:定位音频选项
    依次进入 系统(System) -> 音频(Audio) -> 音频输出设备(Audio output device)
  • 第三步:实时盲测
    逐个切换列表中的音频输出设备。在切换的同时,尝试用手柄或键盘在 Kodi 菜单中上下移动。
    【提示】:当你听到清脆的“咔哒”导航声时,恭喜你,你找对设备了!
  • 第四步:同步设置到系统
    记住这个有效设备的名称(例如 HDMI#0),退出 Kodi 返回 Batocera 的主菜单 -> 系统设置(System Settings) -> 音频,选择那个名称相同(或最接近)的设备。
  • 第五步:最后重启
    重启系统,此时你的游戏世界应该不再寂静。

进阶诊断:使用调音台

如果你发现设备已经选对,但还是没声音,那可能是音量被“静音”了:

  • 操作步骤
  • 在键盘上同时按下 [Ctrl]+[Alt]+[F4] 进入命令行界面,调出 Alsamixer 调音台(这是一个纯文字模式的音量控制面板)。
  • 仔细检查所有的输出通道,确保它们不仅处于开启(Enabled)状态,且音量进度条已经拉满。
  • 调整完毕后,按下 [Ctrl]+[Alt]+[F2] 即可返回熟悉的 Batocera 界面。

生活化类比:如果说之前的设置是在墙上找插座,那么 Alsamixer 就像是检查插线板上的独立开关。即便插头插对了,如果开关被关掉(静音)或者旋钮拧到了最小,音箱里照样没声音。

如果依然没有声音,该怎么办?

如果你已经尝试了所有常规设置,音箱依然“守口如瓶”,且你使用的是 Batocera v36 或更高版本,那么可以尝试激活更先进的 SOF 数字信号处理(SOF DSP) 机制:

  • 第一步:建立连接
    发起一个 SCP 远程文件传输(Secure Copy Protocol) 会话,或者在游戏列表界面按下 [F1] 键进入 Batocera 自带的文件管理器。
  • 第二步:定位配置文件
    前往 /etc/modprobe.d 目录。
    【提示】:/etc 位于系统的根目录(Root directory)下,你可能需要从平常熟悉的 userdata 文件夹往上跳一级才能找到它。
  • 第三步:修改驱动参数
    使用支持 Unix 格式的文本编辑器(【注意】:千万不要用 Windows 自带的记事本!)打开 intel-dsp.conf 文件。将下面这行代码:
    options snd-intel-dspcfg dsp_driver=1
    修改为:
    options snd-intel-dspcfg dsp_driver=3
    修改完成后保存文件。
  • 第四步:保存系统镜像层
    打开终端(Terminal),输入并运行以下命令,确保你的改动在重启后不会丢失:
    bash
    batocera-save-overlay
  • 第五步:重新启动
    重启系统,查看声音是否恢复。

生活化类比:这就像是换了一套更聪明的“音响驱动管家”。原本的老管家(driver=1)可能不认识你的新音响,换上这个更全能的新管家(driver=3)通常就能解决那些顽固的兼容性问题。

想深入了解的硬核玩家可以查阅 SOF 的官方文档。


疑难杂症:Kodi 有声,但主菜单和模拟器没声

即便按照前面的步骤选好了设备并重启,这种情况偶尔还是会发生。

【提示】:本条建议不再适用于 v32 及以上版本,因为新版 EmulationStation 已经能够完美识别所有的音频设备和配置文件了。

如果你还在使用旧版本,这可能是因为 Kodi 对音频设备排序的理解与 EmulationStation(系统主界面) 不一致。请按以下步骤操作:

  • 操作步骤
    回到 Kodi 中,再次打开音频输出设备(Audio output device)列表。

接下来的操作稍微有点像“数格子”,我们需要手动对齐 Kodi 和系统主界面之间的设备索引差。

进阶对齐:手动修正音频设备索引

  • 第一步:给设备“排座次”
    在 Kodi 的音频输出设备(Audio output device)列表中,从上往下数。
    【注意】:计算机计数是从 0 开始的。第一个设备是 #0,第二个是 #1,以此类推。
  • 第二步:记住你的编号
    记下那个有声音的设备是第几个(假设在这个例子中,有声音的是第 5 个设备,那么它的编号就是 #4)。

  • 第三步:修改核心配置文件
    通过网络共享或在主界面按 [F1] 进入内置文件管理器,找到并打开 system/batocera.conf

    【注意】:绝对不要用 Windows 自带的记事本! 它会破坏文件格式。请使用支持 Unix 格式的编辑器(如 Notepad++),如果不确定,直接用 Batocera 自带的文件管理器。

  • 第四步:精准定位并替换

    1. 按下 [Ctrl]+[F] 搜索关键词 audio.device=,你会看到当前那个(没响的)设备参数。
    2. 修改第二个数字。例如,如果原来是 audio.device=0,3,根据我们刚才数出来的例子,就把它改成 audio.device=0,4
      【提示】:逗号后面的文本标签并不重要,那只是在系统界面上显示的文字说明,关键是前面的数字。
  • 第五步:重启并盲测
    重启系统看是否有声音。如果还是不行,可以尝试改变第一个数字,依次尝试 audio.device=1,3audio.device=2,3 等组合。

生活化类比:这就像是去电影院领耳机,Kodi 告诉你“5 号柜台”有货,但主界面系统可能把柜台排号弄乱了。我们现在的操作就是强行告诉系统:“别管你之前的登记了,直接去 5 号柜台(编号 4)拿货!”


扬声器没有全部响起来?

如果你发现声音只从一部分喇叭里出来,并没有达到预期的环绕效果:

请务必检查 主菜单(MAIN MENU) -> 系统设置(SYSTEM SETTINGS) -> 音频配置文件(AUDIO PROFILE)

在这里确保你选择的配置文件与你的音响布局(如 2.0 立体声、5.1 环绕声等)相匹配。

例如,如果你使用的是 5.1 环绕声设备,就应该选择名为 “SURROUND 5.1” 的配置文件:

[Image: 演示音频配置文件选择的示意图]


疑难杂症:主菜单和游戏都有声音,唯独视频预览没声

【提示】:本条说明不再适用于 v32 及以上版本。由于新版系统改用了 Pipewire 架构,不再读取旧式的 .asoundrc 配置文件(而且新版通常不会出现这种特定问题)。v32 及更高版本甚至会自动删除 /userdata/system/.asoundrc 这个文件。

如果你在使用旧版本时,发现系统界面和游戏里声音都正常,唯独在浏览游戏列表的视频缩略图时一片死寂,可以尝试以下对策:

  • 第一步:基础开关检查
    先确认设置开关是否打开:进入 音频设置(Sound Settings) -> 确保 开启视频音频(Enable Video Audio) 已处于勾选状态。

  • 第二步:通过远程指令修复
    如果开关开了还是没声音,可以尝试通过 SSH 远程连接(Secure Shell) 登录到 Batocera,并输入以下命令:

wget -O /userdata/system/.asoundrc https://www.Batocera.org/users/lbrpdx/asoundrc

生活化类比:这就像是给系统手动补发了一张“音频路线图”。这个命令会自动下载并创建一个名为 .asoundrc 的配置文件,告诉系统在播放预览视频时该把声音往哪儿送。

这个方法通常能解决像 Odroid Go Advance 这种单板计算机(SBC)的视频声音问题。

【注意】:如果你使用的是 PC 平台,情况可能会复杂得多。受限于不同的显卡硬件配置和音频芯片组,这个补丁在 PC 上未必能百分之百奏效。

对于 PC 用户来说,如果自动脚本没起作用,我们还可以通过“手动对齐地址”的方法来修复视频预览的声音。

进阶修复:手动配置音频设备地址

  • 第一步:获取设备清单
    通过 SSH 远程连接(Secure Shell) 登录系统,输入以下命令来查看你机器上所有的音频输出口:
    bash
    aplay -l
  • 第二步:识别目标编号
    运行命令后,你会看到类似下面的一串列表:
    text
    **** List of PLAYBACK Hardware Devices ****
    card 0: PCH [HDA Intel PCH], device 0: ALC255 Analog [ALC255 Analog]
    ...
    card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
    ...

    假设你想通过 HDMI 0 输出声音,通过列表可以看到它对应的是 卡 0(card 0)设备 3(device 3)

  • 第三步:精准修改配置文件
    打开 /userdata/system/.asoundrc 文件。将其中的 pcm "hw:0,0" 修改为对应的 pcm "hw:0,3"(这里的数字请根据你上一步查到的结果来填)。

  • 第四步:保存并验证
    保存文件并重启系统。

生活化类比:这就像是给快递员(音频信号)修正投递地址。系统默认把视频声音寄到了“0号楼0单元”,但你的音箱其实住在“0号楼3单元”。我们手动改下门牌号,声音就能准确送达了。

【提示】:虽然这个方法不能保证 100% 解决所有 PC 硬件的疑难杂症,但在很多情况下都非常值得一试。

万一失败了:如何恢复原状

如果调整后效果不理想,或者你想彻底推倒重来,只需删除掉那个“捣乱”的文件即可:
* 操作方法:直接删除 /userdata/system/.asoundrc 文件(如果你是通过网络共享操作,对应的路径是 \system.asoundrc)。


疑难杂症:开机视频(Splash video)没有声音

如果你发现系统进入后的声音都正常,唯独在开机动画阶段是“静音模式”,请参考以下方案:

  • 基础体检:检查开关
    首先,请确保在 batocera.conf 配置文件中,splash.screen.sound 这一项的值被设置为 1(开启状态)。

【提示】:以下深度调试步骤不适用于 v32 及更高版本。因为新版系统改用了 Pipewire 架构,彻底告别了旧版的 Alsa 配置方式,理论上已经从根源上解决了这个兼容性问题。

如果开关已开但仍没声音,你可能需要手动修改开机脚本,为播放器指定正确的“发声通道”:

  • 第一步:寻找声音设备“身份证号”
    通过 SSH 远程连接(Secure Shell) 登录系统,运行以下命令获取设备列表:
    mpv --audio-device=help
  • 第二步:锁定目标设备
    在显示出的列表中找到你需要的设备名称。例如:alsa/hdmi:CARD=HDMI,DEV=2
  • 第三步:修改开机引导脚本
    使用编辑器打开系统脚本文件 /etc/init.d/S03splash
  • 第四步:注入音频指令
    找到包含以下代码的这一行:
    /usr/bin/mpv --really-quiet -fs --no-config --vo=drm $mpv_audio $mpv_video "$video" &
    在其中加入 --audio-device=DEVICE(将 DEVICE 替换为你刚才找到的名称)。

生活化类比:这就像是在开机仪式开始前,专门给放映员(mpv 播放器)递了个条子,告诉他:“嘿,别乱猜了,待会放片子的时候,声音直接从这台 HDMI 音箱里传出去!”

以我们的例子来说,修改后的代码行看起来是这样的:
/usr/bin/mpv --audio-device=alsa/hdmi:CARD=HDMI,DEV=2 --really-quiet -fs --no-config --vo=drm $mpv_audio $mpv_video "$video" &

  • 第五步:保存修改结果
    在终端中输入并运行以下命令,确保你的改动在关机后不会消失:
    bash
    batocera-save-overlay
  • 第六步:重启系统
    重启后,你应该就能在开机视频中听到声音了。

【注意】:当你未来升级 Batocera 系统时,这些对系统脚本的修改将会被覆盖重置,届时可能需要重新执行上述操作。


疑难杂症:声音断断续续,画面一变就卡音

如果你发现声音像“断了线的风筝”一样随机卡顿,尤其是在屏幕画面剧烈变化的时候,这通常是因为你的音频缓冲区(Audio buffer)设置得不够高。

生活化类比:缓冲区就像是水箱。如果水箱太小(缓存不足),而下游用水量(画面处理需求)突然变大,水流(声音)就会断断续续。把水箱加大,就能保证供水更稳。

你可以通过以下两种方式来调整:

方案 A:针对特定游戏机平台(分平台设置)

  • 第一步:进入 主菜单(MAIN MENU) -> 游戏设置(GAMES SETTINGS)
  • 第二步:选择 每个系统的逐项高级设置(PER SYSTEM ADVANCED CONFIGURATION)
  • 第三步:找到那个声音卡顿的系统,进入 音频延迟(AUDIO LATENCY) 进行调整。

方案 B:针对所有平台(全局设置)

打开你的 batocera.conf 配置文件,手动添加或修改下面这行代码:

global.audio_latency=128

这里的数值单位是毫秒。如果声音还是卡顿,可以尝试调大这个数字,直到声音变得顺滑为止。

【注意】:上述设置主要影响 libretro 核心(libretro cores)。如果你发现某些独立模拟器的声音依然跳帧,说明该设置对它们无效。此时,你需要去查看该模拟器特定的故障排除文档,找到调整其专属音频缓冲的方法。

疑难杂症:树莓派耳机孔有杂音或断音,但 HDMI 输出正常

这是一个非常具体的问题:在树莓派(RPi)上,使用默认驱动和延迟设置时,耳机孔输出似乎会随机出现音频缓冲区溢出(Audio buffer overflow)。这会导致声音听起来断断续续,甚至产生严重的失真。

要解决这个问题,你有两个选择:
* 方法一:按照前文所述增加音频延迟(Audio latency)。有些树莓派设置为 96ms 就能变流畅,有些则需要调高到 256ms(但这会导致音效明显滞后于画面)。
* 方法二:将音频驱动切换为 tinyalsa(【注意】:这样做会导致 HDMI 音频输出失效)。


方案 A:通过配置文件修改(全局生效)

如果你希望一劳永逸,可以直接修改配置文件:

  • 操作步骤
    system/Batocera.conf 文件中新增一行以下代码:
    ini
    global.RetroArch.audio_driver=tinyalsa

方案 B:通过 RetroArch 快捷菜单修改(针对 Libretro 核心)

如果你只想针对 Libretro 核心(Libretro cores) 修改默认音频驱动,请按照以下步骤操作:

  • 第一步:启动游戏
    运行任意一个使用 Libretro 核心的游戏。
  • 第二步:召唤快捷菜单
    按下 [HOTKEY] + 南键(SNES 布局的 B 键) 打开 RetroArch 快捷菜单(Quick Menu)
  • 第三步:返回主设置界面
    连续按两次 东键(SNES 布局的 A 键) 退回到 RetroArch 的主菜单。
  • 第四步:切换驱动程序
    依次进入 设置(Settings) -> 音频(Audio) -> 输出(Output) -> 音频驱动(Audio driver to use.),将其切换为 tinyalsa
  • 第五步:保存并退出
    设置修改后会自动保存。现在你可以直接退出模拟器,设置已经生效了。

生活化类比:这就像是你家里的主水管(HDMI)和阳台小水龙头(耳机孔)共用一个水箱。默认的“大流量驱动”对小水龙头来说压力太大,经常喷溅(爆音/断音)。方案 B 相当于给小水龙头换了一个专门的“微量调节阀”(tinyalsa),虽然水流平稳了,但主水管就彻底没水用了。

进阶排查:如果驱动设置无法保存

如果你发现音频驱动总是自动跳回 alsathreadedalsa,无法锁定在 tinyalsa 上,请尝试以下“清理”动作:

  • 第一步:使用配置文件强制设定
    改用前面提到的 Batocera.conf 修改法,这通常拥有最高优先级。
  • 第二步:禁用所有“覆盖”设置
    检查并关闭你可能开启的任何配置覆盖(Configuration Overrides)核心覆盖(Core Overrides)文件夹覆盖(Folder Overrides)
  • 第三步:清理覆盖层
    删除或禁用当前正在使用的任何覆盖层(Overlays)

【注意】:这种切换驱动的方法主要适用于 Libretro 核心(Libretro cores),好在树莓派上运行的大多数系统都属于这一类。对于其他独立模拟器,它们可能不支持 tinyalsa 驱动,或者需要更深层的底层知识才能修改配置。


疑难杂症:声音持续性断续(与系统运行无关)

如果你发现无论画面是否复杂、系统是否忙碌,声音都一直断断续续,那这很可能不是软件设置的问题,而是硬件故障(Hardware fault)

生活化类比:如果不管水龙头开大还是开小,水流总是时有时无,那可能不是水压(软件缓冲)的问题,而是水管本身漏水或者堵塞了。

  • 建议操作
    1. 重新插拔音频线。
    2. 换一根质量更好的线材试试。
    3. 切换不同的接口进行对比(比如改用 3.5mm 模拟音频口替代 HDMI 输出)。

如何诊断音频断续问题?

在动手修改前,明确病因至关重要。

如何精准诊断音频卡顿?

如果你想科学地确认声音为什么会卡顿,可以借助系统内置的“检测仪”:

  • 第一步:启动检测工具
    在运行游戏的同时,通过 SSH 远程连接(Secure Shell) 登录到 Batocera,输入并运行以下命令:
    pw-top
  • 第二步:观察关键指标
    在屏幕显示的列表中,你会看到 alsa_output(输出端)和模拟器(通常是 RetroArch)对应的两行数据。请盯紧 错误列(ERR column)
  • 第三步:判断结果
    如果这两个数值都在不停增加,说明出现了音频欠载(Underrun audio frames)

生活化类比:这就像是快递分拣中心。如果 ERR 这里的数字一直在跳,说明传送带(音频流)供货速度跟不上分拣员的速度,导致流水线出现了空档(声音卡顿)。

解决方案:
1. 增加音频延迟(调大水箱)。
2. 选择更优化的音频后端驱动。
3. 降低系统整体的 CPU 占用率。


树莓派疑难杂症:列表中找不到音频设备

如果在音频输出列表里压根看不见你的设备,可以尝试切换到“伪内核模式”作为权宜之计。

  • 第一步:打开启动配置文件
    找到并编辑 /boot/config.txt 文件。
  • 第二步:修改显卡驱动层设置
    找到 dtoverlay=vc4-kms-v3d 这一行,在前面加个 # 号把它注释掉(禁用);然后找到 dtoverlay=vc4-fkms-v3d,去掉它前面的 # 号(启用)。

修改后的代码块应该长这样:

# 启用基于 dispmanx 显示栈的 DRM VC4 V3D 驱动
# 这是首选的“完整”内核模式设置 (Full KMS)
#dtoverlay=vc4-kms-v3d

# 针对无法兼容“完整”模式的显示器,选择“伪”内核模式 (Fake KMS)
dtoverlay=vc4-fkms-v3d

【提示】:使用伪内核模式(Fake KMS)可能会导致系统性能下降。虽然这是一个有效的绕行方案,但长远来看,找出设备无法识别的根本原因才是上策。

HP EliteDesk 800 G4 mini 找不到音频设备

如果你使用的是这台迷你小主机,却发现音频输出列表中空空如也,这通常不是系统设置的问题,而是底层固件的“锅”。

  • 解决办法:请将你的 BIOS 基础输入输出系统(Basic Input/Output System) 降级还原到 v2.14.01 版本。
    【注意】:后续的更新版本存在特定的漏洞(Bugs),会导致 Linux 系统下的 HDMI 音频无法正常工作。

如何自动化我的音频设置?

如果你不想每次都手动调整,希望系统能根据特定场景自动切换音频,可以利用 Batocera 强大的脚本功能来实现。

生活化类比:这就像是给家里的音响装了一个“智能感应开关”。你可以设定好规则,让系统在特定的时刻自动执行你预设的一系列音频操作,而不需要你每次都去菜单里翻找。

具体的音频自动化脚本示例,请向下滚动页面查看相关章节。


原文: 音频问题排查与解决 • 翻译: DIY8 Bot

© 版权声明
评论 抢沙发

请登录后发表评论

    暂无评论内容