スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

複数のサウンドデバイスがあるときの優先順位の変更

*2012年07月15日追記 GNOME3ではもっと楽なやり方があります。こちらへどうぞ

音楽好きなあなたなら、一度はジュークボックスに憧れたでしょう。はじめて行ったビレッジバンガードに置いてあった「手を触れないでください」の貼紙のついた冷蔵庫ほども大きさのあるジュークボックス…ああ何と艶かしいその姿…何と甘美な響き…都会へ出てきてもう何年、ビレッジバンガードなんかもう飽きるほどに足を運びましたが、あの時の感動は今も忘れません。

しかし時は流れ現在、きっと音楽好きはパソコンをジュークボックス代わりにしていますよね。ええ、いい時代になったものです。ただ、パソコンの音は大抵悪いのが現実。アンプ・スピーカーはいいものを繋げば良いとして、問題は音を作り出す部分ですよ。その部分の音が悪ければ、いくらアンプやスピーカーの原音再現度が如何に高かろうと、悪い音やノイズを再現度高く再生してしまうだけなんでね。

で、いいサウンドカードを買ってきて取り付けるわけですよ。ただそのままだと既存のサウンドデバイスと競合するため、新しいサウンドカードだけを有効にして他を無効にする作業が必要になります。

オンボードのサウンドデバイスはBIOSで無効にできますな。今まで使っていたサウンドカードがあればそれを引っこ抜けばいい。Windowsだったらばデバイスドライバ設定画面から無効にすることもできました。…Linuxは、Debianはどうしたら良いんだ?etchまでは

# alsaconf

というコマンドを打つとウィザード的な設定ツールが立ち上がるので、画面の指示に従って有効にしたいサウンドデバイスを選択すればよかったのですが…それがなぜかlennyからできなくなり。まあいい。BIOSでオンボードは殺せるし、後付のサウンドカードは使わないなら引っこ抜けばいい。…と思っていた。



ビデオカードを付け替えたあたりからどうも音が出たり出なかったりするようになったんです。なぜか起動する度に調子が変わるようで、全く調子の良い時もあれば、全く音が出ない時もある、アプリケーションによって出たり出なかったりが違う時もあったり。で、よくよく考えてみたら新しくつけたビデオカードにはHDMI出力端子がついているわけで。HDMI出力には音声も乗せられるわけですから、これが原因か?

しかし、オンボードはBIOSで無効に、USB・PCIは引っこ抜ける…こいつはどうする?引っこ抜こうったって、ビデオ出力は必要だし、HDMIに一本化するか?ウチにはHDMIに対応するアンプはないし、だいたいウチのディスプレイはDVIだ。

んで、色々と検索。すると。 サウンドデバイス関連(Hardy Heron編) この様なページを発見。

オーディオデバイスの認識順序を固定する
Linuxではサウンドカードが複数接続されていると、起動するたびに認識順序がコロコロと変わるようになっている


んー、臭いぞ。きっとこれじゃないか。これはUbuntuの解説ですが、UbuntuとDebianは似たようなディストリビューション、ちょっとやってみましょ。

$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_via82xx
2 snd_ice1724

snd_ice1724ってのが俺の使いたいPCIサウンドカードであるAUDIOTRAK PRODIGY HD2、snd_via82xxってのがオンボードのサウンドデバイスであるはず(BIOSで無効にしたはずだが、なぜOSから見えているのかは不明)。0に来ているやつは全く見慣れないやつだ。サウンドデバイスを三つも繋げた覚えはないし、"hd"とあるところがいかにもHDMIくさい。同じ/proc/asoundディレクトリ内にcardsというファイルがあったのでこれも覗いてみると。

0 [HDMI ]: HDA-Intel - HDA ATI HDMI
HDA ATI HDMI at 0xde800000 irq 17
1 [V8237 ]: VIA8237 - VIA 8237
VIA 8237 with AD1980 at 0xe000, irq 22
2 [ICE1724 ]: ICE1724 - ICEnsemble ICE1724
ICEnsemble ICE1724 at 0xb400, irq 19

はい、こいつがHDMIであることがハッキリいたしました。現状、このHDMIのサウンドが最優先されているということらしいので、最優先をICE1724にして、しかも固定してしまいたい。

先ほどのページによると、/etc/modprobe.d/soundに

options デバイス名 index=認識させたい順番
options デバイス名 index=認識させたい順番

こう書けば良いとのこと。デバイス名は/proc/asound/modulesにあった名前で、優先順位は0、1、、、と書くか、それでうまくいかなければ1、2、、、と書くとのこと。というわけで実践。

# vi /etc/modprobe.d/sound
options snd_ice1724 index=0
options snd_via82xx index=1
options snd_hda_intel index=2

