Raspi3で内蔵USB Audioを無効にしてみたが...

とても遠回りな話になるので、結果だけ知りたい人は一番最後をどうぞ。


Raspi3のイヤホンジャックでもノイズは乗るので、内蔵USB-AudioをRaspi1と同じように止める。

pi@raspberrypi:~ $ cat /etc/modprobe.d/blacklist-snd_bcm2835.conf
blacklist snd_bcm2835
pi@raspberrypi:~ $ sudo reboot

後刺ししたUSB Audioだけを認識するようになったのだけど...

pi@raspberrypi:~ $ cat /proc/asound/cards
 1 [Xmod           ]: USB-Audio - Creative Xmod
                      Creative Technology Ltd Creative Xmod at usb-3f980000.usb-1.4, full speed

alsaがダメっぽい。

pi@raspberrypi:~ $ ./aquestalkpi/AquesTalkPi -v f2 主に音声合成について思ったこ とを書いてみようと思います。 | aplay
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4259:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4738:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:722: audio open error: No such file or directory

Card0を見に行ったけどないという言い分。
なるほどUSB AudioはCard1になっている。

pi@raspberrypi:~ $ cat /proc/asound/modules
 1 snd_usb_audio

Card 0は予約になっているのかな?
設定を変更しようにも起動しない。

pi@raspberrypi:~ $ sudo amixer controls
amixer: Control default open error: No such file or directory


これはできる。

pi@raspberrypi:~ $ aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
default:CARD=Xmod
    Creative Xmod, USB Audio
    Default Audio Device
sysdefault:CARD=Xmod
    Creative Xmod, USB Audio
    Default Audio Device
front:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    Front speakers
surround21:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    Direct sample mixing device
dsnoop:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    Direct sample snooping device
hw:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Xmod,DEV=0
    Creative Xmod, USB Audio
    Hardware device with all software conversions

優先度設定だけか。


ここじゃなさそう。

pi@raspberrypi:~ $ cat /lib/modprobe.d/aliases.conf
# These are the standard aliases and dependencies.
# This file does not need to be modified.

# prevent unusual drivers from appearing as the first sound device ###########
options snd-pcsp index=-2
options snd-usb-audio index=-2
options cx88_alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2

# work around other kernel issues ############################################
# The EHCI driver should be loaded before the ones for low speed controllers
# or some devices may be confused when they are disconnected and reconnected.
softdep uhci-hcd pre: ehci-hcd
softdep ohci-hcd pre: ehci-hcd

書き換えてみる。

pi@raspberrypi:~ $ sudo vi /lib/modprobe.d/aliases.conf
#options snd-usb-audio index=-2
options snd-usb-audio index=1
pi@raspberrypi:~ $ sudo reboot

pi@raspberrypi:~ $ cat /proc/asound/modules
 1 snd_usb_audio
pi@raspberrypi:~ $ cat /proc/asound/cards
 1 [Xmod           ]: USB-Audio - Creative Xmod
                      Creative Technology Ltd Creative Xmod at usb-3f980000.usb-1.4, full speed

番号は1のまま。


追っかけたい病になりかかるが、こんなとこで時間使ってもしょうがないので、内蔵ドライバ有効にして設定したら何か吐かれるんじゃないかと再起動。

pi@raspberrypi:~ $ sudo vi /etc/modprobe.d/blacklist-snd_bcm2835.conf
pi@raspberrypi:~ $ sudo reboot
pi@raspberrypi:~ $ cat /proc/asound/modules
 0 snd_bcm2835
 1 snd_usb_audio
pi@raspberrypi:~ $ amixer controls
numid=3,iface=MIXER,name='PCM Playback Route'
numid=2,iface=MIXER,name='PCM Playback Switch'
numid=1,iface=MIXER,name='PCM Playback Volume'
numid=5,iface=PCM,name='IEC958 Playback Con Mask'
numid=4,iface=PCM,name='IEC958 Playback Default'
pi@raspberrypi:~ $ amixer cget numid=3
numid=3,iface=MIXER,name='PCM Playback Route'
  ; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
  : values=1

