C-Media 8338/8738/8768/8770 驱动简要说明¶
Takashi Iwai <tiwai@suse.de>
前/后多声道播放¶
CM8x38 芯片可以使用 ADC 作为第二个 DAC,以便两个不同的立体声道可用于前/后播放。由于有两个 DAC,因此与下面部分中的 4/6 声道多声道播放不同,这两个流是独立处理的。
默认情况下,ALSA 驱动程序将第一个 PCM 设备(即 card#0 的 hw:0,0)分配给前置和 4/6 声道播放,而第二个 PCM 设备 (hw:0,1) 分配给第二个 DAC 用于后置播放。
两个 DAC 之间存在细微差别
第一个 DAC 支持 U8 和 S16LE 格式,而第二个 DAC 仅支持 S16LE。
第二个 DAC 仅支持双声道立体声。
请注意,CM8x38 DAC 不支持连续播放速率,而仅支持固定速率:5512、8000、11025、16000、22050、32000、44100 和 48000 Hz。
只有在禁用“四声道模式”开关时才能听到后置输出。否则,没有信号会路由到后置扬声器。默认情况下,它是打开的。
警告
当“四声道模式”开关关闭时,后置扬声器的输出将为满音量,而与主音量和 PCM 音量无关 [1]。这可能会损坏您的音频设备。请在关闭此开关之前断开扬声器连接。
如果您的声卡具有用于后置输出的额外输出插孔,则默认情况下应将后置播放路由到那里。如果没有,驱动程序中有一个控制开关“线路输入作为后置”,您可以通过 alsamixer 或其他方式更改它。 当此开关打开时,线路输入插孔用作后置输出。
还有两个与后置输出相关的控件。“交换 DAC”开关用于交换前置和后置播放路由,即第二个 DAC 从前置输出输出。
4/6 多声道播放¶
最新的 CM8738 芯片支持 4/6 多声道播放功能。 这对于 AC3 解码特别有用。
当支持多声道时,驱动程序名称会带有一个后缀“-MC”,例如“CMI8738-MC6”。 您可以从 /proc/asound/cards 检查此名称。
启用 4/6 声道输出后,第二个 DAC 最多可接受 6 个(或 4 个)声道。 虽然双 DAC 支持两种不同的速率或格式,但 4/6 声道播放仅支持所有声道的相同条件。由于多声道播放模式使用两个 DAC,因此您无法以全双工方式运行。
4.0 和 5.1 模式在 alsa-lib 中定义为 pcm “surround40” 和 “surround51”。 例如,您可以播放带有 6 个声道的 WAV 文件,如下所示
% aplay -Dsurround51 sixchannels.wav
对于编程 4/6 声道播放,您需要根据需要指定 PCM 声道并设置格式 S16LE。 例如,对于播放 4 个声道,
snd_pcm_hw_params_set_access(pcm, hw, SND_PCM_ACCESS_RW_INTERLEAVED);
// or mmap if you like
snd_pcm_hw_params_set_format(pcm, hw, SND_PCM_FORMAT_S16_LE);
snd_pcm_hw_params_set_channels(pcm, hw, 4);
并使用交错的 4 声道数据。
有一些控制开关会影响扬声器连接
- 线路输入模式
一个枚举控制来更改线路输入插孔的行为。 可以选择“线路输入”、“后置输出”或“低音输出”。 最后一个项目仅适用于 039 或更新的型号。 选择“后置输出”时,环绕声道 3 和 4 将输出到线路输入插孔。
- 麦克风输入模式
一个枚举控制来更改麦克风输入插孔的行为。 可以选择“麦克风输入”或“中央/LFE 输出”。 选择“中央/LFE 输出”时,中央声道和低音声道(声道 5 和 6)将输出到麦克风输入插孔。
数字 I/O¶
CM8x38 以非常便宜的价格提供了出色的 SPDIF 功能(是的,这就是我购买该声卡的原因:))
SPDIF 播放和捕获是通过第三个 PCM 设备 (hw:0,2) 完成的。 通常,这被分配给 PCM 设备“spdif”。 可用速率为 44100 和 48000 Hz。 对于使用 aplay 进行播放,您可以像下面这样运行
% aplay -Dhw:0,2 foo.wav
或
% aplay -Dspdif foo.wav
实验性地支持 24 位格式。
通过 SPDIF 进行播放和捕获分别使用普通的 DAC 和 ADC,因此您不能同时播放模拟和数字流。
要启用 SPDIF 输出,您需要通过混音器或 alsactl 打开“IEC958 输出开关”控制(“IEC958”是所谓的 S/PDIF 的官方名称)。 然后您会从卡上看到红灯亮起,因此您知道它正在工作 :) SPDIF 输入始终处于启用状态,因此您可以随时通过“IEC958 输入监视器”开关从线路输出听到 SPDIF 输入数据(请参见下文)。
您甚至可以使用第一个设备 (hw:0,0) 通过 SPDIF 进行播放,但是仅当使用正确的格式 (S16LE)、采样率 (441100 或 48000) 和声道 (2) 时,SPDIF 才会被启用。 否则它会关闭。 (也别忘了打开“IEC958 输出开关”。)
此外,还有相关的控制开关
- IEC958 混合模拟
混合模拟 PCM 播放和 FM-OPL/3 流,并通过 SPDIF 输出。 此开关仅出现在旧的芯片型号(CM8738 033 和 037)上。
注意:没有此控件,您可以将 PCM 输出到 SPDIF。 这是流的“混合”,因此例如它不适用于 AC3 输出(请参见下一部分)。
- IEC958 输入选择
选择 SPDIF 输入、内部 CD 输入(假)和外部输入(真)。
- IEC958 环路
SPDIF 输入数据循环回 SPDIF 输出(又名旁路)
- IEC958 版权
设置版权位。
- IEC958 5V
选择 0.5V(同轴)或 5V(光纤)接口。 在某些声卡上,这不起作用,您需要使用硬件拨动开关更改配置。
- IEC958 输入监视器
SPDIF 输入被路由到 DAC。
- IEC958 输入相位反转
将 SPDIF 输入格式设置为反转。 [FIXME:这并非在所有芯片上都有效..]
- IEC958 输入有效
设置输入有效性标志检测。
注意:当“PCM 播放开关”打开时,您将通过模拟线路输出听到数字输出流。
AC3(原始数字)输出¶
该驱动程序支持通过 SPDIF 进行原始数字(通常为 AC3)I/O。 这可以通过 IEC958 播放控制来切换,但是通常您需要通过 alsa-lib 访问它。 有关更多详细信息,请参见 alsa-lib 文档。
在原始数字模式下,“PCM 播放开关”会自动关闭,以便从模拟线路输出听到非音频数据。 类似地,以下开关关闭:“IEC958 混合模拟”和“IEC958 环路”。 关闭 SPDIF PCM 设备后,这些开关会自动恢复到以前的状态。
在 033 型号上,AC3 是通过 alsa-lib 中的软件转换实现的。 如果您需要绕过 IEC958 子帧的软件转换,请传递“soft_ac3=0”模块选项。 这在较新的型号上无关紧要。
模拟混音器接口¶
CM8x38 上的混音器界面与 SB16 类似。 有主音量、PCM、合成器、CD、线路、麦克风和 PC 扬声器播放音量。 合成器、CD、线路和麦克风也具有播放和捕获开关,以及 SB16。
除了标准的 SB 混音器之外,CM8x38 还提供了更多功能。 - PCM 播放开关 - PCM 捕获开关(用于捕获发送到 DAC 的数据) - 麦克风增强开关 - 麦克风捕获音量 - 辅助播放音量/开关和捕获开关 - 3D 控制开关
MIDI 控制器¶
对于 CMI8338 芯片,MPU401-UART 接口默认情况下已禁用。 您需要将模块选项“mpu_port”设置为有效的 I/O 端口地址才能启用 MIDI 支持。 有效的 I/O 端口为 0x300、0x310、0x320 和 0x330。 选择一个不与其他卡冲突的值。
对于 CMI8738 和更新的芯片,默认情况下会启用 MIDI 接口,并且驱动程序会自动选择一个端口地址。
此芯片上没有硬件波表功能(除了下面的 OPL3 合成器)。 Windows 上所说的 MIDI 合成器是软件合成器仿真。 在 Linux 上使用 TiMidity 或其他软合成器程序来播放 MIDI 音乐。
FM OPL/3 合成器¶
默认情况下,仅对于第一张卡也启用 FM OPL/3。 为更多卡设置“fm_port”模块选项。
但是,FM OPL/3 的输出质量非常奇怪。 我不知道为什么..
CMI8768 和更新的芯片没有 FM 合成器。
操纵杆和调制解调器¶
支持传统的操纵杆。 要启用操纵杆支持,请传递 joystick_port=1 模块选项。 值 1 表示自动检测。 如果自动检测失败,请尝试传递确切的 I/O 地址。
调制解调器通过卡控制开关“调制解调器”动态启用。
调试信息¶
寄存器显示在 /proc/asound/cardX/cmipci 中。 如果您有任何问题(尤其是混音器的意外行为),请将此 proc 文件的输出以及错误报告一起附加。