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 檔案的輸出以及錯誤報告一起附加。