アナログ固定になっている。
自動にしたらいいのかな?

pi@raspberrypi:~ $ amixer cset numid=3 0
numid=3,iface=MIXER,name='PCM Playback Route'
  ; type=INTEGER,access=rw------,values=1,min=0,max=2,step=0
  : values=0

pi@raspberrypi:~ $ sudo vi /etc/modprobe.d/blacklist-snd_bcm2835.conf
pi@raspberrypi:~ $ sudo reboot

だめ。

ブート時に無効にする。

pi@raspberrypi:~ $ sudo vi /boot/config.txt
# Enable audio (loads snd_bcm2835)
dtparam=audio=on

にはなっている。
コメントアウトして再起動。

pi@raspberrypi:~ $ cat /proc/asound/modules
 1 snd_usb_audio
pi@raspberrypi:~ $ amixer controls
amixer: Control default open error: No such file or directory

変わらず。


アプローチを変える。Card1はどうなっているのか。

pi@raspberrypi:~ $ ls -l /proc/asound/card0
ls: cannot access /proc/asound/card0: No such file or directory
pi@raspberrypi:~ $ ls -l /proc/asound/card1
total 0
-r--r--r-- 1 root root 0 Jun 27 04:05 id
dr-xr-xr-x 3 root root 0 Jun 27 04:05 pcm0c
dr-xr-xr-x 3 root root 0 Jun 27 04:05 pcm0p
-r--r--r-- 1 root root 0 Jun 27 04:05 stream0
-r--r--r-- 1 root root 0 Jun 27 04:05 usbbus
-r--r--r-- 1 root root 0 Jun 27 04:05 usbid
-r--r--r-- 1 root root 0 Jun 27 04:05 usbmixer

pi@raspberrypi:~ $ amixer -c 1 controls
numid=4,iface=MIXER,name='PCM Playback Switch'
numid=5,iface=MIXER,name='PCM Playback Volume'
numid=9,iface=MIXER,name='PCM Capture Source'
numid=6,iface=MIXER,name='Line Capture Volume'
numid=7,iface=MIXER,name='Mic Capture Volume'
numid=8,iface=MIXER,name='Auto Gain Control'
numid=3,iface=MIXER,name='Up Down Switch'
numid=2,iface=PCM,name='Capture Channel Map'
numid=1,iface=PCM,name='Playback Channel Map'

Playback Routeがないな?そんなもの?

pi@raspberrypi:~ $ cat /proc/asound/devices
 32: [ 1]   : control
 33:        : timer
 48: [ 1- 0]: digital audio playback
 56: [ 1- 0]: digital audio capture

pi@raspberrypi:~ $ cat /proc/asound/modules
 1 snd_usb_audio
pi@raspberrypi:~ $ cat /proc/asound/cards
 1 [Xmod           ]: USB-Audio - Creative Xmod
                      Creative Technology Ltd Creative Xmod at usb-3f980000.usb-1.4, full speed
pi@raspberrypi:~ $ cat /proc/asound/pcm
01-00: USB Audio : USB Audio : playback 1 : capture 1

普通に見える。
設定はできる?

pi@raspberrypi:~ $ amixer -c 1 cset numid=3
numid=3,iface=MIXER,name='Up Down Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
pi@raspberrypi:~ $ amixer -c 1 cset numid=3 1
numid=3,iface=MIXER,name='Up Down Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
pi@raspberrypi:~ $ amixer -c 1 cset numid=1
amixer: Control hw:1 element write error: Operation not permitted

こっち方面からじゃないか。


asound.confを作るしかない?

pcm.!default {
type hw
card 1
}

ctl.!default {
type hw
card 1
}

なんかイヤだな。


ソースのデフォルト0を書き換えてビルドした人の例。
https://www.crifan.com/resolved_amixer_control_default_open_error_no_such_file_or_directory/
さすがにこれはないか。


