Alsaに優先サウンドデバイスを自動的に選択させる方法は?


36

USBサウンドカードを購入しました。Linuxデスクトップが接続されていて、デバイスが(非)接続されると自動的に切り替わる場合は、USBデバイスを優先するようにLinuxデスクトップをセットアップしたいと思います。それは可能ですか?


Debianは代わりにpulseaudioを使用します。
Braiam

回答:


36

でカードを探す

$ cat /proc/asound/cards

有効なALSAカード名を取得するには、次を使用しますaplay

$ aplay -l

そして、/etc/asound.conf次のように作成します:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw           
    card 1
}

「card 1」を、上記で決定したカードの番号または名前に置き換えます。

または、カードの順序を変更して、USBカードがカード0になり、編集せずに機能するようにすることができますasound.conf


2
私はあなたの提案を試みましたが、USBカードが抜かれると、内蔵カードに切り替えるのではなく、オーディオが完全に機能しなくなります。
ペトルプドラク

2
RPI2を使用すると、このソリューションはうまくいきました。残りのすべてを試してみましたが、私がこれをするまで何も機能しませんでした。(私の「カード0」を使用する必要がありました)。
ロブ・ギボンズ

2
上記の構成を使用すると、palemoonのyoutubeのサウンドが機能しませんでした。この構成は機能しました: defaults.pcm.card 1 defaults.ctl.card 1 forum.palemoon.org/viewtopic.php?t
9661#

この1日のために立ち往生!そして、あなたはちょうど私のロバを救った!
アラミン

2
普通の人への回答では、難解なバッチ処理ハッカーを使用しないでください。出力から列を抽出するワンライナーを書く代わりに、完全な出力で目的の情報を見つける方法を言葉で説明します。
シュチェパンHołyszewski18年

16

これは、Alsaでデフォルトのサウンドカードを選択する方法です。Pulse Audioを使用している場合、この方法が機能するようにAlsaをインストールすることをお勧めします。

cat / proc / asound / modules

コマンドの出力は次のようになります(例)。

0 snd_hda_intel

1 snd_usb_intel

上からあなたのUSBサウンドカードがどれかを簡単に理解できます。

nano /etc/modprobe.d/alsa-base.conf

このalsa-base.confを編集して、優先カードのインデックスが-2 / 0で、他のカードのインデックスが-1 / 1であるようにします(-2と-1に固執)

オプションsnd_hda_intel index = -1

オプションsnd_usb_intel index = -2

この場合、USBデバイスが優先デバイスです。

次のように、出力から同じ名前の2つの異なるカードがある場合:

オプションsnd_hda_intel

オプションsnd_hda_intel

このコマンドを発行して、どれがどれであるかを見つけます。

猫/ proc / asound / cards

次に、この方法でモジュールを編集します。

オプションsnd_hda_intel enable = 1 index = 0

オプションsnd_hda_intel enable = 0 index = 1

再起動が必要な場合があります。そのため、サウンドカードを手動で切り替える必要がある場合があります。


「出力を変更する」とはどういう意味ですか?出力を変更するにはどうすればよいですか?
ペトルプドラク

answer.tryに必要な変更を加えました。このバージョンが役立つことを願っています。使用するLinuxのフレーバーによって方法が異なる場合があります。
-Ashildr

ありがとうございました。セットアップを確認するにはどうすればよいですか?カードを特定し、適切なオプションを追加し、再起動しましたが、変更は見られません-まだ内部(Intel)カードが優先されます。
ペトルプドラク

try> options snd-usb-intel enable = 1 index = 0(有効にする)> options snd-hda-intel enable = 0 index = 1(無効にする)または> options snd-hda-intel enable = 0 index = 0>オプションsnd-usb-intel enable = 1 index = 1および再起動
Ashildr

つまり、enable = 0または1を使用してusbを有効にし、もう1つを無効にします。この逆も同様です。どちらがうまくいくかわかりません。rebootが必要です。yorの問題を解決したい
-Ashildr

4

また、USBデバイスから出力を取得できませんでした。私のcat /proc/asound/modules出力は:

0 snd_hda_intel

1 snd_hda_intel

2 snd_usb_audio

私はここで説明した両方の答えを試してみましたが、助けにはなりませんでした(多くのインデックスの組み合わせと多くの再起動を伴う)。起動後にUSBデバイスが初期化されたことが問題だったと思います。いずれにせよ、私の作業ソリューションは、次のように更新することにより、他の2つのサウンドデバイスをブラックリストに登録しています/etc/modprobe.d/blacklist.conf

blacklist snd_hda_intel

3

Matija Nalisからの答えは半分しか機能しませんでした(alsamixerがデフォルトを変更しましたが、aplayやfirefoxのような他のものは頑固に間違ったデフォルトのままでした)。debian wikiからのこの例は私のために働いた(CentOS-6ラップトップで):

defaults.pcm.!card Generic_1
defaults.ctl.!card Generic_1
defaults.pcm.!device 0
defaults.ctl.!device 0

記録のために:ALSAの文書化は不十分です。特に、使用するカードを選択するなどのこの非常に単純な作業は非常に困難です。さらに悪いことに、システム間で変化するようです。また、aplay -lから「Generic_1」タグを取得し、リストの「card 1」として表示されます。他の人がそれを使用しているようだったので、私は同じことをしました...それは私が言うことができないことを意味します。


1

.asoundrcまたはシステムasound.confを編集してデフォルトのalsaカードを変更できますが、このアプローチにはいくつかの重要な問題があります。

壊れやすく、アプリケーションの再起動が必要です。

その場でカードを切り替えたい場合は、pulseaudioなどのサウンドカードからアプリケーションを正しく抽象化するサウンドサーバーを使用する必要があります。


Skypeベータのようないくつかのアプリケーションはそれを無視し、デフォルトのALSAカードに接続します。HDMIがHDAではなく最初のデバイスである場合、Skypeの音声が聞こえなくなります。
マックスN

-1

以下は、Matija NalisとTelの回答のバリエーションです。これは私のために働いたものです:

〜/ .asoundrc

defaults.pcm.!card 1
defaults.ctl.!card 1

(aplay -lによると、Odroid C0、Debian Jessie、カード0としてのHDMIオーディオ、カード1としてのUSBサウンドカード)

注:/ proc / asound / modulesが存在せず、ブラックリストに載せたり、優先度を低くしたりするhdmiオーディオモジュールがないため、他の方法は機能しませんでした。カーネルに組み込まれています。完全に無効にするためには、hdmiオーディオのサポートなしでカーネルを再コンパイルする必要があったようです。


sudo modprobe $ soundcard_driverは、/ proc / asound / modulesに望むことを行います
linuxdev2013

@ linuxdev2013 modprobeに対応していないドライバーをmodprobeするにはどうすればよいですか?上記で説明したように、これはモジュールではなく、カーネルに組み込まれています。
astooooooo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.