Open Sound System

来自 ArchWiki
(重定向自 OSS

Open Sound System (OSS) 是类 Unix 和 POSIX 兼容系统的替代声音架构。OSS 3 版本是 Linux 的原始声音系统,但在 2002 年 OSS 4 版本成为专有软件后,被高级 Linux 声音架构 (ALSA) 取代。OSSv4 在 2007 年再次成为自由软件,当时 4Front Technologies 发布了其源代码,并根据 GPL 许可证提供。

与 ALSA 的比较

与使用高级 Linux 声音架构相比的一些优点和缺点。

OSS 对用户的优势

  • 原生的每个应用程序音量控制,无需在其之上运行声音服务器。
  • 一些旧式(即 2002 年之前)声卡可能具有更好的支持。

OSS 对开发者的优势

  • 支持用户空间的驱动程序。
  • 跨平台(OSS 可以在 BSD 和 Solaris 上运行)。
  • 更小且更易于使用的 API。

ALSA 相对于 OSS 的优势

  • 更好地支持 USB 音频设备。
  • 支持蓝牙音频设备。
  • 支持 AC'97HD 音频 拨号软调制解调器,例如 Si3055。
  • 更好地支持 MIDI 设备。
  • 支持挂起。
  • 更好地支持插孔检测。
  • 更好地支持现代硬件。
注意
  • OSS 对 USB 音频设备具有实验性输出支持,但没有输入支持。
  • OSS 在 TimidityFluidSynth 等软件合成器的帮助下支持 MIDI 设备。

安装

安装 ossAUR 软件包或包含非自由驱动程序的软件包 oss-nonfreeAUR。还有一个 OSS 的开发版本,可通过 oss-gitAUR 软件包获得。

这将安装 OSS,运行 OSS 安装脚本(临时禁用 ALSA 模块)并安装 OSS 内核模块。由于默认情况下启用 ALSA,因此您需要禁用它,以使其不与 OSS 冲突。您可以通过黑名单 soundcore 模块来执行此操作。

将模块列入黑名单后,您可以启用 oss.service 以在启动时启动。

要在无需重启的情况下开始使用 OSS,请检查是否仍加载了任何 ALSA 模块(ALSA 模块以 "snd" 开头)

# lsmod | grep snd

按如下方式删除 ALSA 模块

# lsmod | awk ' { print $1 } ' | grep snd | xargs rmmod

然后重启 OSS

# soundoff && soundon

要从系统中完全删除 ALSA,您可以编译自定义内核并在其配置中禁用 ALSA。有关详细信息,请参阅 Gentoo:ALSA#Kernel

注意: 卸载 PulseAudio 和 ALSA 时,需要删除多个软件包。在已安装的软件包中搜索 "pulse" 和 "alsa"。

本文或本章节已过时。

原因: 这应该与 ALSA 的情况相同,即默认情况下不推荐。请参阅 Advanced_Linux_Sound_Architecture#User_privileges。(在 Talk:Open Sound System 中讨论)

如果您不是 audio 组的成员,请添加您自己并重新登录以使更改生效

# gpasswd -a $USER audio

如果 OSS 在启动时无法检测到您的声卡,请运行

# ossdetect -v
# soundoff && soundon

测试

警告: 默认音量非常大,运行测试前请避免使用耳机并物理降低扬声器的音量(如果可能)。

通过运行以下命令测试 OSS

$ osstest

您应该能够在测试过程中听到音乐。如果没有声音,请尝试调整音量或参阅#故障排除章节。

如果您想同时听到来自多个应用程序的声音,则需要 vmix,OSS 的软件混音器。

通过运行以下命令检查 vmix 是否已启用

$ ossmix -a | grep -i vmix

您应该看到类似 vmix0-enable ON|OFF (currently ON) 的行。如果您没有看到任何以 vmix 开头的行,则可能意味着 vmix 尚未连接到您的声音设备。要连接 vmix,请发出以下命令

$ vmixctl attach device

其中 device 是您的声音设备,例如 /dev/oss/oss_envy240/pcm0

为了避免将来必须手动发出此命令,您可以将其添加到 /usr/lib/oss/soundon.user,正如官方文档建议的那样。

如果您收到 "Device or resource busy" 错误,则需要在 /usr/lib/oss/conf/osscore.conf 中添加 vmix_no_autoattach=1,然后重新启动。

通过运行以下命令查看检测到的设备

$ ossinfo

您应该能够在设备对象音频设备下看到列出的设备。如果您要使用的设备不在这些部分的顶部,则必须编辑 /usr/lib/oss/etc/installed_drivers 并将设备的驱动程序放在最顶部。可能需要重启 OSS

# soundoff && soundon

如果这不起作用,请注释掉列出的所有驱动程序,但设备驱动程序除外。

音量控制混音器

要控制各种设备的音量,需要设置混音器级别。有两个混音器

ossmix
一个命令行混音器,类似于 BSD 音频混音器 mixerctl
ossxmix
一个基于 GTK 的图形混音器。

颜色定义

对于高清 (HD) 音频,ossxmix 将根据其预定义的插孔颜色为插孔配置着色

颜色 类型 连接器
绿色 前置声道(立体声输出) 3.5mm TRS
黑色 后置声道(立体声输出) 3.5mm TRS
灰色 侧置声道(立体声输出) 3.5mm TRS
金色 中央和低音炮(双输出) 3.5mm TRS
蓝色 线路电平(立体声输入) 3.5mm TRS
粉色 麦克风(单声道输入) 3.5mm TS

保存混音器级别

当您关闭计算机时,混音器级别将被保存。如果您想立即保存混音器级别,请以 root 身份执行

# savemixer

savemixer 可用于使用 -f 开关将混音器级别写入文件,并使用 -L 开关进行恢复。

其他混音器

其他支持 OSS 的混音器

  • Gnome Volume Control — 用于 GNOME
https://help.gnome.org/users/gnome-volume-control/stable/ || gnome
  • Kmix — 用于 KDE
https://www.kde.org/applications/multimedia/kmix/ || kmix

为 OSS 配置应用程序

基于 GStreamer 的应用程序

如果您在使用 GStreamer 进行音频处理的应用程序时遇到问题,您可以尝试删除 pulseaudio 并安装 gst-plugins-good 软件包,oss4sinkoss4src 需要此软件包。

基于 OpenAL 的应用程序

默认情况下,OpenAL 使用 ALSA。要更改此设置,只需在 /etc/openal/alsound.conf 中定义 OSS 的用法

/etc/openal/alsound.conf
drivers=oss

Audacity

如果 Audacity 启动,但它抱怨无法打开设备或根本不播放任何内容,那么您可能正在使用 vmix,这会阻止 Audacity 独占访问您的声音设备。要解决此问题,请在运行 Audacity 之前运行

$ ossmix vmix0-enable OFF

您可以在关闭 Audacity 后使用以下命令恢复 vmix

$ ossmix vmix0-enable ON

Gajim

默认情况下,Gajim 使用 aplay -q 播放声音。对于 OSS,您可以通过转到编辑 > 首选项 > 高级,打开高级配置编辑器并相应地修改 soundplayer 变量,将其更改为等效的 ossplay -qq

MOC

要将 MOC 与 OSS v4.1 一起使用,您必须在配置文件(位于 ~/.moc 中)中将 OSSMixerDevice 更改为 /dev/ossmix。对于界面问题,请尝试通过在 mocp 中按 w(更改为软件混音器)来更改 OSSMixerChannel

MPD

MPD 通过 /etc/mpd.conf~/.mpdconf 进行配置。检查这两个文件,查找如下内容

/etc/mpd.conf
...
audio_output {
    type    "alsa"
    name    "Some Device Name"
}
...

如果您找到如上所示的未注释(行不以 #'s 开头)的 ALSA 配置,请注释掉所有配置或删除它,并添加以下内容

/etc/mpd.conf
...
audio_output {
    type    "oss"
    name    "My OSS Device"
}
...

对于所有用户来说,可能不需要进一步配置。但是,如果您遇到问题(即 MPD 在重启后无法正常工作),或者如果您喜欢具有特定(即更多用户配置,更少自动配置)的配置文件,则可以通过查找声卡标识符来更具体地配置 OSS 的音频输出

$ ossinfo | grep /dev/dsp

查找类似 /dev/dsp -> /dev/oss/CARD_IDENTIFIER/pcm0 的行。记下您的 CARD_IDENTIFIER 是什么,并将这些行添加到 MPD 配置文件中的 OSS audio_output

/etc/mpd.conf
...
audio_output {
    type            "oss"
    name            "My OSS Device"
    device          "/dev/oss/<SOME_CARD_IDENTIFIER>/pcm0"
    mixer_device    "/dev/oss/<SOME_CARD_IDENTIFIER>/mix0"
}
...

另请参阅:音乐播放器守护进程#系统级配置

MPlayer

如果您正在使用 GUI(SMplayer、GNOME MPlayer 等),您可以在设置对话框中选择 OSS 作为默认输出。如果您从命令行使用 MPlayer,则应指定声音输出

$ mplayer -ao oss /some/file/to/play.mkv

如果您不想一遍又一遍地输入它,请将 ao=oss 添加到您的配置文件(位于 ~/.mplayer/config)。

另请参阅:MPlayer#配置

VLC 媒体播放器

您可以在音频设置中选择 OSS 作为默认输出。

Wine

要在 Wine 中设置 OSS 支持,请启动

$ winecfg

并转到 音频 选项卡,然后选择 OSS 驱动程序

另请参阅:Wine#声音

其他应用程序

另请参阅:ossapps

技巧与提示

更方便和精确的音量控制

此文章或章节可能与 #键盘音量控制 合并。

注意: 此部分在没有增加太多价值的情况下部分替换了现有部分,它们可能可以作为同一部分中的等效选项呈现,而不是两个不同的选项。(在 Talk:Open Sound System 中讨论)

ossxmix 的音量杆非常小,使得难以精细地控制音量。

运行 ossmix 找到您想要控制的控件(参考 ossxmix),此示例为 codec1.jack.green.front

将以下命令绑定到桌面环境的键盘快捷键

音量增加 1(音量可以在 0 到 100 之间)

$ ossmix codec1.jack.green.front +1

音量减小 1(某些系统需要 --,以便 -1 不会被误认为是参数。)

$ ossmix -- codec1.jack.green.front -1

然后您可以轻松控制音量。

键盘音量控制

静音/取消静音和增加/减小音量的一个简单方法是使用 ossvol 脚本。

下载脚本并将其放置在 /usr/bin/ossvol

安装完成后,输入

$ ossvol -t

切换静音,或

$ ossvol -h

查看可用命令。

注意: 如果 ossvol 给出类似 Bad mixer control name(987) 'vol' 的错误,您需要编辑脚本并将 CHANNEL 变量更改为您的默认通道(通常为 vmix0-outvol)。

如果您想将多媒体键与 ossvol 一起使用,请将以下命令映射到您的音量键:XF86AudioRaiseVolumeXF86AudioLowerVolumeXF86AudioMute

静音/取消静音音量

$ ossvol -t

降低音量

$ ossvol -d 2

提高音量

$ ossvol -i 2

更改采样率

最初更改输出采样率并不明显。采样率只能由 root 用户更改,并且在请求更改时,vmix 必须未被任何程序使用。在您执行以下任何步骤之前,请确保您正在通过接收器/放大器并使用优质扬声器,而不仅仅是计算机扬声器。如果您仅使用计算机扬声器,请不要费心更改任何内容,因为您不会注意到差异。

默认情况下,采样率为 48000hz。在某些情况下,您可能想要更改此设置。这一切都取决于您的使用模式。您希望您使用的采样率与您最常使用的媒体相匹配。如果您的计算机必须更改媒体的采样率以适应硬件,则很可能(虽然不能保证)您会损失音频质量。这在降采样(即 96000hz → 48000hz)中最为明显。在 Stereophile 中有一篇关于此问题的文章,如果您想了解更多关于此问题的信息,可以在 Apple 的 CoreAudio API 邮件列表中进行讨论

本文或本章节已过时。

原因: Intel HD Audio 于 2004 年发布,现在大多数主板都提供它。(在 Talk:Open Sound System 中讨论)

一些示例采样率

44100hz
标准 红皮书 音频 CD 的采样率。
88000hz
SACD 高清音频光盘/下载的采样率。您的主板很少支持此采样率。
96000hz
大多数高清音频下载的采样率。如果您的主板是 AC'97 主板,这很可能是您的最高比特率。
192000hz
BluRay 和一些(极少数)高清下载的采样率。对外部音频接收器设备的支持仅限于高端音频。并非所有主板都支持此采样率。支持此采样率的主板芯片组示例包括 HD Audio

要检查您当前的采样率设置,请运行

$ ossmix | grep rate

您可能会看到 vmix0-rate <decimal value> (currently 48000) (Read-only)

本文或本章节已过时。

原因: 为 Envy24 预留的功能在 2003 年可能相关,但现在已经 20 年过去了……(在 Talk:Open Sound System 中讨论)

如果您没有看到输出 vmix0-rate(或 vmix1-rate 等),则可能意味着 vmix 已禁用。在这种情况下,OSS 将使用使用该设备的程序请求的速率,因此本节不适用。Envy24(和 Envy24HT)卡是例外,它们具有类似的 envy24.rate 特殊设置(请参阅 oss_envy24 手册页)。

要更改您的采样率

  1. 首先,确保您的声卡能够使用新的速率。运行 ossinfo -v2 并查看所需的速率是否在原生采样率输出中。
  2. 以 root 身份运行 /usr/lib/oss/scripts/killprocs.sh。请注意,这将关闭当前具有打开声音通道的任何程序。
  3. 在终止所有占用 vmix 的程序后,以 root 身份运行:vmixctl rate /dev/dsp 96000,将速率替换为您想要的采样率(如果适用,则为 ossmix envy24.rate 96000)。
  4. 运行 ossmix | grep rate 并检查是否有 vmix0-rate <decimal value> (currently 96000) (Read-only),以查看是否成功。
  5. 要使更改永久生效,请将以下内容添加到 soundon.user 文件
/usr/lib/oss/soundon.user
#!/bin/sh

vmixctl rate /dev/dsp 96000
# ossmix envy24.rate 96000 # uncomment if you have an Envy24(HT) card

exit 0

并使其成为可执行文件。

禁用虚拟混音和 COOKEDMODE 以减少失真

vmix 是一种虚拟混音器音频,可混合多个音频流,但可能会降低音质。仅仅取消选中 OSS Mixer GUI 中的 vmix 相关项并不总是有效。

关闭 COOKEDMODE 以禁用所有应用程序和设备的格式转换。

编辑 以下内容

/usr/lib/oss/conf/osscore.conf
cooked_enable=0
vmix_disabled=1

重启 oss.service 或您的计算机,如果您遇到错误。

之后,您仍然可以通过 ossmixossxmix 控制音量。

一个简单的系统托盘小程序

此文章或章节正在考虑删除。

原因: 看起来它依赖于 Python2 和 GTK2...(在 Talk:Open Sound System 中讨论)

此文章或章节需要语言、wiki 语法或样式改进。请参阅 Help:Style 以供参考。

原因: 这属于 PKGBUILD。(在 Talk:Open Sound System 中讨论)

对于那些想要非常轻量级的 OSS 系统托盘小程序的人,以下提供了一个简单的 python 版本

  • 使用您想要的任何名称(例如 ossvolctl)下载脚本
  • 使其成为可执行文件
  • 并将其复制到您的 /usr/bin
    # cp ossvolctl /usr/bin/ossvolctl
    # install -Dm755 ossvolctl /usr/bin/ossvolctl

在启动时启动 ossxmix 并停靠到系统托盘

KDE

在您的本地应用程序启动器目录(~/.local/share/applications/)中创建一个名为 ossxmix.desktop 的应用程序启动器文件

~/.local/share/applications/ossxmix.desktop
[Desktop Entry]
Name=Open Sound System Mixer
GenericName=Audio Mixer
Exec=ossxmix -b
Icon=audio-card
Categories=Application;GTK;AudioVideo;Player;
Terminal=false
Type=Application
Encoding=UTF-8

要使其在系统启动时自动启动,请将其添加到系统设置 > 系统管理 > 启动和关机 > 自动启动中的列表中。

GNOME

以 root 身份创建一个文件 /usr/local/bin/ossxmix_bg,内容如下

/usr/local/bin/ossxmix_bg
#!/bin/sh

exec /usr/bin/ossxmix -b

然后转到系统 > 首选项 > 启动应用程序,然后

  • 单击添加,在名称字段中键入 OSSMIX,在命令字段中键入 /usr/local/bin/ossxmix_bg,然后单击添加按钮
  • 注销并重新登录以查看更改。

录制程序的声音输出

请参阅上游文章,了解关于录制程序的声音输出

挂起和休眠

OSS 不会自动支持挂起,必须在挂起或休眠之前手动停止,然后在之后重新启动。

OSS 提供 soundonsoundoff 来启用和禁用 OSS,尽管它们只有在所有使用声音的进程都终止后才会停止 OSS。

以下脚本是一种相当基本的方法,用于在挂起之前自动卸载 OSS,并在之后重新加载。

/usr/lib/systemd/system-sleep/50osssound.sh
#!/bin/sh
suspend_osssound()
{
    /usr/lib/oss/scripts/killprocs.sh
    /usr/bin/soundoff
}
 
resume_osssound()
{
    /usr/bin/soundon
}
 
case $1 in
    pre)
        suspend_osssound
 	;;
    post)
 	resume_osssound
 	;;
    *) exit $NA
 	;;
