Practice of Programming

プログラム とか Linuxとかの話題

PulseAudioの入出力やボリューム設定をコマンドで行う

AfterShokz(現:Shokz)のOpenCommを使っていますが、Ubuntu で利用していると、プロファイルがA2DPを選択されてしまい、毎朝仕事をする前に、Handsfree Head Unit(HFP)に選択し直さないといけないという作業があったんですが、いい加減ちゃんと調べようと思って調べました。

pactl list cards を使って利用可能なプロファイルを検索する

下記のコマンドを実行すると、

LANG=C pactl list cards |less |grep -E 'Name|profile'

下記のようになります(他にも色々でますが)。

        Name: bluez_card.**_**_**_**_**_**
                        Part of profile(s): a2dp_sink, handsfree_head_unit
                        Part of profile(s): handsfree_head_unit

上記の通り、下記の2つのプロファイルがあります。

  • a2dp_sink
  • handsfree_head_unit

pacmd set-card-profile でプロファイルを指定する

下記のようにpacmdコマンドに、カード名とprofileを渡して実行すると、プロファイルが切り替わります。

pacmd set-card-profile bulez_card.**_**_**_**_**_** a2dp_sink
pacmd set-card-profile bulez_card.**_**_**_**_**_** handsfree_head_unit

pacmd set-default-source で入力(マイク)も選択する

a2dp_sink を選んでいると、マイクをShokzにできないので、会議とかに使う場合は、HFPの方を選択します。その場合には、マイクも設定したいですね。

ちなみに、PulsAudio の sinks というのは、出力(スピーカー)のことで、sources というのは、入力(マイク)のことになります。

pactl list sources

で、検索できるんですけども、A2DPを選んでいると、出てきませんので、サウンド設定で変更してください。

pactl list sources |grep bluez_source 

下記のようでてきます。

        Name: bluez_source.**_**_**_**_**_**.handsfree_head_unit

pacmd set-default-source で入力を選択する。

pacmd set-default-source bluez_source.**_**_**_**_**_**.handsfree_head_unit

音量も設定する

A2DPHFPの切り替えはこれで大丈夫なんですが、mixerで同じ音量にあわせているとA2DPHFPで音量が微妙に異なって聞こえます。 骨伝導イヤホン使ってると、声質によりますが、音量が大きいと、すごいこそばゆい感覚になる時があり、大きい音量だと微妙な場合があります。

こちらもコマンドで設定できます。

※ちなみに、A2DPの出力ボリュームが0になってることに気づかず、なんで聞こえないんやろって、なってました...ので、聞こえない人は、pavucontrol --tab=4 とかで調節しましょう(以下に紹介するコマンド使ったら良いんですが)

pactl set-sink-volume で、出力の音量を設定する

下記のコマンドでsinksを特定します。これも、A2DP選んでいると、HFPの設定は出てこないので、設定で選び直してから、それぞれ特定してください。

LANG=C pactl list sinks| grep Name | grep bluez_sink

下記のように出てきます。

        Name: bluez_sink.**_**_**_**_**_**.a2dp_sink

サブコマンドのset-sink-volume で設定できます。

pactl  set-sink-volume bluez_sink.*_*_*_*_*_*.handsfree_head_unit 75%
pactl  set-sink-volume bluez_sink.*_*_*_*_*_*.a2dp_sink 90%

pactl set-source-volume で、入力の音量を設定する

下記のコマンドでsource を特定します。

LANG=C pactl list sources| grep Name |grep bluez

下記のようにでてきます。

        Name: bluez_sink.**_**_**_**_**_**.a2dp_sink.monitor

サブコマンドのset-source-volume で設定できます。

pactl set-source-volume bluez_sink.**_**_**_**_**_**.a2dp_sink.monitor 135%

マイク音量が小さいとよく言われるので、大きめにしてみました。

終わり

このコマンドを、こないだ作ったSTREAM DECKをコントロールするプログラムに組み込んで、仕事用のページとか、ZoomやMeetが、Active windowになったら、コマンドを実行するみたいにしてみました。後は、PodCastYoutubeとかのbookmark的なページにいったら、A2DPに変えるようにしてみました。

ちなみに、OpenCommについて

仕事で一日中つけっぱなしで使っていますが、かなり気に入ってます。

朝から晩まで10時間以上仕事でつけっぱなしでも(ずっと会議してるわけではないですが、僕の仕事上、会議はかなり多い)、充電切れない。 充電忘れたときでも、5分の充電で2時間通話くらいの充電してくれるので、昼休みとかに充電しとけば基本問題ないかなと思います。

欠点としては、頭痛のときには、つけっぱなしはちょっとしんどいかも、くらいです(僕は頭痛もちではないので、そんなことはあんまりない)。