うむ、HDMI対応の高品質なオーディオアンプとディスプレイを買うまでHDMI音声出力には眠ってもらう。まあ、その時にはマシンも変わっているとは思うが…さすがにAthlonXPはH264とかを再生するには非力…新しいマシンにはAGPのボードは引き継げないからね。

はい、再起動。…うん、gstreamerも、xineも、Flashも、その他アプリケーションも音が出てくれる。/proc/asound/modulesの順番も指定通り。偶然の可能性もあるので、もう一度再起動。もう一度確認。問題無し…ん?なんかあったぞ。起動時のメッセージを見ていると、

WARNING: All config files need .conf: /etc/modprobe.d/sound, it will be ignored in a future release.

というものを発見!ということは、いずれこれも使えなくなるってことだ。どうしよう…しかし、メッセージの内容は、 All config files need .conf が主たる内容であって、it will be ignored in a future release. は補足であるようにも読めるぞ。つまり、/etc/modprobe.d/sound を /etc/modprobe.d/sound.conf とするべきだということか? /etc/modprobe.d/ を見てみると、他のファイルはすべて.confがついている。やるしかあるまい。これでうまくいかななっても、その be ignored の日は少なくとも今日ではなさそうだ、代わりの方法をまた探せばよい。

# cd /etc/modprobe.d/
# mv sound sound.conf
# shutdown -r now

…画面に目を凝らしたけれど、警告は出なかったような。起動し終わったら、一通り音を出して確認。/proc/asound/modules 及び /proc/asound/cards の内容も確認。起動時のメッセージは /var/log/dmesg に記録されているようなので、それも確認。

# less /var/log/dmesg | grep WARNING

はい、問題なさそうです。よって、/etc/modprobe.d/sound は、最初から /etc/modprobe.d/sound.conf として作った方が良さそうです。

というわけで、とりあえずはalsaconfの代替は /etc/modprobe.d/sound.conf で。

関連記事

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

おひさしぶりです

ご無沙汰しております。細かいところですが

># less /var/log/dmesg | grep WARNING

という操作について。"util-linux-ng" というパッケージの中にそのままズバリといった名前で "dmesg" というツールがありまして(多分 Debian をインストールするとデフォルトでついてくると思います)、これを利用すれば root 権限無しでデバイス関連のログを確認することができます。使用法としては

ex)
$ dmesg | grep "foo" | お好みのページャ

なんてするのが便利かと(ご存知でしたら無視してください)。

本題とははずれますが、Ubuntu のサウンド関連で僕もトラブルになっているので今回紹介されているページを参考に色々といじくってみることにします。情報ありがとうございます。

Re: おひさしぶりです

mizukitiさん、お久しぶりです!

dmsg、存在を知ってはいたんですけれども…まさか、rootなしでも使えるとは…
こちらこそ、情報ありがとうございます。

No title

>WARNING: All config files need .conf: /etc/modprobe.d
>/sound, it will be ignored in a future release.

>というものを発見!ということは、いずれこれも使えなくなるってことだ。

The file whose name doesn't end with .conf will be ignored in a future release.

ということだと思います。

Debian sid でlinux-image-2.6.32-trunkを試したら音が出なくなって困っていたんですが、こちらの記事を読んで原因と解決策がわかった次第です。ありがとうございました。

私の場合、linux-image-2.6.26を使用していたんですが、この時は認識していたサウンドドライバがそもそも1つだったのでうまく動作していたようです。linux-image-2.6.32-trunkにバージョンアップすると、新たに別のドライバも認識するようになってしまい、また運の悪いことにその別のドライバの方が10回中9回くらいの高確率で先に認識されてしまっていました。

Re: No title

コメントありがとうございます。

>The file whose name doesn't end with .conf will be ignored in a future release.
>
>ということだと思います。

あ、それはすみません、ちゃんと読んでいただければ分かると思いますがもちろん気づいています。
ここはハウツーではなくて俺の体験談という形式で書いているので、途中で誤解したことにあとで気がついたとしても、そのままその過程を書くようにしています。混乱させて申し訳ないです。

>Debian sid でlinux-image-2.6.32-trunkを試したら音が出なくなって困っていたんですが、こちらの記事を読んで原因と解決策がわかった次第です。ありがとうございました。

いえいえ、俺はコピペして体験談をここに載っけただけなので…。お礼は元の記事の作者に言ってあげてください。

>linux-image-2.6.32-trunkにバージョンアップすると、新たに別のドライバも認識するようになってしまい

カーネルが今まで対応してなかったハードに新たに対応してくれたということでしょうね。これ自体は良いことなんでしょうが、起動する度に挙動がコロコロ変わるのは勘弁していただきたいですね。
プロフィール

ざっぱー

Author:ざっぱー
(この画像について)

当ブログについて
メール
(このメールアドレスへの特定電子メール (迷惑メール) の送信はお断りします)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。