esac

将此脚本的内容(以 root 身份)保存到 /usr/lib/systemd/system-sleep/50osssound.sh 中,并使其成为可执行文件。

警告: 此脚本相当基本,将终止任何直接访问 OSS 的应用程序。在挂起/休眠之前保存您的工作。

有了这个,您的所有应用程序都应该正常。

更改默认声音输出

当运行 osstest 时,第一个测试对于第一个通道通过,但对于立体声或右声道则不通过,听起来失真/嘶嘶作响。如果这是您的声音的状况,则说明它被设置为错误的输出。

*** Scanning sound adapter #-1 ***
/dev/oss/oss_hdaudio0/pcm0 (audio engine 0): HD Audio play front
- Performing audio playback test... 
<left> OK <right> OK <stereo> OK <measured srate 47991.00 Hz (-0.02%)> 

左声道听起来不错,右声道和立体声是失真的。

让测试继续进行,直到您获得可用的输出

/dev/oss/oss_hdaudio0/spdout0 (audio engine 5): HD Audio play spdif-out 
- Performing audio playback test... 
<left> OK <right> OK <stereo> OK <measured srate 47991.00 Hz (-0.02%)> 

如果这通过了所有左声道、右声道和立体声的测试,请继续下一步。

有关更改默认输出的命令,请参阅上游的 wiki 文章。将其更改为适合您的设置,例如

