C-Media 8338/8738/8768/8770 驱动简要说明¶
Takashi Iwai <tiwai@suse.de>
前/后多声道播放¶
CM8x38 芯片可以将 ADC 用作第二个 DAC,从而可以使用两个不同的立体声道进行前/后播放。由于有两个 DAC,因此与下面部分中的 4/6 声道多声道播放不同,这两个流是独立处理的。
默认情况下,ALSA 驱动程序将第一个 PCM 设备(即卡 #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 将输出到线路输入插孔。
- 麦克风输入模式
一个枚举控件,用于更改麦克风输入插孔的行为。可以选择“麦克风输入”或“中置/低频输出”。选择“中置/低频输出”时,中置和低音声道(声道 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 输入始终启用,因此您可以随时从线路输出听到 SPDIF 输入数据,并使用“IEC958 输入监视器”开关(请参见下文)。
您甚至可以使用第一个设备 (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 地址。
调制解调器通过卡控制开关 “Modem” 动态启用。
调试信息¶
寄存器显示在 /proc/asound/cardX/cmipci 中。如果您遇到任何问题(尤其是混音器出现意外行为),请将此 proc 文件的输出内容与错误报告一起附上。