私の新しいUSBオーディオスピーカーは、Alsaの2番目のデバイスとして登場しました。私はそれを主要なものにすることができました:
$ cat /proc/asound/modules
0 snd_usb_audio
1 snd_hda_intel
$ cat /proc/asound/cards
0 [Speaker ]: USB-Audio - uBoom Q Speaker
uBoom Q Speaker at usb-0000:00:1d.1-1, full speed
1 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0x80000000 irq 16
これらの行を/etc/modprobe.d/alsa-base.conf
に追加することによって:
options snd_hda_intel index=1
options snd_usb_audio index=0
これで、USBを起動すると、オーディオはデフォルトでどこでも機能します。問題は—それを切断する(またはそれなしで起動する)と、
$ cat /proc/asound/modules
1 snd_hda_intel
0
番目のデバイスがないため、何も機能しません。
$ aplay
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
私が欲しいのは、デバイスインデックスを再割り当てする方法です。解決策がスクリプトの場合—それを使用してudevルールを作成します。
現在、「index =?」を変更していますデフォルトの「0,1」に戻し、alsa force-reload
を呼び出すと役立ちます。より良い方法はありますか?
注:私のディストリビューションにはasoundconf
はありません(KUbuntu Lucid):(
まず、Alsaデバイスのインデックスを扱いましょう。 USBスピーカーを接続し、Sudo alsa force-reload
を呼び出すと、Alsaがそれを見つけます。
カードインデックスとそのドライバーを一覧表示します。
$ cat /proc/asound/modules
0 snd_hda_intel
1 snd_usb_audio
より詳細な情報を表示する:
$ cat /proc/asound/cards
0 [Intel ]: HDA-Intel - HDA Intel
HDA Intel at 0x80000000 irq 16
1 [Speaker ]: USB-Audio - uBoom Q Speaker
uBoom Q Speaker at usb-0000:00:1d.0-1, full speed
Index = 0の「Speaker」が必要です。
これらの行を/etc/modprobe.d/alsa-base.conf
に追加して、USBスピーカーが存在する場合はデフォルトのデバイスにします。
options snd_hda_intel index=-2
options snd_usb_audio index=-1
これにより、内蔵カードよりもUSBスピーカーの方が適しています。発行Sudo alsa force-reload
、出来上がり!これで、cat /proc/asound/cards
を使用して、USBスピーカーを接続/切断したときにカードがどのように表示および非表示になるかを確認できます。
次に起動するアプリケーションで使用する2枚のカードのどちらを選択するかを選択する別の領収書があります。
次の行を/etc/asound.confに追加します。
$ cat /etc/asound.conf.switch
# CARD DEFINITIONS
#=== CARD 'card0'
pcm.card0-hw { type hw ; card 0 ; }
ctl.card0-hw { type hw ; card 0 ; }
pcm.card0 { type dmix ;
ipc_key 4109 ; ipc_perm 0660 ;
slave { pcm "hw:0,0"
channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
}
bindings { 0 0 ; 1 1 ; }
}
#=== CARD 'card1'
pcm.card1-hw { type hw ; card 1 ; }
ctl.card1-hw { type hw ; card 1 ; }
pcm.card1 { type dmix ;
ipc_key 1949 ; ipc_perm 0660 ;
slave { pcm "hw:1,0"
channels 2 ; period_size 1024 ; buffer_size 4096 ; rate 44100 ; period_time 0 ;
}
bindings { 0 0 ; 1 1 ; }
}
これにより、「card0」と「card1」の2つの「dmix」再生デバイスが作成されます。彼らはあなたが問題なくそれらを切り替えることを可能にします。
さて、これを〜/ .asoundrcに入れてください:
# Define new virtual devices
pcm.this { type plug ; slave.pcm "card1" ; }
ctl.this ctl.card1-hw
# Set default device
pcm.!default pcm.this
ctl.!default ctl.this
2枚目のカードに切り替えます。元に戻すには、すべての「1」を「0」に置き換えます。小さなスクリプトが便利です:)
注:このマニュアルでは、いくつかの新しいAlsaデバイスを作成しました:「this」、「card0-hw」、「card0」、「card1-hw」、「card1」。あなたはそれらを参照することができます:
$ amixer -D 'this' scontrols
Simple mixer control 'PCM',0
P.S.私はAlsaが実際にどのように機能するかと共通しておらず、ひどい間違いを犯した可能性があります:)もっと良い方法があれば、私を訂正してください。しかし、それでも、これは機能します:)
asoundconf-gtkをインストールしてみてくださいが、気を付けてください https://bugs.launchpad.net/ubuntu/+source/asoundconf-gtk/+bug/575058
同じ問題を解決しようとしています。USBサウンドカードがシステムに接続されたときにオーディオストリームを自動的に再ルーティングするため、udevの新しいルールを作成することにしました。
/etc/udev/rules.d/50-alsa.rules:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/usr/local/bin/alsa-switch.sh"
もちろん、デバイスに応じて「*」を数字に置き換える必要があります(lsusbを使用してどれを確認するか)
alsa-switch.sh
スクリプトは非常に単純です:
#!/bin/sh
ln -sf /path/to/custom/asoundrc /home/<user>/.asoundrc
別のルールを追加して、デバイスが取り外されたときに構成を元に戻すことができます(申し訳ありませんが、まだ作業中です)
オンボードを-2に、USBを-1に設定してalsa-base.confを簡単に編集しようとしましたが、これは機能しませんでした。
ただし、両方を-1に設定すると(オンボードが最初にリストされている場合)、前後に切り替えることができます。
ただし、変更のたびにアルサフォースリロードを実行する必要があります。