# ln -sf /dev/oss/oss_hdaudio0/spdout0 /dev/dsp_multich

对于环绕声 (4.0-7.1),选择 dsp_multich,对于仅 2 个声道,dsp 就足够了。有关所有可用设备,请参阅此处

ALSA 模拟

您可以指示 alsa-lib 使用 OSS 作为其音频输出系统。这可以作为一种 ALSA 模拟。

请注意,但是,此方法可能会在您的声音输出中引入额外的延迟,并且模拟并不完整,并且并非适用于所有应用程序。例如,它不适用于尝试使用 ALSA 检测设备的程序。

因此,由于大多数应用程序直接支持 OSS,因此仅在万不得已的情况下才使用此方法。

将来,可能会有更完整的方法用于模拟 ALSA,例如 libsalsacuckoo

说明

  • 如下编辑 /etc/asound.conf
pcm.oss {
   type oss
    device /dev/dsp
}

pcm.!default {
    type oss
    device /dev/dsp
}

ctl.oss {
    type oss
    device /dev/mixer
}

ctl.!default {
    type oss
    device /dev/mixer
}
注意: 如果您不想再使用 OSS,请不要忘记还原 /etc/asound.conf 中的更改。

特定驱动程序的设置

如果某些东西不起作用,则可能是您的某些 OSS 设置是驱动程序特定的,或者对于您的驱动程序而言是错误的。

