Advanced Linux Sound Architecture/トラブルシューティング
メインの記事は Advanced Linux Sound Architecture を見て下さい。
目次
ボリューム
No output
If speaker-test
produces sound but some other program does not, determine whether PulseAudio is being used:
# fuser -v /dev/snd/*
If it is, try using apulseAUR, as described in Advanced Linux Sound Architecture#PulseAudio compatibility. Alternatively, killing the PulseAudio process may cause sound to start working in the desired process.
再起動後にミュートになる
次のコマンドを実行してみてください:
# alsactl restore
問題が解決しない場合、alsamixer の Auto-Mute
トグルの状態を確認してください: Enabled
を Disabled
にしてください。
ボリュームが小さすぎる
alsamixer を起動してスライダーの値を増やしたり、必要に応じてチャンネルのミュートを解除してください。スライダーが沢山ある場合、右側にスライダーが隠れている可能性があります。
全てのスライダーを最大にしても、ボリュームが小さすぎる場合、以下の スクリプト を実行することでコーデックの設定をリセットできます:
$ wget http://www.alsa-project.org/hda-analyzer.py $ su -c 'python2 hda-analyzer.py'
このスクリプトでは /usr/bin/python
が Python 2 を指すことになっていますが、Arch では Python 3 です。問題を回避するために以下のコマンドを実行してください:
$ sed -i 's/python %s/python2 %s/' hda-analyzer_run.py
アナライザを閉じて、コーデックをリセットするかどうかのプロンプトが表示されたら、"yes" と答えて下さい。
それでもボリュームが小さい場合、alsamixer をもう一度起動してください: コーデックのリセットによって新しいスライダーが現れることがあります。
音が小さい
スピーカーやヘッドフォンの音量を最大にしても音が小さいならば、softvol プラグインを試すことができます。以下を /etc/asound.conf
に加えて下さい:
pcm.!default { type plug slave.pcm "softvol" } pcm.softvol { type softvol slave { pcm "dmix" } control { name "Pre-Amp" card 0 } min_dB -5.0 max_dB 20.0 resolution 6 }
正しくロードされた後、alsamixer の Pre-Amp
セクションを見て下さい。このセクションでボリュームを調節できます。
起動時にランダムで音が出なくなる
speaker-test
を実行することで音のテストができます。音が出ない場合、以下のようなエラーメッセージが表示されるはずです:
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave Playback open error: -16 Device or resource busy
ランダムで音が出なくなる場合、あなたのシステムに複数のサウンドカードが存在するのが理由かもしれません。起動時にサウンドカードの順番が変わっている可能性があります。この場合は、デフォルトのサウンドカードを設定してみてください。
mpd を使っていて上記の設定が動かないときは、こちらを読んで下さい 。
マイクロフォン
マイクが入らない
alsamixer で、録音のところの全てのボリュームレベルが上がっているか、そしてマイク (例: Mic, Internal Mic) の CAPTURE が有効になっているか確認してください (alsamixer で、アイテムを選択してスペースを押して下さい)。Mic Boost を使ったり Capture や Digital レベルを高くしてみて下さい。音が悪くなるかもしれませんが、何か聞こえたら後で元に戻すことができます。
alsamixer では pulseaudio ラッパーは "default" と表示されるので、実際のサウンドカードを選ぶためにまず F6 を押す必要があるかもしれません。また、再生セクションの Line-in を有効にしたり上げたりもしてみて下さい。
マイクをテストするには、以下のコマンドを実行してください (詳しくは arecord の man ページを見て下さい):
$ arecord -d 5 test-mic.wav $ aplay test-mic.wav
全てが上手くいかないときは、他のデバイスを使ってマイクのテストを行い、ハードウェアに問題がないか確認してください。
コンピュータによっては、マイクロフォン (MM) のミュートをするとスピーカーにすぐには入力が行かないことがあります。入力は受信されています。
Dell のノートパソコンの多くは /etc/modprobe.d/modprobe.conf
のモデル名に "-dmic" を加えることを必要とします:
options snd-hda-intel model=dell-m6-dmic
プログラムによってはメインの入力ソフトウェアとして OSS を使おうとすることがあります。snd_pcm_oss
, snd_mixer_oss
, snd_seq_oss
カーネルモジュールを以前有効にしている場合 (デフォルトではロードされません)、アンロードしてみて下さい。
参照:
デフォルトのマイク・キャプチャデバイスの設定
アプリケーションによってはキャプチャデバイスを変更するオプションがないことがあります (Pidgin, Adobe Flash)。内蔵のサウンドカード以外にマイクロフォンがある場合 (例: USB webcam や microphone) これが問題になるでしょう。デフォルトのキャプチャデバイスを変更するには、デフォルトの playback device を変えて下さい。~/.asoundrc
ファイルを以下のように変更します:
pcm.usb { type hw card U0x46d0x81d } pcm.!default { type asym playback.pcm { type plug slave.pcm "dmix" } capture.pcm { type plug slave.pcm "usb" } }
"U0x46d0x81d" は ALSA のキャプチャデバイスのカード名に置き換えてください。arecord -L
を使ってALSA によって検知されている全てのキャプチャデバイスを一覧できます。
内蔵マイクが動作しない
まず alsamixer で録音のボリュームレベルを全て上げてあるか確認してください。オプションを /etc/sound.conf に追加して、snd-* モジュールをリロードすると内蔵マイクの Capture
という新しいボリューム設定が作られることがあります。例えば、snd-hda-inter の場合:
options snd-hda-intel enable_msi=1
それからモジュールをリロードして、Capture の録音ボリュームを上げてください。
# rmmod snd-hda-intel && modprobe snd-hda-intel
マイクにパチパチという音が乗る
マイクロフォンからパチパチというノイズやポップノイズが出ていて、ALSA の設定やマイクジャックの掃除で問題が解決しない場合、次の行を /etc/modprobe.d/modprobe.conf
に追加してみて下さい:
options snd-hda-intel model=MODEL position_fix=3
このオプションは Alsa のノイズを修正しますが、pulseaudio に問題を発生させます。Pulse がこの設定を問題なく使えるようにするには、/etc/pulse/default.pa
内で次の行を探して:
load-module module-udev-detect
以下のように変更してください:
load-module module-udev-detect tsched=0
カーネルドキュメントの DMA-Position Problem を参照してください。
音質
ミニジャック (ヘッドフォンコネクタ) で音が割れる
同時出力のヒントを見て同時出力を設定した場合、ヘッドフォンや外付けスピーカーで音が割れることがあります。この問題は Mic アイテムをミュートにしたりボリュームを 0% に設定することで解決します。alsamixer
または amixer
を使って下さい:
$ amixer sset "Mic" 0% $ amixer sset "Mic" mute
サスペンドから復帰した後にポップノイズが鳴る
休止状態から復帰したときにポップノイズが聞こえることがあるかもしれません。/etc/pm/sleep.d/90alsa
を編集して aplay -d 1 /dev/zero
と書かれた行を削除することで直せます。
USB デバイスで音割れする
USB デバイスで音割れが起こるときは、snd-usb-audio
を調整してレイテンシを下げることを試すことができます。
以下を /etc/modprobe.d/modprobe.conf
に加えて下さい:
options snd-usb-audio nrpacks=1
ソース: http://alsa.opensrc.org/Usb-audio#Tuning_USB_devices_for_minimal_latencies
サウンドの品質が悪い
サウンドの質が悪いときは、(alsamixer で) PCM ボリュームの値をゲインが 0 になるようにしてみてください。
snd-usb-audio ドライバーがロードされている場合、/etc/asound.conf
ファイルで softvol
を有効にすることができます。最初のオーディオデバイスの設定例:
pcm.!default { type plug slave.pcm "softvol" } pcm.dmixer { type dmix ipc_key 1024 slave { pcm "hw:0" period_time 0 period_size 4096 buffer_size 131072 rate 50000 } bindings { 0 0 1 1 } } pcm.dsnooper { type dsnoop ipc_key 1024 slave { pcm "hw:0" channels 2 period_time 0 period_size 4096 buffer_size 131072 rate 50000 } bindings { 0 0 1 1 } } pcm.softvol { type softvol slave { pcm "dmixer" } control { name "Master" card 0 } } ctl.!default { type hw card 0 } ctl.softvol { type hw card 0 } ctl.dmixer { type hw card 0 }
再生を開始・停止するとポップノイズが鳴る
モジュールにはサウンドカードが使われていない時、その電源を落とすものがあります (例えば snd_ac97_codec と snd_hda_intel)。サウンドカードの電源が入ったり落とされる時にノイズ(ポップ・クリック・スクラッチ)が出ることがあります。これはボリュームスライダーを動かしたり、ウィンドウを開閉することでも (KDE4) 起きることがあります。これが気になる時は、modinfo snd_MY_MODULE
でパワーオフ機能を調整・無効にするモジュールオプションを使って下さい。
例: パワーセーブモードを無効化してスピーカーからポップ音が鳴るのを止めるには、snd_hda_intel を /etc/modprobe.d/modprobe.conf
に追加します:
options snd_hda_intel power_save=0
もしくは:
options snd_hda_intel power_save=0 power_save_controller=N
また、modprobe snd_hda_intel power_save=0
で試すこともできます。
これを機能させるために 'Line' ALSA チャンネルのミュートを解除する必要もあるかもしれません。値は何でも結構です ('0' 以外なら)。
例: オンボードの VIA VT1708S (snd_hda_intel モジュールを使います) では 'power_save' が 0 に設定されていてもノイズが発生します。'Line' チャンネルをアンミュートして値を '1' に設定することで問題は解決します。
参照: https://www.kernel.org/doc/Documentation/sound/alsa/powersave.txt
ノートパソコンを使っているのなら、/etc/modprobe.d
で省電力モードを無効にしていても、電源をバッテリーに移行した時に pm-utils によって power_save
が 1 に戻されてしまうことがあります。変更を行うスクリプトを無効にして pm-utils にこれを止めさせて下さい (詳しくは Pm-utils#Disabling_a_hook を参照):
# touch /etc/pm/power.d/intel-audio-powersave
動的周波数スケーリングを使っていると音が飛ぶ
ALSA ドライバとチップセットの組み合わせによっては、ondemand
や conservative
などの dynamic frequency scaling governor を一緒に使った時に全てのソースの音声が飛ぶ問題が起こることがあります。今の所、解決法は performance
governor に切り替えることです。
詳細は CPU 周波数スケーリング を参照してください。
ハードウェアとカード
カーネルをアップデートした後に 'Unknown hardware' エラーが出る
カーネルのアップデート後に ALSA を起動すると以下のメッセージが表示されることがあります:
Unknown hardware "foo" "bar" ... Hardware is initialized using a guess method /usr/bin/alsactl: set_control:nnnn:failed to obtain info for control #mm (No such file or directory)
または:
Found hardware: "HDA-Intel" "VIA VT1705" "HDA:11064397,18490397,00100000" "0x1849" "0x0397" Hardware is initialized using a generic method /usr/bin/alsactl: set_control:1328: failed to obtain info for control #1 (No such file or directory) /usr/bin/alsactl: set_control:1328: failed to obtain info for control #2 (No such file or directory) /usr/bin/alsactl: set_control:1328: failed to obtain info for control #25 (No such file or directory) /usr/bin/alsactl: set_control:1328: failed to obtain info for control #26 (No such file or directory)
(root で) ALSA ミキサーの設定をもう一度保存してください:
# alsactl -f /var/lib/alsa/asound.state store
alsamixer で ALSA の設定をもう一度する必要があるかもしれません。
オーディオピンのマッピングが間違っている
オーディオピン(プラグ)のマッピングが一致していないのに ALSA が問題なく動いている場合、HDA Analyzer を試してみて下さい -- HD オーディオコントロールの pyGTK2 GUI で ALSA wiki にあります。 PIN ノードの Widget Control セクションを調整して、マイクロフォンの IN とヘッドフォンジャックの OUT を作ってみて下さい。Config Defaults の見出しを参照すると良いでしょう。
S/PDIF から出力できない
モジュールをロードして alsamixer でミュートを解除してもマザーボード・サウンドカードのオプティカル・コアキシャルのデジタル出力ができない場合、root で次を実行してください:
# iecset audio on
再起動後にまた出力できなくなるときはこのコマンドを systemd サービスに入れることができます。
PC スピーカーが衝突する
全てのミュートを解除していて、ドライバーが適切にインストールされていて、ボリュームもちゃんと上がっていて、それでも何も聞こえない場合、次の行を /etc/modprobe.d/modprobe.conf
に追加してみて下さい:
options snd-NAME-OF-MODULE ac97_quirk=0
上記の修正は via82xx
でも機能することが確認されています。
options snd-NAME-OF-MODULE ac97_quirk=1
上記の修正は snd_intel8x0
でも機能することが報告されています。
HP TX2500
以下の2行を /etc/modprobe.d/modprobe.conf
に加えて下さい:
options snd-cmipci mpu_port=0x330 fm_port=0x388 options snd-hda-intel index=0 model=toshiba position_fix=1
options snd-hda-intel model=hp (tx2000cto の場合)
S/PDIF ビデオカードをインストールすると音が出ない
モジュールとその順番を調べて下さい:
$ cat /proc/asound/modules 0 snd_hda_intel 1 snd_ca0106
/etc/modprobe.d/modprobe.conf
で不要なビデオカードのオーディオコーデックを無効化します:
# /etc/modprobe.d/modprobe.conf # install snd_hda_intel /bin/false
両方のデバイスが同じモジュールを使っている場合、snd-hda-intel モジュールの *enable* パラメータを使うことができます。boolean の配列でサウンドカードを有効・無効にすることが可能です。
例:
options snd-hda-intel enable=1,0
次のコマンドでカードのリストが取得できます:
cat /proc/asound/cards
サウンドカードのモデル設定が間違っている
Alsa は BIOS を通してサウンドカードを検知していますが、時々 Alsa が モデルのタイプ を認識できなくなることがあります。サウンドカードのチップは alsamixer
で見ることができ (例: ALC662) モデルは /etc/modprobe.d/modprobe.conf
や /etc/modprobe.d/sound.conf
で設定することができます。例えば:
options snd-hda-intel model=MODEL
他のモデルの設定も存在します。ほとんどの場合 Alsa のデフォルトが実行します。あなたのサウンドカードに合わせた設定を見たい場合は、Alsa Soundcard List からあなたのモデルを探して、Details をクリックして、"Setting up modprobe..." セクションを見て下さい。/etc/modprobe.d/modprobe.conf
にそれらの値を入力してください。例えば、Intel AC97 オーディオならば:
# ALSA portion alias char-major-116 snd alias snd-card-0 snd-intel8x0 # module options should go here # OSS/Free portion alias char-major-14 soundcore alias sound-slot-0 snd-card-0 # card #1 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss
Intel オンボードサウンド
オンボードの Intel サウンドカードで音が出ない
ロードされた2つのモジュール、snd_intel8x0
と snd_intel8x0m
が衝突しているのかもしれません。この場合、snd_intel8x0m をブラックリストに入れてください:
/etc/modprobe.d/modprobe.conf
blacklist snd_intel8x0m
alsamixer
や amixer
で "External Amplifier" をミュートにすることが問題を解決することもあります。the ALSA wiki を見て下さい。
また、ミキサーで "Mix" 設定をアンミュートすることによって音が鳴るかもしれません。
オンボードの Intel サウンドカードでヘッドホンの音が出ない
ラップトップの Intel Corporation 82801 I (ICH9 Family) HD Audio Controller では、次の行を modprobe か sound.conf に加える必要があるかもしれません:
options snd-hda-intel model=model
model は以下の内どれかになります (この順番で動作しやすいはずです):
- dell-vostro
- olpc-xo-1_5
- laptop
- dell-m6
- laptop-hpsense
カーネルドキュメントで利用できる全てのモデルを見ることができます。例えば ここ、ただしあなたの使っているカーネルのバージョンとドキュメントのバージョンが正しいかを確認してください。
利用できるモデルの一覧は ここ にもあります。あなたの使っているチップの名前を知るには次のコマンドを実行してください (* はあなたのファイルにあわせて修正してください)。チップによっては名前が変わっておりファイルのモデル名と一致しないことがあるので注意してください。
$ grep Codec /proc/asound/card*/codec*
これを選ぶと入力デバイス (内蔵・外付マイク) が全て動作しなくなることが十分あるので注意してください、それがヘッドフォンかマイクです。バグによる影響があるときは ALSA に報告してください。
またビープの動作に問題がある場合は (pcspkr):
options snd-hda-intel model=$model enable=1 index=0
HDMI
HDMI から出力できない
以下で説明している方法を使って HDMI オーディオをテストすることができます。進む前に、alsamixer
でアウトプットが有効・アンミュートされているか確認してください。
HDMI ケーブルで PC をディスプレイに接続して xrandr
や arandr
などのツールを使ってディスプレイを有効にしてください。例えば:
$ xrandr # list outputs $ xrandr --output DVI-D_1 --mode 1024x768 --right-of PANEL # enable output
aplay -l
を使ってカードとデバイス番号を取得してください。例えば:
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: SB [HDA ATI SB], device 0: ALC892 Analog [ALC892 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: SB [HDA ATI SB], device 1: ALC892 Digital [ALC892 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0
デバイスに音声を送って下さい。上の例に従って、カード 1 デバイス 3 に音を送ることにします:
$ aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Center.wav
aplay がエラーを出力しないのに、音が聞こえない場合、モニタや TV を"再起動"してください。HDMI インターフェイスは接続時にハンドシェイクを実行するので、埋め込まれたオーディオストリームがなかったり、オーディオデコードが無効化されていることに先に気づきます。特に、スタンドアロンのウィンドウマネージャを使っている場合、HDMI ケーブルを差し込む最中になんらかの音を再生しておく必要があります。
mplay や他のアプリケーションが音声出力に特別な HDMI デバイスを使うように設定することもできます。しかしながら flashplugin はデフォルトのデバイスしか使いません。以下の方法でデフォルトのデバイスを上書きすることができます。ただし TV を HDMI ポートから切断したときは変更を戻す必要があります。
テストが成功したら、~/.asoundrc
ファイルを作成・編集して HDMI をデフォルトのオーディオデバイスに設定してください。
~/.asoundrc
pcm.!default { type hw card 0 device 3 }
もしくは上の設定が機能しない場合:
~/.asoundrc
defaults.pcm.card 0 defaults.pcm.device 3 defaults.ctl.card 0
HDMI からマルチチャンネル PCM が出力できない (Intel Gfx)
Linux 3.1 現在、インテルのカード (Intel Eaglelake, IbexPeak/Ironlake,SandyBridge/CougarPoint, IvyBridge/PantherPoint) での HDMI からのマルチチャンネル PCM の出力はサポートされていません。Linux 3.2 でサポートが追加される予定です。Linux 3.1 で出力できるようにするには以下のパッチを適用する必要があります:
アプリケーション
SDL: SDL アプリケーションで音が鳴らない
SDL では音が鳴らずアプリケーションで ALSA を選べない場合、SDL_AUDIODRIVER 環境変数を alsa に設定してみてください。
# export SDL_AUDIODRIVER=alsa
VirtualBox: 仮想マシンで音が鳴らない
virtualbox で問題が起こっているのなら、次のコマンドが役に立つかもしれません:
$ alsactl init
Found hardware: "ICH" "SigmaTel STAC9700,83,84" "AC97a:83847600" "0x8086" "0x0000" Hardware is initialized using a generic method
またオーディオソフトウェアで ALSA 出力を有効にする必要があるかもしれません。
他のプログラム
XMMS や Mplayer など固有のオーディオ設定を使うプログラムには、それぞれ指定のオプションを設定してやってください。
MPlayer では、設定ファイルを開き以下の行を追加してください:
ao=alsa
mpv でも同じ行を設定ファイルのどれか一つに追加してください。
XMMS/Beep Media Player では、オプションからサウンドドライバを Alsa に設定してください。
XMMS では:
- XMMS を起動
- Options -> preferences
- Alsa プラグインを選択
ALSA 出力をサポートしていないアプリケーションでは、alsa-oss パッケージの aoss を使うことができます。aoss を使うには、プログラムを起動するときに aoss
を前に付けて下さい、例:
aoss realplay
pcm.!default{ ... } が動かない場合、次が使えるかもしれません:
pcm.default pcm.dmixer
その他の問題
同時再生問題
同時再生問題が起こっていて、(GNOME によって) PulseAudio がインストールされているのなら、それは PulseAudio のデフォルトの設定がサウンドカードを"ハイジャック"するようにセットされているためです。ALSA のユーザーの中には PulseAudio は使いたくなく、全て ALSA で設定したいという人もいるかもしれません。/etc/asound.conf
を編集して以下の行をコメントアウトして修正することができます:
# Use PulseAudio by default #pcm.!default { # type pulse # fallback "sysdefault" # hint { # show on # description "Default ALSA Output (currently PulseAudio Sound Server)" # } #}
以下をコメントアウトすることでも可能です:
#ctl.!default { # type pulse # fallback "sysdefault" #}
以上は PulseAudio を完全にアンインストールするよりもずっとシンプルな解決方法になります。
下は動作する /etc/asound.conf
のサンプルです:
pcm.dmixer { type dmix ipc_key 1024 ipc_key_add_uid 0 ipc_perm 0660 } pcm.dsp { type plug slave.pcm "dmix" }
一度に複数のユーザーが使えない問題
dmixer を使えるのは一度にたったひとりのユーザーだけです。これはほとんどの人にとっては問題ありませんが、mpd を違うユーザーで動作させている人にとっては問題になります。mpd が再生中の時、一般ユーザーは dmixer を使ってサウンドを再生できなくなってしまいます。同じユーザーで mpd を実行する以外にも解決方法は存在します。ipc_key_add_uid 0
を pcm.dmixer
に追加するとロックが無効になります。以下は asound.conf
のスニペットです、他の部分への変更はありません。
... pcm.dmixer { type dmix ipc_key 1024 ipc_key_add_uid 0 ipc_perm 0660 slave { ...