お作法的に問題ないalsaのデフォルトを変更する設定ファイルを探す。

pi@raspberrypi:~ $ grep "defaults.pcm.card " -R /usr/share/alsa/alsa.conf
defaults.pcm.card 0
pi@raspberrypi:~ $ grep "defaults.pcm.device " -R /usr/share/alsa/alsa.conf
defaults.pcm.device 0
pi@raspberrypi:~ $ grep cards.pcm.default /usr/share/alsa/alsa.conf
pcm.default cards.pcm.default
pcm.sysdefault cards.pcm.default

これを1にしてしまうか、それともUSB Audioロードの番号を1にするか。
USB-Audioのほうには、それっぽいのはなさそう。

pi@raspberrypi:~ $ grep pcm.default -R /usr/share/alsa/cards/USB-Audio.conf
USB-Audio."AudioPhile".pcm.default "cards.USB-Audio.Audiophile USB (tm).pcm.default"
USB-Audio."Audiophile USB (tm)".pcm.default {
USB-Audio.pcm.default {
					"cards.USB-Audio.pcm.default_playback_dmix_"
USB-Audio.pcm.default_playback_dmix_yes {
USB-Audio.pcm.default_playback_dmix_no {

書き換える。

pi@raspberrypi:~ $ sudo vi /usr/share/alsa/alsa.conf
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.device 1
pi@raspi09:~ $ sudo reboot

来た!

pi@raspberrypi:~ $ amixer controls
numid=4,iface=MIXER,name='PCM Playback Switch'
numid=5,iface=MIXER,name='PCM Playback Volume'
numid=9,iface=MIXER,name='PCM Capture Source'
numid=6,iface=MIXER,name='Line Capture Volume'
numid=7,iface=MIXER,name='Mic Capture Volume'
numid=8,iface=MIXER,name='Auto Gain Control'
numid=3,iface=MIXER,name='Up Down Switch'
numid=2,iface=PCM,name='Capture Channel Map'
numid=1,iface=PCM,name='Playback Channel Map'
pi@raspi09:~ $ amixer cset numid=3
numid=3,iface=MIXER,name='Up Down Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on

再生してみる。

pi@raspberrypi:~ $ ./aquestalkpi/AquesTalkPi -v f2 主に音声合成について思ったこ とを書いてみようと思います。 | aplay
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
aplay: main:722: audio open error: No such file or directory

ダメ。
dmixの設定を変えてないかな?

pi@raspberrypi:~ $ cat /usr/share/alsa/alsa.conf | grep dmix
defaults.pcm.dmix.max_periods 0
defaults.pcm.dmix.rate 48000
defaults.pcm.dmix.format "unchanged"
defaults.pcm.dmix.card defaults.pcm.card
defaults.pcm.dmix.device defaults.pcm.device
pcm.dmix cards.pcm.dmix
pi@raspberrypi:~ $ cat /usr/share/alsa/alsa.conf | grep cards.pcm.dmix
pcm.dmix cards.pcm.dmix

関係ない感じ。


再度方針転換。
オーディオデバイスのストリームを直接指定してみる。

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: Xmod [Creative Xmod], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@raspberrypi:~ $ ./aquestalkpi/AquesTalkPi -v f2 主に音声合成について思ったこ とを書いてみようと思います。 | aplay -Dhw:1,0
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono
aplay: set_params:1239: Channels count non available

ダメだな。

pi@raspberrypi:~ $ ./aquestalkpi/AquesTalkPi -v f2 主に音声合成について思ったこ とを書いてみようと思います。 | aplay -D plughw:1,0
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono

出た!


最初から、-D plughw:1,1とかにしておけばよかったってことか...
/boot/config.txtとalsa.conf戻してrebootする。
再生。

pi@raspi09:~ $ ./aquestalkpi/AquesTalkPi -v f2 主に音声合成について思ったこを書 いてみようと思います。 | aplay -D plughw:1,0
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono

できんじゃん... orz