要解决此问题

  • 找出使用了哪个驱动程序
$ lspci -vnn | grep -i -A 15 audio
00:1e.2 Multimedia audio controller [0401]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller [8086:266e] (rev 03)
Subsystem: Hewlett-Packard Company NX6110/NC6120 [103c:099c]
Flags: bus master, medium devsel, latency 0, IRQ 21
I/O ports at 2100 [size=256]
I/O ports at 2200 [size=64]
Memory at d0581000 (32-bit, non-prefetchable) [size=512]
Memory at d0582000 (32-bit, non-prefetchable) [size=256]
Capabilities: <access denied>
Kernel driver in use: *oss_ich*
Kernel modules: snd-intel8x0
  • 在以下位置找到设备的配置文件
# cd /usr/lib/oss/conf/
  • 尝试更改默认设置。只有少数设置,并且它们是不言自明的

例如,设置

ich_jacksense = 1 

oss_ich.conf 中,启用 jack-sense(它负责识别插入的耳机并使扬声器静音)。可以在 hdaudio.conf 中找到 jack-sense 的其他设置,您必须在其中更改 hdaudio_jacksense 变量。

  • 重启 oss.service 以使更改生效。

故障排除

HD Audio 设备的故障排除

了解问题

如果您有 HD Audio 声卡设备,则很可能需要调整一些混音器设置才能使您的声音正常工作。

