「えだまめ」しているラズパイ

30年ぶりに半田ごて握ってラズパイ勉強中。

amxer でマイク・スピーカーのレベル設定ができない

◯発生現象

amixer でマイク、スピーカーのレベル設定ができない

◯原因

指定するデバイス名が 'Mic'、'Speaker'とは限らずハードウエアによってそれぞれ異なる。

◯対策

alsamixer でデバイス名を確認し、ボリュームレベルを設定できる関数を作成して設定を単純化した。

◯各種デバイス名の例

・Speaker PHAT (Pimoronii)

スピーカー 'Master'
f:id:greensoybean:20200111080952p:plain

・ReSpeaker (Pimoroni)

マイク左 'Left Input Boost Mixer LINPUT1'
マイク右 'Right Input Boost Mixer RINPUT1'
スピーカー 'Playback'
f:id:greensoybean:20200111080432p:plain

・USB オーディオ変換アダプタ (ノーブランド)

マイク 'Mic'
スピーカー 'Speaker'
f:id:greensoybean:20200111081627p:plain

◯作成した関数

ボリュームレベル(%)、デバイスナンバー、カードナンバー、上記で調べたデバイス名を指定して呼び出す。

import subprocess

def set_micvol(mic_vol=50,dev=0,crd=0,device='Mic'):
	# マイク・ボリュームレベル設定
	amixer = '/usr/bin/amixer'
	subprocess.call([amixer,'-c','0','sset',device,str(mic_vol)+'%'])
	time.sleep(0.1)

def set_sndvol(snd_vol=50,dev=0,crd=0,device='Speaker'):
	# スピーカ・ボリュームレベル設定
	amixer = '/usr/bin/amixer'
	subprocess.call([amixer,'-c','0','sset',device,str(snd_vol)+'%'])
	time.sleep(0.1)

コマンドに絶対パスを入れ込んでいるのはcron対策です。