ALSAのユーザー設定

提供: Akionux-wiki
Share/Save/Bookmark
移動先: 案内検索

概要

ALSA(Advanced Linux Sound Architecture)のユーザー設定で音声の出力先を切り替える方法を記する。

方法

ユーザーのホームディレクトリ下の~/.asoundrcでユーザーごとのデバイスの設定をすることができる[1]。このとき、システムの設定は上書きされる。

0番目のオーディオデバイス、ミキサーデバイスを設定する場合は次のようになる:

pcm.!default {
	type hw
	card 0
}

ctl.!default {
	type hw           
	card 0
}

pcm.!defaultがデフォルトの出力先デバイス、ctl.!defaultがデフォルトのミキサーデバイスを設定する。

pcm.<名前>およびctl.<名前>でユーザー設定のデバイスを定義することができる。 定義したデバイスを!defaultからのslave.pcmで設定すれば、そのデバイスへ出力することができる。

私の場合、直接オーディオデバイスへの出力、JACK経由の出力、Bluetoothオーディオシンクへの出力を切り替えられるように~/.asoundrcの内容は以下のようにしている:

pcm.rawjack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    }
    capture_ports {
        0 system:capture_1
        1 system:capture_2
    }
}

pcm.jack {
    type plug
    slave { pcm "rawjack" }
    hint {
 	description "JACK Audio Connection Kit"
    }
}

pcm.btheadset {
	type bluetooth
	device "XX:XX:XX:XX:XX:XX"
	profile "auto"
}

pcm.!default {
    type plug
    #slave { pcm "rawjack" }
    #slave.pcm "hw:0"
    slave.pcm "btheadset"
}

ctl.!default {
	type hw           
	card 0
}

pcm.!defaultのコメントアウトする行を変えることで出力先を切り替えられる。

JACKに出力する

JACK Audio Connection KitもしくはJACKは低レイテンシーで呼び出されたJACK対応アプリケーション同士でのオーディオ、MIDIデータ両方の接続を提供するサウンドサーバデーモンである[2]。 DAWで音楽を作るときには必要だったりする。

ALSAでJACK出力するには~/.asoundrcへ次のような設定をする[3]:

pcm.rawjack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    }
    capture_ports {
        0 system:capture_1
        1 system:capture_2
    }
}

pcm.jack {
    type plug
    slave { pcm "rawjack" }
    hint {
 	description "JACK Audio Connection Kit"
    }
}

pcm.!default {
    type plug
    slave { pcm "rawjack" }
    #slave.pcm "hw:0"
    #slave.pcm "btheadset"
}

Bluetoothオーディオシンクへ出力する

BluetoothヘッドセットなどのBluetoothオーディオシンクへ出力するには次のような設定をする:

pcm.btheadset {
	type bluetooth
	device "XX:XX:XX:XX:XX:XX"
	profile "auto"
}

pcm.!default {
    type plug
    #slave { pcm "rawjack" }
    #slave.pcm "hw:0"
    slave.pcm "btheadset"
}

XX:XX:XX:XX:XX:XXの部分には接続先のBluetoothデバイスのMACアドレスを入れる。

直接オーディオデバイスへ出力する

直接PCの0番目のオーディオデバイスへ出力する場合は、実は

pcm.!default {
	type hw
	card 0
}

とすればよいのだが、私の場合JACKなど他の出力先と切り替えを簡単に行いたいので、

pcm.!default {
    type plug
    #slave { pcm "rawjack" }
    slave.pcm "hw:0"
    #slave.pcm "btheadset"
}

としてslave.pcmとして間接的に0番目のオーディオデバイスを設定している。 もしかしたら何らかのオーバーヘッドがあるかもしれないが、特に気になる問題はない。

~/.asoundrcをリロードする

~/.asoundrcを編集後、設定をリロードするには、

alsactl kill rescan

または

alsactl nrestore

とする[4]。 さらに、~/.asoundrcはALSAライブラリによって読み込まれる[4]ので、起動中の個々のプログラムを再起動しないと設定は反映されない。

References