HD Audio 设备非常强大,因为它们可以包含许多小型电路(称为widgets),这些电路可以随时通过软件进行调整。这些控件暴露给混音器,它们可以用于例如将耳机插孔变成声音输入插孔而不是声音输出插孔。

但是,也存在不良副作用,主要是因为 HD Audio 标准比它应该的更灵活,并且因为供应商通常只关心使其官方驱动程序工作。

当使用 HD Audio 设备时,您经常会发现混乱的混音器控件,默认情况下根本不起作用,并且您被迫尝试每种可能的混音器控件组合,直到它起作用为止。

解决方案

打开 ossxmix 并尝试更改中间区域中的每个混音器控件,该区域包含声卡特定的控件,如 #音量控制混音器 部分中所述。

您可能需要设置一个程序在后台持续录制/播放(例如,ossrecord - | ossplay - 用于录制,或 osstest -lV 用于播放),同时在前台的 ossxmix 中更改混音器设置。

  • 提高每个音量控制滑块。
  • 在每个选项框中,尝试更改选定的选项,尝试所有可能的组合。
  • 如果您听到噪音,请尝试降低和/或静音某些音量控制,直到找到噪音源。
  • 编辑 /usr/lib/oss/conf/oss_hdaudio.conf,取消注释并将 hdaudio_noskip=0 更改为 0-7 之间的值,可以在 ossxmix 中为您提供更多插孔选项。
