The Linux Sound HOWTO -- Linux 音效指引 作者: Jeff_Tranter, [1]jeff_tranter@pobox.com 譯者: 伍永康 [2]yorkwu@ms4.hinet.net 中文版 v1.20C, 1999 年 7 月 24 日(原文 v1.20, 24 March 1999) _________________________________________________________________ 本文件描述在Linux下的關於音效的支援。 它列舉出支援的音效硬體設備,也寫 到了如何設好核心驅動程式,及常見問題的解答。 希望藉由它,可以讓新手更提 早上路,同時減少在Usenet新聞組及通信論壇間的龐大 "灌水量"。 _________________________________________________________________ 1. 緒論 * 1.1 銘謝 * 1.2 最新版本何處尋 * 1.3 回饋 * 1.4 散布時的注意事項 2. 音效卡技術 3. 支援的硬體 * 3.1 音效卡 * 3.2 選擇性的音效驅動程式 * 3.3 PC喇叭 * 3.4 平行(印表機)埠 4. 安裝 * 4.1 安裝音效卡 * 4.2 設定隨插即用 * 4.3 設定核心 * 4.4 建立設備檔 * 4.5 起動Linux及測試 * 4.6 問題與解決 5. 支援音效的應用軟體 6. 常見問題與解答 * 6.1 這一堆音效設備檔各代表什麼? * 6.2 怎樣播放音效檔案? * 6.3 怎樣錄製音效檔? * 6.4 我可以有不只一片音效卡嗎? * 6.5 音效設備發生錯誤: No such file or directory * 6.6 音效設備發生錯誤: No such device * 6.7 音效設備發生錯誤: No space left on device * 6.8 音效設備發生錯誤: Device busy * 6.9 還是逃不了'device busy'的錯誤! * 6.10 音效檔放到一半就停了 * 6.11 播放 MOD 檔斷斷續續 * 6.12 編譯音效軟體時出錯 * 6.13 以前跑很好的軟體,卻出現 SEGV 錯誤 * 6.14 音效驅動程式有何已知的限制及 bug? * 6.15 關於音效驅動程式的 ioctl 等,哪裡有記載? * 6.16 要完全平順地錄放音,需要多強的CPU才能辦到? * 6.17 PAS16 和 Adaptec 1542 SCSI 卡的搭配問題 * 6.18 可不可以同時錄放音? * 6.19 我的聲霸卡 16 是設 IRQ 2,可是驅動程式不准我設這個值 * 6.20 我離開 Linux,起動 DOS,然後有些軟體發聲不正常 * 6.21 在 Linux 下跑 DOOM 出問題 * 6.22 怎樣降低音效卡產生的雜音? * 6.23 能放音,不能錄音 * 6.24 必須先進 DOS 跑驅動程式,不然我的"相容卡"沒法用 * 6.25 我的 16 位元聲霸卡相容卡在 Linux 下只能用 8 位元模式 * 6.26 在哪裡找得到 Linux 的音效應用軟體? * 6.27 音效驅動程式可不可以編譯成可載入模組? * 6.28 我能把主控台的嗶嗶聲改用音效卡發出嗎? * 6.29 VoxWare是什麼? * 6.30 Sox/Play/Vplay 回報 "invalid block size 1024" * 6.31 我載入音效驅動程式模組後,混音設定就被重設了 * 6.32 只有 root 能錄音 * 6.33 在IBM ThinkPad上的音效硬體可以支援嗎? * 6.34 因為我的音效卡沒有混音器,所以應用程式不讓我用 * 6.35 SB16 CT4170 的問題 * 6.36 怎樣將 MIDI keyboard 連接到音效卡上? * 6.37 IRQ 15 以及 Ensoniq PCI 128 之間的問題 * 6.38 我在哪兒可以抓到可自由散布的 MIDI patch,來給 SoftOSS 使用? 7. 參考文獻 _________________________________________________________________ 1. 緒論 這是Linux Sound HOWTO文件。 它的主要目標是提供一切安裝及建置Linux音效支 援所需知 識的快速參考資料。 我們一方面回答關於Linux下關於音效的常見問題 ,另一方面也指出 關於電腦音效/音樂方面種種主題的參考資料的來源。 本文的範圍僅及於適合用於 Linux 的音效卡方面。 對於音效卡及電腦音效/音樂 原理的資料,請參閱參考文獻那節列出的文件。 1.1 銘謝 這份文件很多來自音效驅動程式程式碼所附的文件(由 Hannu Savolainen( [3]hannu@voxware.pp.fi)撰寫)。 謝謝Hannu,Alan Cox,及開發 Linux 核心音 效驅動程式, 以及公用程式的許許多多其他人們。 由於有 [4]SGML Tools 套件,使得本文件可以由一個原始檔產生出幾種不同格式 。 1.2 最新版本何處尋 本文件之最新版本將定期張貼於 [5]comp.os.linux.answers 新聞組; 它也會放 到很多保存這類資訊的匿名ftp站,諸如 [6]ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 本文件及其它 HOWTO 文件的超文字版也放在很多 WWW 站台上,包括 [7]http://metalab.unc.edu/LDP/ 很多 Linux 的 CD-ROM 安裝套件也內含 HOWTO 文件,通常放在 /usr/doc/ 目錄下。 有時在CD-ROM 上的,或列印的,或 在ftp站裡的會是過時的版本。 如果在本 HOWTO 上的日期已距今超過 六個月, 那麼在Internet上可能已經有新版了。 要請您注意的是,由於網際網路的動態性質,在本文件中所有的 WWW 及 FTP 連 結都可能發生改變。 本文件亦被翻譯為幾個不同語言的版本: 中文: [8]http://www.linux.org.tw/CLDP/Sound-HOWTO.html 法文: [9]http://www.freenix.org/unix/linux/HOWTO/ 日文: [10]http://yebisu.ics.es.osaka-u.ac.jp/linux/ 韓文: [11]http://kldp.linux-kr.org/HOWTO/html/Sound/Sound-HOWTO.html 俄文: [12]http://www.phtd.tpu.edu.ru/~ott/russian/linux/howto-rus/Sound-HOWT O.html 西班牙文: [13]ftp://ftp.insflug.org/es 多數本文件及其它的 Linux HOWTO 的翻譯版也可以在 [14]http://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 以及 [15]ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/找到。 如果 您將本文件翻做其它語言,請告訴我,我會在這裡替它做個連結。 1.3 回饋 這份 HOWTO 文件,需要各位讀者協助,才能越來越好用。 如果您有任何建議, 修正, 或意見,請告訴作者( [16]jeff_tranter@pobox.com)。 我將會在下一版 試著加入這些意見。 (譯注: 對本中文版的意見,請告訴 [17]譯者(yorkwu@ms4.hinet.net)。) 我也很樂意盡我能力回答關於音效卡及Linux的一般問題。 但在這之前,請先耐 心讀完這 整篇 HOWTO,然後再給我和這問題相關的所有細節資訊。 請不要問我 在非Linux作業系統 下關於音效卡的問題。 如果您在唯讀光碟上或以硬拷貝形式發行此文件,歡迎附送一份過來。 請寄到我 的收信地 址。 也請考慮一下對 Linux 文件計畫作點奉獻,以支持 Linux 的免 費文件。 請和Linux HOWTO 協調人 Tim Bynum ( [18]mailto:linux-howto@metalab.unc.edu )聯絡以得到更多資訊。 1.4 散布時的注意事項 Copyright (c) 1995-1999 by Jeff Tranter. 中文版版權為伍永康及 Jeff Tranter (1997-1999) 所有。 This document may be distributed under the terms set forth in the LDP license at [19]http://metalab.unc.edu/LDP/COPYRIGHT.html 本文件得依照 [20]http://sunsite.unc.edu/LDP/COPYRIGHT.html 所記載之 LDP 執照的條款發行。 2. 音效卡技術 為了有助於您對本文後面講到的有些了解,這一節簡略地提一下電腦音效 技術的 概要。 如果想更進一步了解,請找數位音訊或數位信號處理的相關書籍。 聲音是一種類比的現象(property); 它可能是在連續範圍內的任意值。 然而電腦 卻是數位的,只能表示範圍中的幾個點。 為了讓聲音能存進記憶體, 音效卡用 了一種叫類比/數位轉換器(A/D或ADC),將聲波信號(以電壓表示) 轉換成數字以 供儲存。 另外也用一個數位/類比轉換器(D/A或DAC) 將數字反過來轉換成電壓, 送進喇叭,發出聲音。 由類比轉換成數位的過程,叫作取樣,會產生一些誤差。 有兩個因素決定轉換過 的聲音轉得多好。 其一是取樣率,是在單位時間內, 硬體對聲音作幾次取樣(通 常用每秒幾次或赫茲為單位)。 較低的取樣率表示的類比信號就比較不準確。 其 二是樣本大小, 是每一次取樣的有效範圍,通常用 bit 表示。 有效範圍越大, 就能取出較準確的數位化聲音。 音效卡一般用8或16 bit取樣,取樣率則在 4000-44000Hz 之間。 取樣也分為單 聲道(單音)或雙聲道(立體聲)。 FM 合成是產生聲音的舊方法。 它把不同的波型 (如正弦波,方波,三角波等)組 合起來產生聲訊。 FM 合成硬體上比較簡單, 但是較難程式化,也較沒彈性。 很多音效卡仍提供 FM 合成以和過去的音效卡及軟體相容。 通常會提供幾組獨立 的聲音產生器及語音。 波型表合成結合了 D/A 轉換的彈性及 FM 合成的多頻道能力。 用這種方法,數 位語音可以下載到專用的記憶體內,在不太需要CPU負載的情況下播放, 合併及 修改。 最新銳的音效卡都支援波型表合成。 多數音效卡提供混音能力,可將不同訊號來源的聲音加以合併,並控制增益 強度 。 MIDI是指樂器數位介面 (Musical Instrument Digital Interface), 是一種可 以讓樂器彼此溝通的軟硬體協定。 在 MIDI bus 上傳送的事件可以存成 MIDI 檔 , 供日後修改及重播。 很多音效卡提供 MIDI 介面,即使沒有,靠音效卡本身 的能力, 仍然可以播放 MIDI 檔。 MOD檔是電腦產生歌曲常用的格式。 除了記錄音符外, 檔案也記錄了樂器(或語 音)的數位取樣。 MOD檔是由Amiga電腦來的,但只要有適當的軟體, 在包 括Linux的其它系統上也能播放。 3. 支援的硬體 這一節列出目前 Linux 支援的音效卡及音效介面, 以撰寫時最新的 Linux 核心 為基準,在本文撰寫時是 2.2.4。 這份文件只對包含在標準 Linux 核心碼中的 音效驅動程式有效。 Linux 上尚有其它的音效驅動程式存在(請看後面關於 選擇 性的音效驅動程式 一節) 關於 Linux 支援的音效卡以及它的功能的最新消息,請看 Linux 核心原始碼中 的檔案,通常裝在/usr/src/linux/Documentation/sound 目錄下。 在這份HOWTO裡的資訊對Intel平台的Linux有效。 音效卡驅動程式應該也能支援Alpha平台上的多數音效卡。 然而有的卡雖然在 i386 平台上工作得很好,卻會和 Alpha 系統上的其它設備位址相衝突。 所以通 常沒試過的話,沒辦法得知一片卡到底能不能用。 所以除非親自嘗試過,不然也 不能確定一片音效卡能不能用。 有報告稱在PowerPC平台上的 Linux 音效驅動程式還無法使用, 不過將來應該會 支援。 在MIPS平台的Linux可以將音效驅動程式掛進核心, 有部份MIPS機器有EISA插槽 ,或者內建的發音硬體。 Linux MIPS group 告訴我,在將來他們很有興趣加入 對音效的支援。 Linux 核心也為 Atari 及 Amiga 平台的 Linux 一個分開的驅動程式, 它運用 這些機器內建硬體,實作了和 Intel 平台上 Linux 相容的子集合。 SPARC平台的 Linux 目前在某些機型上已支援音效。 有人和我說在主機板上的音 效硬體已可以用,但外部 DSP 音效盒還未支援,因為 Sun 並沒有給相關規格資 料。 3.1 音效卡 以下音效卡為 Linux 核心驅動程式支援。 其中有些是音效晶片名稱而非音效卡 名稱。 這個列表並不是完整的列表, 因為有很多其它卡是和其中的一些卡相容 。 有些廠商隔一段時間就改變設計, 使新音效卡和舊的產生不相容性,但卻還 用舊的型號,更增加了困擾。 * 6850 UART MIDI Interface * AD1816/AD1816A based cards * ADSP-2115 * ALS-007 based cards (Avance Logic) * ATI Stereo F/X (停產) * Acer FX-3D * AdLib (停產) * Audio Excel DSP 16 * AudioDrive * CMI8330 音效晶片 * Compaq Deskpro XL onboard sound * Corel Netwinder WaveArtist * Crystal CS423x * ESC614 * ESS1688 音效晶片 * ESS1788 音效晶片 * ESS1868 音效晶片 * ESS1869 音效晶片 * ESS1887 音效晶片 * ESS1888 音效晶片 * ESS688 音效晶片 * ES1370 音效晶片 * ES1371 音效晶片 * Ensoniq AudioPCI (ES1370) * Ensoniq AudioPCI 97 (ES1371) * Ensoniq SoundScape (及由Reveal和Spea生產的相容卡) * Gallant SC-6000 * Gallant SC-6600 * Gravis Ultrasound * Gravis Ultrasound ACE * Gravis Ultrasound Max * Gravis Ultrasound with 16 bit sampling option * HP Kayak * Highscreen Sound-Booster 32 Wave 3D * IBM MWAVE * Logitech Sound Man 16 * Logitech SoundMan Games * Logitech SoundMan Wave * MAD16 Pro (OPTi 82C928,82C929,82C930,82C924 晶片) * Media Vision Jazz16 * MediaTriX AudioTriX Pro * Microsoft Windows Sound System (MSS/WSS) * MiroSOUND PCM12 * Mozart (OAK OTI-601) * OPTi 82C931 * Orchid SW32 * Personal Sound System (PSS) * Pinnacle MultiSound * Pro Audio Spectrum 16 * Pro Audio Studio 16 * Pro Sonic 16 * Roland MPU-401 MIDI interface * S3 SonicVibes * SY-1816 * Sound Blaster 1.0 * Sound Blaster 2.0 * Sound Blaster 16 * Sound Blaster 16ASP * Sound Blaster 32 * Sound Blaster 64 * Sound Blaster AWE32 * Sound Blaster AWE64 * Sound Blaster PCI 128 * Sound Blaster Pro * Sound Blaster Vibra16 * Sound Blaster Vibra16X * TI TM4000M notebook * Terratec Base 1 * Terratec Base 64 * ThunderBoard * Turtle Beach Maui * Turtle Beach MultiSound Classic * Turtle Beach MultiSound Fiji * Turtle Beach MultiSound Hurricane * Turtle Beach MultiSound Monterey * Turtle Beach MultiSound Pinnacle * Turtle Beach MultiSound Tahiti * Turtle Beach WaveFront Maui * Turtle Beach WaveFront Tropez * Turtle Beach WaveFront Tropez+ * VIA chip set * VIDC 16-bit sound * Yamaha OPL2 音效晶片 * Yamaha OPL3 音效晶片 * Yamaha OPL3-SA1 音效晶片 * Yamaha OPL3-SA2 音效晶片 * Yamaha OPL3-SA3 音效晶片 * Yamaha OPL3-SAx 音效晶片 * Yamaha OPL4 音效晶片 對"相容"一詞有些話先說在前: 雖然大多數音效卡號稱相容於聲霸卡, 但能 用Linux的聲霸卡驅動程式的卡少之又少。 這些卡如果用 MSS/WSS 或 MAD16 驅 動程式通常會更好。 只有真正由 Creative Labs 做的聲霸卡(用 Creative 的晶 片,如 SoundBlaster16 Vibra),或 MV Jazz16 及 ESS688/1688 的卡才能無問 題的用聲霸卡驅動程式。 在所謂 "聲霸卡相容的16位元 音效卡" 上用聲霸卡驅 動程式只是浪費時間罷了。 Linux 核心也支援在音效卡上的 SCSI 介面(ProAudioSpectrum 16)及專屬光碟機 介面 (如聲霸卡 Pro)。 請看 Linux [21]SCSI HOWTO 及 [22]CDROM HOWTO 文件 以作更深入了解。 (譯注: CDROM HOWTO 中文版在 [23]http://www.linux.org.tw/CLDP/CDROM-HOWTO.html) 在音效卡上常見的搖桿介面,也有個核心可載入模組支援。 注意這裡提到的SCSI,CD-ROM,搖桿及音效驅動程式彼此是無關的。 3.2 選擇性的音效驅動程式 Linux 核心的音效卡驅動程式最早是由 Hannu Savolainen 寫的。 Hannu 後來繼 續開發 Open Sound System,一個由 4Front Technologies 出售,支援多種 Unix 系統的商業版本音效驅動程式。 Red Hat Software 後來資助 Alan Cox 來 增強核心音效驅動程式,使它們完全模組化。 很多其他人也協助除錯, 以及發 展新音效卡的額外驅動程式。 這些修改過的驅動程式由 Red Hat 在他們的 5.0 到 5.2 版發行套件中使用。 目前這些改變已經在 2.0 版整合進標準核心中。 Alan Cox 是現在標準核心音效驅動程式的維護人,雖然 Hannu 每隔些時候仍會 帶進一些由商業版分割出來的程式碼進來。 商業版本的 Open Sound System 驅動程式(由 4Front Technologies 發展)比較 起來容易設定,也支援較多的卡,特別是新的音效卡。 它也和對標準核心驅動程 式寫的應用程式相容。 缺點是您要花錢,也不會得到原始碼。 您可在決定要不 要買以前先下載免費試用版。 更詳細的資訊可在4Front Technologies的網站 [24]http://www.opensound.com取得。 Jaroslav Kysela及其他人為Gravis UltraSound音效卡寫了可選的驅動程式。 這 個計畫後來改名為Advanced Linux Sound Architecture(先進 Linux 音效架構 ,ALSA),產生了一個他們認為更加一般可用, 且可用來取代核心中的音效驅動 程式。 ALSA 驅動程式支援許多常見的音效卡, 而且是全雙工,全模組化,和現 存核心中的音效架構相容。 ALSA 計畫的主要網站在 [25]http://www.alsa-project.org。 有個另外的 "Alsa-sound-mini-HOWTO", 裡面主要是如何編譯及安裝這些驅動程式。 Markus Mummert ( [26]mum@mmk.e-technik.tu-muenchen.de寫了給 Turtle Beach MultiSound(classic) ,Tahiti,及Monterey音效卡用的驅動程式,文件 中提到: "It is designed for high quality hard disk recording/playback without losing sync even on a busy system。 Other features such as wave synthesis,MIDI and digital signal processor (DSP) cannot be used。 Also,recording and playback at the same time is not possible。 It currently replaces VoxWare and was tested on several kernel versions ranging from 1.0.9 to 1.2.1。 Also,it is installable on UN*X SysV386R3.2 systems." (它是為高品質硬碟錄放音設計,即使系統負載大,也不會掉音。 其它如波形 合成, MIDI 及數位信號處理器 (DSP) 則不能使用。 也不能同時錄放音。 它目前可取代 VoxWare ,並在1.0.9到1.2.1版核心測試過。 它也可以裝在 UN*X SysV386R3.2 系統上。) 可在 [27]http://www.cs.colorado.edu/~mccreary/tbeach找到。 Kim Burgaard ( [28]burgaard@daimi.aau.dk 寫了給 MPU-401 MIDI 介面用的驅 動程式及公用程式。 Linux Software Map 給予如下的介紹: "A device driver for true Roland MPU-401 compatible MIDI interfaces (including Roland SCC-1 and RAP-10/ATW-10)。 Comes with a useful collection of utilities including a Standard MIDI File player and recorder. (一個給和 MPU-401完全相容的 MIDI 介面(包括 Roland SCC-1 及RAP-10/ATW-10) 用 的驅動程式。 也附帶了好用的公用程式,包括標準的 MIDI 檔播放器及錄製程式。) Numerous improvements have been made since version 0.11a。 Among other things,the driver now features IRQ sharing policy and complies with the new kernel module interface。 Metronome functionality,possibility for synchronizing e.g。 graphics on a per beat basis without losing precision,advanced replay/record/overdub interface and much,much more." (從 0.11a 版起,又進行了多項改進。 其中包括了 IRQ 共用,還有可編譯為 核心模組。 節拍器功能可達到每一拍都同步而不喪失準度,改良的重播/錄音 及overdub(?) 介面及很多很多。) 可在 [29]ftp://metalab.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz 找到 。 音效卡在Linux下還有一個新奇用途 -- 當作業餘無線電的調變器。 2.1.x 版及 以後的核心包含了一個利用聲霸卡及 Windows Sound System 相容卡來實作 1200 bps AFSK 及 9600 bps FSK 封包協定的驅動程式。 詳情請見 Linux AX25 HOWTO。 (我(作者)也是個火腿族,代號 VE3ICH) 3.3 PC喇叭 另外還有一個不要額外硬體的驅動程式,它利用PC喇叭。 它和音效驅動程式軟體 上大體相容,但可以想見的,它的音質差多了,CPU負擔也高多了。 它產生的結 果視各別喇叭的特性而有很大差別。 請看內附的文件以更深的了解。 這個軟體已有一段時間沒有更新了,可在 [30]ftp://ftp.infomatik.hu-berlin.de/pub/os/linux/hu-sound/找到。 3.4 平行(印表機)埠 還有個選擇,就是用平行埠加上一些東西做數位/類比轉換。 它的音質比 PC 喇 叭好,但 CPU 負載仍嫌高。 前一小節提到的喇叭驅動程式有支援,它還包含了 製造所需硬體的說明。 4. 安裝 要在Linux下支援音效,必須先進行以下步驟: 1. 安裝音效卡 2. 設定隨插即用(Plug and Play)(如果可以/需要的話) 3. 建造核心,使之支援音效 4. 建造設備檔 5. 啟動Linux核心,並測試 如果您使用 Red Hat Linux,裡面有個公用程式叫 sndconfig, 在多數情形下能 自動偵測您的音效卡,並設定所需的設定檔,載入所需的驅動程式。 如果您使用 Red Hat 我建議您試試它。 如果它成功了,本章後面的指示就可以跳過。 如果 sndconfig 失敗了,或您使用別的發行套件, 或您想要經由手動設定更進 一步了解整個運作過程,底下將會詳加解說每一步驟。 4.1 安裝音效卡 按照說明書的指示,安裝硬體,或是請廠商來裝。 舊的音效卡通常有開關或跳線,以設定IRQ,DMA通道等,請把這些設定記下來。 如果您不確定要怎麼調,就照出廠值。 可能的話,避免和其它設備(如網路卡 ,SCSI卡, 平行及串列埠)相衝。 若您在DOS下有使用音效卡,通常應該設成和DOS下一樣。 不過有些情況下(特別 是PnP的 卡)也可能要設成和DOS不一樣的值。 這時可能要實驗一下。 4.2 設定隨插即用 現在多數音效卡用隨插即用協定來設定 I/O 位址,中斷及 DMA 通道號碼。 如果 您使用的是設定值固定的或是有跳線調整的,那麼您可以跳過這一節。 在 2.2 版核心中,仍然還沒有完全支援隨插即用。 較好的解決之道是使用許多 Linux 發行套件中所附 isapnp 工具(或您也可以從 Red Hat 的網站 [31]http://www.redhat.com/下載)。 首先查看您的 Linux 安裝套件中的文件。 它可能早幫您設定好隨插即用了, 或 者可能和底下講的略有不同。 如果您要手動設定,isapnp 工具的細節可以在 man page 中找到。 簡單的說,您要經歷的程序有: * 使用 pnpdump 來抓取所有您的隨插即用設備的可能設定,把結果存成 /etc/isapnp.conf。 * 由其中選擇和其它設備不相衝突的設定,並將在 /etc/isapnp.conf 中的相 對應行設成有效行(uncomment)。 別忘了把接近檔尾的(ACT Y)前的註解符號 消掉。 * 確定開機時會執行到 isapnp,這通常由開機執行的命令稿之一完成。 重開 機或手動執行 isapnp。 如果為了一些理由您無法或不想使用 isapnp 工具,還有幾種選擇。 如果您在 Microsoft Windows 95 或 98,您可以利用裝置管理員來設定卡,然後用 loadlin 暖開機進入 Linux。 確定 Linux 及 Windows 使用相同的設定參數。 如果您在 DOS 下使用這片卡,您可以用 SoundBlaster16 PnP 卡附的 icu 公用 程式,然後用 LOADLIN 暖開機進 Linux。 一樣,確定 DOS 和 Linux 用一樣的 設定。 有些音效卡驅動程式需要軟體來初始化卡的隨插即用功能。 請看卡的驅動程式的 說明文件得到更詳細資訊。 4.3 設定核心 安裝時您用的是預先編譯過的核心,它們通常是不支援音效的。 所以最好自己編 譯適合自 己用的核心。 而且,您也可能想要藉此來升級到更新版的核心,或是 縮小核心體積,增加 可用的記憶體。 然後,當您的音效卡能使用後,您可能想 重建核心, 把音效驅動程式做成模組。 在如何建造核心方面,您應該參考 [32]Linux Kernel HOWTO。 我在這裡只提和 音效卡相關的部份。 (譯注: 中文版在 [33]http://www.linux.org.tw/CLDP/Kernel-HOWTO.html 如果您還沒有編譯核心,加入音效支援的經驗,先讀一下核心驅動程式裡的相關 文件 (特別是關於您的音效卡的部份)是個不錯的主意。 這些檔案可以在核心文 件目錄中找到,通常在 /usr/src/linux/Documentation/sound。 如果沒有這個 目錄, 您可能還在使用非常舊的核心,或是根本沒裝核心原始碼。 照一般造核心的程序來就好。 目前設定核心有三種介面可選擇。 用 "make xconfig " 可叫出在X11下的圖形設定介面; 用 "make menuconfig" 則是文字 模 式的選單介面; 最原始的方法,則是用 "make config",提供了簡單的文 字問答 介面。 當設定核心時,在選擇您的音效卡及驅動程式選項時會有很多選擇。 在設定工具 中的線上求助應該可以為您解釋每一個選項是什麼。 依照您所知的, 選擇最適 當的選項。 在設定完所有選項後,您應該照 Kernel HOWTO 來重新編譯並安裝核心。 4.4 建立設備檔 為了正常的操作,必須為各音效設備建立設備檔。 正常狀況下在您裝 Linux 時 就已經 建好了,可以用下列的命令快速檢查一下。 如果輸出結果和下面很像(日 期不一樣 沒關係),那麼設備檔差不多是設定正確了。 % ls -l /dev/sndstat crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat 注意有了正確的設備檔並不保證一切完美了。 在設備能用以前,還是要先載入或 加進 核心驅動程式(稍後再詳述)。 在極少數情況,如果您確信設備檔設錯,您可以重建它們。 多數 Linux 發行套 件有有個 /dev/MAKEDEV 命令稿可以用來做這事。 4.5 起動Linux及測試 您至此應該可以準備起動新核心,測試驅動程式了。 照著您平時安裝及重啟動新 核心的步 驟去做(當然,保留一份舊核心以防萬一)。 在起動中,檢查一下有沒有類似以下的訊息:(如果訊息捲動太快,您可以 用dmesg 命令回過來查看。) Sound initialization started at 0x220 irq 5 dma 1,5 at 0x330 irq 5 dma 0 at 0x388 Sound initialization complete 這應該和您的音效卡及跳線設定(如果有的話)一致。 如果您用可載入模組,以上訊息就不會顯示出來(除非您載入它時,用 insmod sound trace_init=1) 當音效驅動程式載入核心中時,應該會顯示Sound initialization started 及Sound initialization complete訊息。 如果沒有,表示音效驅 動程式沒有載 入,這時您應該檢查一下目前起動的核心有沒有加入音效驅動程式支援。 如果在Sound initialization started及 Sound initialization complete間沒 有印出什麼東西, 那表示沒有偵測到音效設備。 這最可能的原因是您沒有使用 正確的驅動程式,卡沒被支援,I/O位址不對或您用了還沒有設定過的 PnP 卡。 驅動程式起動中亦可能印出錯誤及警告訊息。 在設定完驅動程式後,重啟動時, 注意這 些訊息。 再來是檢查/dev/sndstat設備檔。 讀取這個狀態檔可以得知額外的資訊, 或是 音效卡驅動程式是不是正確啟動了。 輸出範例如下: % cat /dev/sndstat Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root, Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586) Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586 Config options: 0 Installed drivers: Type 1: OPL-2/OPL-3 FM Type 2: Sound Blaster Type 7: SB MPU-401 Card config: Sound Blaster at 0x220 irq 5 drq 1,5 SB MPU-401 at 0x330 irq 5 drq 0 OPL-2/OPL-3 FM at 0x388 drq 0 Audio devices: 0: Sound Blaster 16 (4.13) Synth devices: 0: Yamaha OPL-3 Midi devices: 0: Sound Blaster 16 Timers: 0: System clock Mixers: 0: Sound Blaster 以上的命令也可能回報錯誤訊息。 "No such file or directory" 表示您還 沒 建設備檔(參考4.3節)。 "No such device" 表示音效程式沒有載入,或沒 有連 結進核心裡。 請回到 4.2 節以修正之。 如果 /dev/sndstat 檔中,在"Card config:"段的幾行寫在括號裡 (就像" (SoundBlaster at 0x220 irq 5 drq 1,5)"),它表示設備已經設定了,但是沒有 偵 測到。 現在您應該可以試試放簡單的音效檔了。 抓範例音效檔,把它丟到設備檔來檢查 。 % cat endoftheworld >/dev/dsp % cat crash.au >/dev/audio (確定您沒有省略掉大於符號) 注意,在平時用cat不是放音效檔的貼切方法,這只是為了檢查罷了。 去抓合適 的放音程式(後面詳述)可以做得更好。 只有在 /dev/sndstat 內的 audio devices 這段至少列出一個設備的情形下, 以上命令才會有效。 如果這段沒列出任何東西,您應該檢查一下為何設備沒偵測 到。 如果以上命令回報"I/O error",您可以用 "dmesg"命令檢查 核心訊息的尾部, 在那很可能會有印出錯誤訊息,而且經常是 "Sound: DMA (output) timed out - IRQ/DRQ config error?"。 這個訊息是指驅動程式沒有從音效卡得到應 該發 生的中斷。 最有可能的原因是,IRQ 和 DMA 的設定沒有作用。 解決這問題的最 好方法就是土法煉鋼,把所有這張卡能設到的 DMA 和 IRQ 搭配都試試看。 另一種可能原因是驅動程式和卡不相容。 這幾乎一定是所謂 "聲霸卡(Pro/16)相 容卡 " 和聲霸卡驅動程式搭不起來。 這種狀況下您要找出和您的卡能搭配的驅 動程式才 行。(例如,可以投書到comp.os.linux.hardware討論區問問) 一些音效範例檔可在 [34]ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 抓 到。 現在您可以試試錄音了。 如果您的卡有錄音能力,您可以用以下命令來快速測試 一下: # 從麥克風錄進 4 秒聲音 EDT% dd bs=8k count=4 < /dev/audio >sample.au 4+0 records in 4+0 records out # 把剛剛錄的放出來 % cat sample.au > /dev/audio 顯然您必需要有連接音效卡的麥克風,還要對著它講話,才能試出有沒有效。 您 也許也需 要弄到一個混音程式,設定麥克風為輸入裝置,並設定其錄音的增益。 如果以上測試都通過了,您就有理由相信音效D/A及A/D硬體和軟體都很正常。 如 果您碰到 問題,參考下一小節。 4.6 問題與解決 如果您進行了以上部驟,仍然有問題,那麼可以檢查幾個地方。 這些檢查由簡單 到複雜 依序排列,如果檢查出問題,先解決,再進行下一道檢查。 第一步: 確定您用您自己編譯的核心起動。 您可以用核心的日期戳記來識別是不是您編譯的那個有支援音效的核心。 您可以 用 uname命令來作: % uname -a Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown 或顯示/proc/version檔內容: % cat /proc/version Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999 如果日期戳記不是您編譯核心的時間,那您用了舊的核心。 您真的重開機了嗎? 如果您用 LILO,是不是有重裝呢(平常用lilo)? 如果是軟碟起動,您真的 做了 新開機片,並用它開機嗎? 第二步: 確定核心音效驅動程式有編進去。 最簡單的方法就是前面提過的,檢查 "/dev/sndstat"的輸出。 如果有地方不對 , 那麼核心設定或建立一定有問題。 再重新設定及建立,安裝新核心的程序。 第三步: 核心起動時有偵測到您的音效卡嗎? 確定核心啟動時您的卡有被偵測到。 您應該看過開機訊息了,如果它捲得過快, 您通常可 用 dmesg 命令叫回來: % dmesg 或 % tail /var/adm/messages 如果您的卡沒偵測到,就是某一處出問題。 確定那張卡真的裝了。 如果那張卡 在DOS下工 作得很好,那您就有理由相信硬體是正常的。 不是您把音效卡設錯型 式,下錯參數,就是 您的音效卡和核心音效驅動程式不相容。 一種可能就是需要特殊DOS驅動程式來驅動的"相容"卡。 試著起動 DOS,載入 廠 商給的驅動程式,然後按Control-Alt-Delete暖開機進Linux。 確定卡的I/O位 址,DMA及IRQ設定都和DOS一樣。 讀在音效驅動程式原始碼中的 Readme.cards 檔以得到關於設定您的這型卡的提示訊息。 如果您的卡並沒有在本文件中列出,可能是Linux驅動程式沒支援的關係。 您可 以參考本文 末的參考文獻來求助。 第四步: 您能從dsp設備讀出資料嗎? 試試用前面提過的 dd 命令讀取 /dev/audio。 這個命令應該不會有錯誤才對。 如果不行,那可能是 IRQ/DMA 衝到,或某種硬體不相容(設備不為 Linux 支援, 或用錯驅 動程式)。 還有一個少見的可能是不良的硬體。 可能的話,在DOS下測試一下,消去這種可 能性。 要是這些都沒用呢? 如果您還是有問題,這裡提供最後幾招試試: * 小心重讀這份HOWTO文件 * 讀本文件後列的參考文獻,及相關的核心原始碼中的文件。 * 到 comp.os.linux 或其它Usenet討論區 (comp.os.linux.hardware 是個好 地方; 因為這兒灌水量多, 最好在標題欄註明 "sound",這樣適合的專家才 會找到它。) * 用Web/Usenet搜尋引擎,加上有智慧的搜尋條件,很快就能找到很好的結果 。 一個好選擇是 [35]http://www.altavista.digital.com。 * 用最新的Linux核心。(但是只在最後關頭才用,最新的發展用核心可能很不 穩) * 發封信給音效驅動程式作者 * 發封信給Sound HOWTO的作者 * 叫出emacs,輸入Esc-x doctor :-) (譯注: 當然最後一項是開玩笑的) 5. 支援音效的應用軟體 如果您在Linux下能用音效卡, 我在這裡提出一些您可能會想要的應用軟體。 您 可以查一下 Linux Software Map,網際網路檔案庫,或是您的Linux CD-ROM 以 找出最新資訊。 您最少會想要以下的音效軟體: * 音效檔檔案格式轉換軟體 (如 Sox) * 混音程式 (如 aumix 或 xmix) * 音效檔播放軟體 (如 play 或 wavplay) * MOD 檔案播放軟體 (如 tracker) * MIDI 檔案播放軟體 (如 playmidi) 這類工具有文字型式的,也有GUI型式的。 也有一些比較奇異一點的應用 (像語 音分析及辨識),您可能會想玩玩看。 6. 常見問題與解答 這一節回答經常在Usenet討論區及通信論壇常被問到的問題。 可以在OSS音效驅動程式的網站看到更多問題的解答。 6.1 這一堆音效設備檔各代表什麼? 以下是最標準的設備檔檔名,雖然有些 Linux 安裝套件可能用不太一樣的名稱。 /dev/audio 一般是連到 /dev/audio0 /dev/audio0 和Sun工作站相容的聲訊設備 (只作了部份,並不支援 Sun 的 ioctl 介 面,只有 u-law 編碼) /dev/audio1 第二個音訊設備 (如果音效卡支援,或不只有一張音效卡的話) /dev/dsp 一般連到 /dev/dsp0 /dev/dsp0 第壹數位取樣設備 /dev/dsp1 第貳數位取樣設備 /dev/mixer 通常連結到 /dev/mixer0 /dev/mixer0 第壹混音器 /dev/mixer1 第貳混音器 /dev/music 高階編曲器介面 /dev/sequencer 低階 MIDI,FM,及 GUS 存取用 /dev/sequencer2 通常連結到 /dev/music /dev/midi00 第壹原生(raw)MIDI埠 /dev/midi01 第貳原生MIDI埠 /dev/midi02 第參原生MIDI埠 /dev/midi03 第肆原生MIDI埠 /dev/sndstat 讀取時,顯示音效驅動程式的狀態(/proc/sound 也是一樣的) PC喇叭驅動程式提供以下設備: /dev/pcaudio 和 /dev/audio 同樣 /dev/pcsp 和 /dev/dsp 一樣 /dev/pcmixer 和 /dev/mixer 一樣 6.2 怎樣播放音效檔案? Sun 工作站的音效檔(.au)可以丟到 /dev/audio 來放出, 原始取樣檔可以丟到 /dev/dsp,雖然這樣一般來說會產生很差的輸出。 使用像 play 這樣的程式比較 好,而且還能辨別音效檔格式, 設定正確的取樣率等。 使用像 wavplay 或 vplay (在 snd-util 套件中)的程式播放 WAV 檔是最好的了 , 然而它們無法辨識 Microsoft ADPCM壓縮過的 WAV 檔。 同時,舊版的 play (在 Lsox 套件中)對 16 位元的 WAV 檔處理得並不好。 在 snd-util 中的 splay 命令如果以手動輸入適切的參數,可以用來播放多數音 效檔。 6.3 怎樣錄製音效檔? 可以從 /dev/audio 或 /dev/dsp 中讀取取樣過的資料, 可以轉向到檔案去。 像 vrec 這樣的程式可以較簡單地控制取樣率及時間等。 您也需要混音器,以便 選擇想要的輸入來源。 6.4 我可以有不只一片音效卡嗎? 現在的音效驅動程式允許您裝好幾片聲霸卡,聲霸卡 Pro,聲霸卡 16,MPU-401 或 MSS 卡。 裝兩片聲霸卡是可能的,不過要手動編輯 local.h, 定 義SB2_BASE,SB2_IRQ,SB2_DMA 及 SB2_DMA2(有些情形下才要)。 也可以同時裝 一片聲霸卡及一片 PAS16。 若是您用make config來設定較新的2.0.x版核心的音效的話,您應該編 輯/usr/include/linux/autoconf.h而非local.h。 您會看到幾行: #define SBC_BASE 0x220 #define SBC_IRQ (5) #define SBC_DMA (1) #define SB_DMA2 (5) #define SB_MPU_BASE 0x0 #define SB_MPU_IRQ (-1) 在它們後面加入幾行(數值依照您的系統設定) #define SB2_BASE 0x330 #define SB2_IRQ (7) #define SB2_DMA (2) #define SB2_DMA2 (2) 以下驅動程式不准您裝多片卡: * GUS (驅動程式限制) * MAD16 (硬體限制) * AudioTrix Pro (硬體限制) * CS4232 (硬體限制) 6.5 音效設備發生錯誤: No such file or directory 您要先建立設備檔。 請參見前面建立設備檔的部份。 如果您確實有設備檔, 檢 查主編號及次編號是否正確。 (一些舊一點的 CD-ROM Linux 安裝套件可能不會 在安裝時建立正確的設備檔) 6.6 音效設備發生錯誤: No such device 您的核心並不支援音效驅動程式,或是I/O位址設定和硬體不一致。 檢查您是否 用新造的 核心開機,並確認其設定和硬體是一致的。 6.7 音效設備發生錯誤: No space left on device 如果您沒有建立必要的設備檔,就把資料丟進 /dev/audio 或 /dev/dsp,就會發 生這種情況。 這時這些"設備檔"其實只是普通檔案, 而且把您的磁碟塞滿了。 您必須照本文件中建立設備檔 這一小節的指引去執行那個命令稿。 在 Linux 2.0 或之後,當設備開啟,系統卻沒有足夠的 RAM 時亦會發生。 對每 個 DMA 通道,音效驅動程式至少需要兩頁 (8K) 連續記憶體區塊。 這種情型在 不足 16M 的 RAM 或已經啟動很久的系統上可能發生。 在再開啟設備檔以前,也 許可以先編譯及執行以下的 C 程式,以空出一些 RAM 出來。 main() { int i; char mem[500000]; for (i = 0; i < 500000; i++) mem[i] = 0; exit(0); } 6.8 音效設備發生錯誤: Device busy 一個音效設備一次只能給一個程序用。 在這問題中, 最可能的情形就是有別的 程序正在使用這個設備。 確定的方法之一是用 fuser 命令: % fuser -v /dev/dsp /dev/dsp: USER PID ACCESS COMMAND tranter 265 f.... tracker 在上例中,fuser 命令顯示 265 號程序開啟了該設備。 可以選擇等它完成或把 它砍掉,這樣音效設備就又能使用了。 您應該以 root 身份執行 fuser 命令, 這樣才會列出除了您以外的使用者。 6.9 還是逃不了'device busy'的錯誤! 根據 Brian Gough 的說法,使用一號 DMA 通道的聲霸卡會和同樣也佔用 DMA 1 的 QIC-02 磁帶機驅動程式相衝,造成 "device busy" 錯誤。 如果您使 用FTAPE, 您可能有加進這個磁帶的驅動程式。 根據 FTAPE-HOWTO,QIC-02 驅 動程式在使用 FTAPE 時不是必要的; 只有 QIC-117 才必要。 重造核心,使用 QIC-117 驅動程式, 取消 QIC-02,這樣 FTAPE 及音效驅動程式就能共存了。 6.10 音效檔放到一半就停了 這種症狀,通常是先播放一秒左右,然後完全停止,或印出 "missing IRQ" 或 "DMA timeout" 訊息。 八成是您的 IRQ 或 DMA 設錯了。 核對一下,您在核心 中 的設定是不是和硬體跳線的一樣,而且並沒有和別的卡相衝。 另一種症狀是聲音一直重覆。 這通常導因於 IRQ 衝突。 6.11 播放 MOD 檔斷斷續續 要播放MOD檔,需要可觀的 CPU 能力。 您可能跑太多程式導致系統反應過慢,無 法及時放音。 有下面幾種解法: * 用較低的取樣率,或只放單聲道 * 把其它執行中程式幹掉 * 買更快的電腦 * 買更強的音效卡(像 Gravis UltraSound) 如果您有用 Gravis UltraSound 音效卡,您應該使用專為 GUS 設計的 MOD 播放 程式 (如 gmod) 6.12 編譯音效軟體時出錯 1.0c版以後和以前的音效驅動程式用完全不同且不相容的 ioctl() 方式。 抓新 版的原始碼,或做必要改變,把它移植到適合新版驅動程式用。 詳見音效驅動程 式的 Readme 檔。 也請確定編譯應用程式時,您使用最新的 soundcard.h 及 ultrasound.h。 請見 本文開頭處裡的安裝指引。 6.13 以前跑很好的軟體,卻出現 SEGV 錯誤 這和上個問題可能是一樣的。 6.14 音效驅動程式有何已知的限制及 bug? 請看核心音效驅動程式裡的檔案。 6.15 關於音效驅動程式的 ioctl 等,哪裡有記載? 目前除原始碼以外最佳的文件在 4Front Technologies 的網站 [36]http://www.opensound.com。 另一個來源是 Linux Multimedia Guide,在 參考文獻那一章有詳述。 6.16 要完全平順地錄放音,需要多強的CPU才能辦到? 這問題不好回答,它取決於: * 使用 PCM 取樣還是 FM 合成 * 取樣率及樣本大小 * 用哪個程式錄放音 * 音效卡硬體 * 磁碟傳輸速率,CPU 時脈頻率,快取大小等 一般來說,任何 386 以上機器應該都可以在 8 位元音效卡上播放音效,或用 FM 合成放音樂。 然而,放 MOD 檔需要可觀的 CPU 資源。 一些實驗性的測量顯示,要以 44KHz 播放, 要消耗一顆 486/50 CPU 的 40% 能力; 386/25 幾乎不可能放比 22KHz 更高的取樣率。 (以8位元音效卡,如聲霸卡,所測得) 一些像 Gravis UltraSound 的卡硬體提供更多功能, 需要的CPU資源就較少。 這些是假設電腦沒有在跑其它耗CPU能力的工作。 如果您的電腦有數學輔助處理器 (或 CPU 內部有 FPU), 用像 sox 這樣的程式 做音效轉換或增加效果會快不少。 雖然核心驅動程式本身是沒有用到浮點運算。 6.17 PAS16 和 Adaptec 1542 SCSI 卡的搭配問題 (以下解釋由seeker@indirect.com提供) Linux 只能認出在 330(預設值)或 334 位址上的 1542,而 PAS 只能將 MPU-401 模擬設在 330。 即使您用軟體消去 MPU-401 功能,如果這硬體還在這 個預設位址上, 仍然會和 1542 相衝。 把 1542 移到 334 就什麼都解決了。 另外,1542 和 PAS-16 都有用到 16 位元 DMA,所以如果您一面以 16 位元 ,44KHz 立體聲錄音,一面將檔案存到掛在 1542 上的硬碟的話,麻煩就來了。 兩組 DMA 會吃同一塊記憶體,導致 RAM 沒有時間充電,然後就會出現致命的 "PARITY ERROR - SYSTEM HALTED" 的訊息,您甚至還來不及知道怎麼當的。 更 糟糕的是有些 QIC-117 磁帶的協力廠商建議設定匯流排開/關時間, 使 1542 佔 匯流排更久。 從 Adaptec 的 BBS 或 Internet 的其它地方抓 SCSISEL.EXE 程 式,減少 BUS ON 時間或增加 BUS OFF 時間,直到這問題完全消失。 SCSISEL 會改變 EEPROM 的設定,所以比在 CONFIG.SYS 中載入的 DOS 驅動程式效力更 持久,開機就直接進 Linux 也有效(不像 DOS 修補程式)。 又解決了一個問題。 最後一個問題 - 舊的 Symphony 晶片組劇烈地降低 I/O 周期時間,加快匯流排 存取。 我所玩過的各種卡中,除了 PAS-16 以外,沒有一片卡在降低周期時有出 現過 任何問題。 Media Vision 的 BBS 有個 SYMPFIX.EXE 可以將 Symphony 的 匯流排控制器的診斷位元互調,治好這種症狀,但這並不能算有力的保證。 您也 許要: * 找主機板經銷商,換掉舊版的晶片 * 換主機板,或 * 買別牌的音效卡。 Young Microsystems 願意以 $30(美金)的代價為他們製的板子升級; 如果您能講 出誰製的或誰進口的板子,別的廠商也可能會這樣(祝您好運)。 據我所知這問題 出於 ProAudio 的匯流排介面晶片; 沒有人會花 $120 買音效卡,然後把它插在 6MHz 的 AT 上。 多數人會升級到 25-40MHz 的 386/486,而如果設計正確, 至 少能承受 12MHz 以上的匯流排頻率。 講完了,下台一鞠躬。 第一個問題和您的主機板晶片組,匯流排速率,及其它 BIOS 設定,還有月亮的 圓缺有關。 (?) 第二個問題牽涉到您的記憶體充電方式 (隱藏式或同步式) ,1542 DMA 頻率及匯流排 I/O 速率(可能有關)。 第三個問題,可以打電話到 Media Vision,問他們哪些 Symphony 晶片組的慢速設計和他們的卡不相容。 在 此警告一下, 我問過的四位"工程師"中,就有三個頭殼壞去。 聽他們講別人的 硬體講得啥一樣, 其實他們甚至連自己的都搞不清楚。 譯注: 這一段可能和原文意思差很多,有建議請不吝提供。 6.18 可不可以同時錄放音? 一些卡的驅動程式能支援這功能。 請看在 4Front Technologies 的網站中的文 件, 了姐如何用它。 6.19 我的聲霸卡 16 是設 IRQ 2,可是驅動程式不准我設這個值 在 '286 及以後的機器,IRQ2 中斷連接了第二個中斷控制器。 它等同於IRQ 9。 6.20 我離開 Linux,起動 DOS,然後有些軟體發聲不正常 這在暖開機進 DOS 後發生。 有時錯誤訊息會誤導您,以為是 CONFIG.SYS 檔哪 裡寫錯了。 多數現在的音效卡有軟體設定的 IRQ 及 DMA 設定。 如果您的卡在 Linux 下及 MSDOS/Windows 下設定值不一樣的話,可能會造成問題。 有些音效卡不准設新參 數, 除非完全 reset。 (如把電源關掉再打開,或使用硬體上的reset鈕) 簡單對付方法就是按下reset鍵,或把開關關了再開,不要用暖開機(即 Ctrl-Alt-Del)。 正解則是確保您在MS-DOS及Linux下都用同樣的IRQ及DMA設定 (或乾脆不要用DOS :-)。 6.21 在 Linux 下跑 DOOM 出問題 想玩 ID software 出的 DOOM 遊戲之 Linux 版的玩家們, 可能對這個有興趣。 要正確的音效輸出,您必需使用 2.90 版或以後的音效驅動程式; 它支援了即時 的 DOOM模式。 音效樣本是16 bit。 如果您用8 bit音效卡,您仍然可以用一些可在 [37]ftp://metalab.unc.edu/pub/Linux/games/doom中找到的一些程式,讓聲音 出現。 如果DOOM動作不流暢,把音效取消(把 sndserver 檔改名)會有一些改進。 DOOM 預設不支援音樂(不像 DOS 版)。 musserver 程式將增加Linux下的 音樂支 援。 它可以在 [38]ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 中找 到。 6.22 怎樣降低音效卡產生的雜音? 用高品質的屏蔽電纜,換個插槽插,可能有助於減低雜音。 如果音效卡有音量調 整鈕,您可以試試不同的設定(最大聲可能最好)。 您可以用混音程式,將不想要 的輸入(如麥克風)調成零增益。 Philipp Braunbeck 報告他的 ESS-1868 音效卡上有個跳線用來關閉內建增益器 的, 如果裝上,能幫助降低雜音。 在一台 386 電腦上,我發現核心命令列有個選項no-hlt可以降低雜訊。 這個選 項叫核心在跑閒置迴圈時不要用 HLT 指令。 您可以開機時手動試試, 或在 LILO 設定檔中加上append="no-hlt" 有些音效卡偷工減料,沒有好的遮蔽及接地,容易產生雜音 6.23 能放音,不能錄音 如果您能放音,卻不能錄音,試試: * 使用混音程式選擇適當來源(如麥克風) * 使用混音程式將該來源的增益調到最大 * 可以的話,在MS-DOS下測試,看看是不是硬體方面的問題 有時錄音及放音用的 DMA 通道是不同的。 這種情況下八成是錄音用 DMA 設定不 對。 6.24 必須先進 DOS 跑驅動程式,不然我的"相容卡"沒法用 多數情況下,"聲霸卡相容" 卡在 Linux 下若捨聲霸卡驅動程式不用而改用 別的 驅動程式,會更好。 多數號稱相容(如 "16 位元 SB Pro 相容" 或 SB 相容的 "16位元")的卡,它的聲霸卡相容模式是提供 DOS 遊戲的相容性所做的。 多數卡 自己的 16 位元模式可能在最近的 Linux(2.0.1以後) 會支援。 只有一些(通常很舊)的卡必須嘗試用聲霸卡模式運作。 新卡中只有一個例外,那 就是用 Mwave為主的卡。 6.25 我的 16 位元聲霸卡相容卡在 Linux 下只能用 8 位元模式 號稱和聲霸卡相容的 16 位元音效卡其實只和 8 位元的聲霸卡 Pro 相容而已。 它們有和聲霸卡 16 不相容的 16 位元模式,和 Linux 音效驅動程式不相容。 也許改用 MAD16 或 MSS/WSS 驅動程式後,您就能用 16 位元模式了。 6.26 在哪裡找得到 Linux 的音效應用軟體? 這裡有一些好的檔案庫,可以搜尋 Linux 專用的音效應用軟體: * [39]ftp://metalab.unc.edu/pub/Linux/kernel/sound/ * [40]ftp://metalab.unc.edu/pub/Linux/apps/sound/ * [41]ftp://tsx-11.mit.edu/pub/linux/packages/sound/ * [42]ftp://nic.funet.fi/pub/OS/Linux/util/sound/ * [43]ftp://nic.funet.fi/pub/OS/Linux/xtra/snd-kit/ * [44]ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound/ 6.27 音效驅動程式可不可以編譯成可載入模組? 最新的核心裡的音效驅動程式可以做成可載入模組。 詳情請參考在 /usr/src/linux/Documentation/sound 裡的檔案, 尤其是 Introduction 及 README.modules。 6.28 我能把主控台的嗶嗶聲改用音效卡發出嗎? 試試oplbeep程式,可在 [45]ftp://metalab.unc.edu/pub/Linux/apps/sound/oplbeep-2.3.tar.gz 中找 到。 另一個變種,叫 beep 程式,可在 [46]ftp://metalab.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tg z 中找到。 modutils 套件有個範例程式及核心修補,支援在核心要求時, 執行外部程式, 產生聲音。 另外在一些音效卡上,您可以將PC喇叭輸出到音效卡上,這樣所有聲音就都由音 效卡 發出來了。 6.29 VoxWare是什麼? 由 4Front Technologies 出售的商業版音效驅動程式以前有像VoxWare, USS(Unix Sound System),甚至TASD(暫且無名的音效驅動程式) 之類名稱。 現 在這個驅動程式的市場上叫 OSS(Open Sound System)。 在 Linux 核心中包含的 有時叫做OSS/Free。 要更多資訊,請上 4Front Technologies 網站 (在 [47]http://www.opensound.com/)。 我在 [48]Linux Journal 1997 年六月號有 寫一篇 對 OSS/Linux 的評論文章。 6.30 Sox/Play/Vplay 回報 "invalid block size 1024" 在 1.3.67 版核心中的改變(錯誤的)使檢查 SNDCTL_DSP_GETBLKSIZE ioctl 是否 傳回大於 4096 的放音軟體失效。 最新的驅動程式已修正,避免配置小於 4096 bytes 的碎塊,解決了舊公用程式的問題。 6.31 我載入音效驅動程式模組後,混音設定就被重設了 您可以將音效驅動程式做成可載入模組,並使用 kerneld 自動載入及除去。 然 而這造成了一個問題 - 當模組重新載入時,混音器 設定又回歸預定的值。 對有 些音效卡來說,這會太大聲(如聲霸卡16)或太小聲。 Markus Gutschke (gutschk@uni-muenster.de)發現了這問題的解決之道,在您的 /etc/conf.modules 檔中加入如下的一行: options sound dma_buffsize=65536 && /usr/bin/setmixer igain 0 ogain 0 vol 75 這會在音效驅動程式載入後立刻執行您的混音程式(在範例中是用 setmixer )。 dma_buffsize 參數沒有意義,但是是必需的,因為這個命令 需要一些命令列的 選項。 把上面那行改成您想要的混音及增益設定值。 如果您將音效驅動程式連進核心,而想在開機後就自動設定音量,您可以在開機 自動執行 檔/etc/rc.d/rc.local中將混音程式加進去。 6.32 只有 root 能錄音 在 Readme.linux 中的命令稿預設會將音效設備檔設成僅有 root 可讀, 這是為 了填補安全上的漏洞。 在網路環境裡, 外面的使用者可以遠端連進有音效卡及 麥克風的Linux系統並竊聽。 如果您不擔心這個,您可以改變這個命令稿中的權 限。 在預設的安裝法,一般使用者仍然可以播放音效檔。 這不會造成安全上的風險, 反而可以省掉很多麻煩。 6.33 在IBM ThinkPad上的音效硬體可以支援嗎? 關於如何在 Linux 下使用 IBM ThinkPad 上的 mwave 音效卡之資訊,可在 /usr/src/linux/Documentation/sound/mwave檔中找到, 它也是核心原始碼的一 部份。 6.34 因為我的音效卡沒有混音器,所以應用程式不讓我用 一些舊的 8 位元聲霸卡沒有混音器電路。 有些音效應用程式要求要能開啟混音 器設備, 在這些卡上就會失效。 Jens Werner ( [49]werner@bert.emv.ing.tu-bs.de 報告了一個解法,把 /dev/mixer 連到 /dev/null後, 一切應該都很好了。 6.35 SB16 CT4170 的問題 以下由 Scott Manley( [50]spm@star.arm.ac.uk)提供: 看起來有一種新的聲霸卡 -- 它以 SB16 的名義賣給我們,該卡的型式是 CT4170。 這玩意只有一組 DMA 通道,所以當您試著設定它時,核心存取 16 位元 DMA 會有麻煩。 解決之道是把第二組 DMA 設成 1,這樣這張卡就和廣 告上講的相符了。 6.36 怎樣將 MIDI keyboard 連接到音效卡上? 以下由 Kim G。 S。 OEyhus ( [51]kim@pvv.ntnu.no)提供: 我到網際網路上以及音效卡文件到處搜尋關於如何把主 keyboard 的 MIDI output 連接到音效卡的 MIDI input 這麼簡單的事的方法,結果我什麼都沒 找到。 問題是它們都使用同一設備,/dev/midi,至少在 OSS 音效系統上是 如此。 所以我找到了一種方法,希望和大家分享。 這樣就造出了一個簡單的 合成器,並有完整 MIDI 支援: 用 MIDI 直接將 MIDI 主 KEYBOARD 連接到音效卡 MIDI 主 keyboard 是一個沒有合成器的 keyboard,上面只有一個 MIDI out 插座。 這可以透過適當的連接線連上音效卡上的 15 pin D-SUB 連接埠。 這個 keyboard 可以用來控制音效卡上的合成設備,做出了一個簡單用 keyboard 控制的合成器。 之後再編譯以下程式,如用 'gcc -o prog prog.c' 並執行它: #include main() { int fil,a; char b[256]; fil=open("/dev/midi",O_RDWR); for(;;) { a=read(fil,b,256); write(fil,b,a); } } 6.37 IRQ 15 以及 Ensoniq PCI 128 之間的問題 以下由 Matthew Inger ( [52]mattinger@mindless.com) 提供: 如何讓 Ensoniq PCI 128 可用的資訊。 這展現的問題是它預設值是用 IRQ 15。(這點 Plug and Pray 得負起責任)。 這個中斷也是第二組 IDE 控制器用到的,而且不能和其它設備共享。 您必須 強迫 es1370 使用其它中斷(就像在 Windows 下可以用 IRQ 11 一樣)。 信不信由你,我自行找到了這問題的解決之道。 我所做的事: a) 在 BIOS 中,您必須告知電腦您沒有 隨插即用 OS,我相信這在我的 BIOS 中的 advanced options 裡。 b) 在 BIOS 中的 PCI 設定,要電腦保留中斷 15 給 ISA設備。 在我的 BIOS,在 Advanced Options 中,有一部份是設定 PCI 的,在那裡可以排除 一些資源不讓 PCI 用,就在那裡設定。 當您重開機進 Linux 後您就能聽到聲音了。 (我不記得它是不是照常顯示開 機訊息了) 為安全起見,我再執行一遍 sndconfig,它會放出測試音效,聽起 來不怎麼樣, 但它發出聲音了。 然而我放 CD 時,聽起來真是棒極了。 Windows 那邊就甭擔心了,我試了兩張卡,一張是 ISA Modem,另一張是音效 卡, 兩個都運行無礙。 您的 BIOS 和我的可能不同,不過您只要搞清楚前面講的兩個設定在哪就好。 祝好運。 6.38 我在哪兒可以抓到可自由散布的 MIDI patch,來給 SoftOSS 使用? SoftOSS 是和 Gravis UltraSound 卡相容, 包含在核心音效驅動程式的軟體波 形表合成器(也可以說是軟體音源)。 要使用這個驅動程式,需要 GUS 相容的 MIDI patch 檔。 文件上的說法是 "public domain MIDIA patchset available from several ftp sites" (公開的 MIDIA patch 集可在幾個 ftp 站找到) 如同 4Front Technologies 網站上說的( [53]http://www.opensound.com/softoss.html),它們可在 [54]ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz 下載。 7. 參考文獻 如果您有片支援 CD-ROM 或 SCSI 介面的音效卡,參閱 [55]SCSI HOWTO 以及 Linux [56]CD-ROM HOWTO 可能可以給您更多有用的資訊。 (譯注: CDROM HOWTO 中文版在 [57]http://www.linux.org.tw/CLDP/CDROM-HOWTO.html) [58]Sound Playing HOWTO 則對如何在Linux下播放各種不同的音效及音樂檔有所 介紹。 (譯注: 中文版在 [59]http://www.linux.org.tw/CLDP/Sound-Playing-HOWTO.html) [60]Linux SoundBlaster AWE32/64 Mini-HOWTO描述如何在 Linux 下使用聲霸卡 32 或 64。 (譯注: 中文版在 [61]http://www.linux.org.tw/CLDP/mini/Soundblaster-AWE.html) 程式設計資訊可由 4Front Technologies 網站 [62]http://www.opensound.com/pguide取得。 以下的FAQ定期張貼於Usenet討論區 [63]news.announce 以及檔案庫 [64]ftp://rtfm.mit.edu/pub/usenet/news.answers中: * PCsoundcards/generic-faq (Generic PC Soundcard FAQ) * PCsoundcards/soundcard-faq (comp.sys.ibm.pc.soundcard FAQ) * PCsoundcards/gravis-ultrasound/faq (Gravis UltraSound FAQ) * audio-fmts/part1 (Audio file format descriptions) * audio-fmts/part2 (Audio file format descriptions) 這些FAQ也列出一些和產品相關的通信論壇及檔案庫。 以下的Usenet討論區主要 討論音效及 音樂相關的題材: * [65]alt.binaries.sounds.* (張貼音效檔,很多群組) * [66]alt.binaries.multimedia (張貼多媒體檔案用) * [67]alt.sb.programmer (和聲霸卡程式設計有關) * [68]comp.multimedia (多媒體專題) * [69]comp.music (電腦音樂理論及研究) * [70]comp.sys.ibm.pc.soundcard.* (各種IBM PC音效卡的群組) 在 [71]http://viswiz.gmd.de/MultimediaInfo/有個多媒體 專門站台。 Creative Labs 的網站則在 [72]http://www.creaf.com/。 MediaTrix 的網站在 [73]http://www.mediatrix.com/ Linux通信論壇有許多關於不同主題(包括音效)的頻道。 想知道如何參加, 寄一 封內容為 "help" 的信到 [74]majordomo@vger.rutgers.edu。 最好不要用它來 問如何設定音效卡這類問題, 它們是為開發者討論用的。 前面提過好幾次了,音效驅動程式包含很多Readme檔, 裡面有很多和驅動程式相 關的資訊。 它們常常放在 /usr/src/linux/drivers/sound目錄裡。 在4Front Technologies網站 [75]http://www.opensound.com/ 上,可以看到 Linux 及其它 Unix 相容作業系統用的商業版音效驅動程式OSS的資訊。 Linux Software Map是搜索Linux軟體的極佳參考。 用關鍵字像 sound 搜尋 LSM 是識別關於音效硬體的應用程式之好辦法。 LSM 可在很多匿名檔案庫,包括 [76]ftp://metalab.unc.edu/pub/Linux/docs/LSM/(先前名為 sunsite) 中找到 。 也有些網站維護 Linux 應用程式的資料庫, [77]http://www.freshmeat.net 是其中之一。 Linux 文件計畫(LDP)製作了好幾本 Linux 的書,包括 Linux Installation and Getting Started。 這些可從主要的 Linux FTP 檔案庫免費取得,或是花錢 買硬拷貝型式的文件。 最後呢,雖然有些老王賣瓜之嫌,不過還是容我在此打打小廣告: 如果您想學學 更多關於在 Linux 下的多媒體 (特別是關於 CD-ROM 及音效卡應用及程式設計 的),到書店找找我編著的 Linux Multimedia Guide,ISBN 1-56592-219-0,由 O'Reilly and Associates 公司出版。 除了原始的英文版外, 法文版和日文版 也正付印中。 若在北美洲,請電 800-998-9938。 或是光顧以下站台: [78]http://www.ora.com/catalog/multilinux/noframes.html 或本人的網址 [79]http://www.pobox.com/~tranter/ References 1. mailto:jeff_tranter@pobox.com 2. mailto:yorkwu@ms4.hinet.net 3. mailto:hannu@voxware.pp.fi 4. ftp://metalab.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz 5. news:comp.os.linux.answers 6. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/ 7. http://metalab.unc.edu/LDP/ 8. http://www.linux.org.tw/CLDP/Sound-HOWTO.html 9. http://www.freenix.org/unix/linux/HOWTO/ 10. http://yebisu.ics.es.osaka-u.ac.jp/linux/ 11. http://kldp.linux-kr.org/HOWTO/html/Sound/Sound-HOWTO.html 12. http://www.phtd.tpu.edu.ru/~ott/russian/linux/howto-rus/Sound-HOWTO.html 13. ftp://ftp.insflug.org/es 14. http://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 15. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/translations/ 16. mailto:jeff_tranter@pobox.com 17. mailto:yorkwu@ms4.hinet.net 18. mailto:linux-howto@metalab.unc.edu 19. http://metalab.unc.edu/LDP/COPYRIGHT.html 20. http://sunsite.unc.edu/LDP/COPYRIGHT.html 21. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/unmaintained/SCSI-HOWTO 22. http://metalab.unc.edu/LDP/HOWTO/CDROM-HOWTO.html 23. http://www.linux.org.tw/CLDP/CDROM-HOWTO.html 24. http://www.opensound.com/ 25. http://www.alsa-project.org/ 26. mailto:mum@mmk.e-technik.tu-muenchen.de 27. http://www.cs.colorado.edu/~mccreary/tbeach 28. mailto:burgaard@daimi.aau.dk 29. ftp://metalab.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz 30. ftp://ftp.infomatik.hu-berlin.de/pub/os/linux/hu-sound/ 31. http://www.redhat.com/ 32. http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html 33. http://www.linux.org.tw/CLDP/Kernel-HOWTO.html 34. ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z 35. http://www.altavista.digital.com/ 36. http://www.opensound.com/ 37. ftp://metalab.unc.edu/pub/Linux/games/doom 38. ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz 39. ftp://metalab.unc.edu/pub/Linux/kernel/sound/ 40. ftp://metalab.unc.edu/pub/Linux/apps/sound/ 41. ftp://tsx-11.mit.edu/pub/linux/packages/sound/ 42. ftp://nic.funet.fi/pub/OS/Linux/util/sound/ 43. ftp://nic.funet.fi/pub/OS/Linux/xtra/snd-kit/ 44. ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound/ 45. ftp://metalab.unc.edu/pub/Linux/apps/sound/oplbeep-2.3.tar.gz 46. ftp://metalab.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz 47. http://www.opensound.com/ 48. http://www.ssc.com/lj/ 49. mailto:werner@bert.emv.ing.tu-bs.de 50. mailto:spm@star.arm.ac.uk 51. mailto:kim@pvv.ntnu.no 52. mailto:mattinger@mindless.com 53. http://www.opensound.com/softoss.html 54. ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz 55. ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/unmaintained/SCSI-HOWTO 56. http://metalab.unc.edu/LDP/HOWTO/CDROM-HOWTO.html 57. http://www.linux.org.tw/CLDP/CDROM-HOWTO.html 58. http://metalab.unc.edu/LDP/HOWTO/Sound-Playing-HOWTO.html 59. http://www.linux.org.tw/CLDP/Sound-Playing-HOWTO.html 60. http://metalab.unc.edu/LDP/HOWTO/mini/Soundblaster-AWE.html 61. http://www.linux.org.tw/CLDP/mini/Soundblaster-AWE.html 62. http://www.opensound.com/pguide 63. news:news.announce 64. ftp://rtfm.mit.edu/pub/usenet/news.answers 65. news:alt.binaries.sounds 66. news:alt.binaries.multimedia 67. news:alt.sb.programmer 68. news:comp.multimedia 69. news:comp.music 70. news:comp.sys.ibm.pc.soundcard 71. http://viswiz.gmd.de/MultimediaInfo/ 72. http://www.creaf.com/ 73. http://www.mediatrix.com/ 74. mailto:majordomo@vger.rutgers.edu 75. http://www.opensound.com/ 76. ftp://metalab.unc.edu/pub/Linux/docs/LSM/ 77. http://www.freshmeat.net/ 78. http://www.ora.com/catalog/multilinux/noframes.html 79. http://www.pobox.com/~tranter/