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