注意: 如果您修改此文件,请重启 oss 守护进程以使更改生效。

Totem 中的 MMS 声音爆裂

如果您在 Totem 播放期间听到各种爆裂声或奇怪的噪音,您可以尝试使用另一个后端,例如 FFmpeg。这不会修复在播放 MMS 流时以某种方式在 GStreamer 中弹出的问题,但它将为您提供以良好的音质播放它的选项。在 MPlayer 中播放它很简单

# mplayer mmsh://yourstreamurl

麦克风通过输出通道播放

默认情况下,OSS 会将麦克风的声音通过扬声器播放出来。 要禁用此功能,请在 ossxmix 中找到 “Misc” 部分,并取消选中所有 “input-mix-mute” 复选框。

添加对更多 HD Audio 声卡的支持

此文章或章节的 factual accuracy 存在争议。

原因: 需要进行调整以避免提及手动编译 : 应该优先选择重新构建 ossAUR,此章节需要链接到自定义 AUR 软件包的相关页面。 特别是,最后的注释过于笼统(例如,依赖项应该由 PKGBUILD 处理)。 (在 Talk:Open Sound System 中讨论)

OSS 提供了一个 “通用” 编解码器驱动程序,它应该能够解析 99% 的所有 HDAudio 编解码器。

如果设备未在 oss_hdaudio.c 源代码文件中列出,请将其添加到文件中,重新编译 并启动驱动程序。

