📖 本文由 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 自带的文件管理器。
-
第四步:精准定位并替换
- 按下
[Ctrl]+[F]搜索关键词audio.device=,你会看到当前那个(没响的)设备参数。 - 修改第二个数字。例如,如果原来是
audio.device=0,3,根据我们刚才数出来的例子,就把它改成audio.device=0,4。
【提示】:逗号后面的文本标签并不重要,那只是在系统界面上显示的文字说明,关键是前面的数字。
- 按下
-
第五步:重启并盲测
重启系统看是否有声音。如果还是不行,可以尝试改变第一个数字,依次尝试audio.device=1,3、audio.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),虽然水流平稳了,但主水管就彻底没水用了。
进阶排查:如果驱动设置无法保存
如果你发现音频驱动总是自动跳回 alsathreaded 或 alsa,无法锁定在 tinyalsa 上,请尝试以下“清理”动作:
- 第一步:使用配置文件强制设定
改用前面提到的Batocera.conf修改法,这通常拥有最高优先级。 - 第二步:禁用所有“覆盖”设置
检查并关闭你可能开启的任何配置覆盖(Configuration Overrides)、核心覆盖(Core Overrides)或文件夹覆盖(Folder Overrides)。 - 第三步:清理覆盖层
删除或禁用当前正在使用的任何覆盖层(Overlays)。
【注意】:这种切换驱动的方法主要适用于 Libretro 核心(Libretro cores),好在树莓派上运行的大多数系统都属于这一类。对于其他独立模拟器,它们可能不支持 tinyalsa 驱动,或者需要更深层的底层知识才能修改配置。
疑难杂症:声音持续性断续(与系统运行无关)
如果你发现无论画面是否复杂、系统是否忙碌,声音都一直断断续续,那这很可能不是软件设置的问题,而是硬件故障(Hardware fault)。
生活化类比:如果不管水龙头开大还是开小,水流总是时有时无,那可能不是水压(软件缓冲)的问题,而是水管本身漏水或者堵塞了。
- 建议操作:
- 重新插拔音频线。
- 换一根质量更好的线材试试。
- 切换不同的接口进行对比(比如改用 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



暂无评论内容