要查找设备类型 403 的 设备/供应商 ID,请执行以下操作

$ lspci -vnn | grep Audio
00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-H HD Audio [8086:a170] (rev 31)

在此示例中,“Vendor ID” 是 “8086”,而 “Device ID” 是 “a170”。

更改源代码中的 5 行代码,以 “最新的源代码包”(目前为 “oss-v4.2-build2020-src-gpl.tar.bz2”)为例

oss-v4.2-build2020-src-gpl/devlists/Linux
oss_hdaudio     pci8086,a170    Intel High Definition Audio (PCH_C)
oss-v4.2-build2020-src-gpl/kernel/drv/oss_hdaudio/.devices
oss_hdaudio     pci8086,a170    Intel High Definition Audio (PCH_C)
oss-v4.2-build2020-src-gpl/kernel/drv/oss_hdaudio/oss_hdaudio.c
#define INTEL_DEVICE_PCH_C      0xa170
    case INTEL_DEVICE_PCH_C:		#Don't add it, it's already there

最好修改现有的 “Controller”(在此示例中为 "PCH_C"),追加新的一行代码可能会失败。 是否为 PCH_C 并不重要。

最后一行代码有点复杂。 此示例是 ALC1150 声卡芯片。“ALC1150” 的 “Vendor_id” 是 “0x10ec0900”,您可以通过搜索引擎获取,或者尝试以下方法

# cat /sys/class/sound/card0/device/hdaudioC0D0/vendor_id
0x10ec0900
# cat /sys/class/sound/card0/device/sound/card0/hwC0D0/vendor_id
0x10ec0900

对于不同制造商的声卡芯片,需要修改不同的段落。 在示例中,Realtek 制造商的段落

oss-v4.2-build2020-src-gpl/kernel/drv/oss_hdaudio/hdaudio_codecids.h
  {0x10ec0889, "ALC889", VF_ALC88X_HACK, (char **) &alc883remap}, 
  {0x10ec0900, "ALC1150", VF_ALC88X_HACK, (char **) &alc883remap}, 
  {0x10ec0899, "ALC899", VF_ALC88X_HACK, (char **) &alc883remap},

非常重要的是,在此示例的硬件上,修改倒数第二行代码有效,但修改倒数第一行代码相同的代码会失败。 您需要尝试在不同的行上反复修改相同的代码,以使其在您的硬件上工作。

例如,在倒数第 4 行上尝试

 {0x10ec0887, "ALC887", VF_ALC88X_HACK, (char **) &alc883remap}, 
 {0x10ec0900, "ALC1150", VF_ALC88X_HACK, (char **) &alc883remap}, 
 {0x10ec0889, "ALC889", VF_ALC88X_HACK, (char **) &alc883remap}, 
 {0x10ec0892, "ALC892", VF_ALC88X_HACK, (char **) &alc883remap}, 
 {0x10ec0899, "ALC899", VF_ALC88X_HACK, (char **) &alc883remap},
注意

另请参阅