I am trying to access the Adafruit I2S MEMS microphone (Adafruit I2S MEMS Microphone Breakout - SPH0645LM4H : ID 3421 : $6.95 : Adafruit Industries, Unique & fun DIY electronics and kits) via PuleAudio through the PyAudio library in Python 3.8.5. I have done the following steps:
- Connected the I2S to the J21 expansion header and set it up with the Jetson IO script; output of “sudo grep dap1 /sys/kernel/debug/tegra_pinctrl_reg” is:
Bank: 0 Reg: 0x02431028 Val: 0x00000444 → dap1_fs_pj3
Bank: 0 Reg: 0x02431030 Val: 0x00000454 → dap1_din_pj2
Bank: 0 Reg: 0x02431038 Val: 0x00000055 → dap1_dout_pj1
Bank: 0 Reg: 0x02431040 Val: 0x00000444 → dap1_sclk_pj0
- I checked that audio is being recorded with the following commands and opened the file in numpy and values are being captured:
amixer -c tegrasndt186ref sset “ADMAIF1 Mux” “I2S1”
arecord -D hw:tegrasndt186ref,0 -r 48000 -f S32_LE -c 2 -d 10 cap.wav
- Now, I am trying to record audio in Python via PyAudio (which wraps PulseAudio as per my limited knowledge) with the following script:
import pyaudio
p = pyaudio.PyAudio()
stream = p.open(format = pyaudio.PaInt16, channels = 1, rate = 44100, input = True, frames_per_buffer = 1024)
frames =
try:
for i in range(0, int(44100 / 1024)):
frames.append(np.frombuffer(stream.read(1024), dtype = np.int16))
finally:
stream.stop_stream()
stream.close()
p.terminate()
audio = np.concatenate(frames)
Step 3, results in a numpy array of the correct size (# of samples X duration) but filled with all zeros. The following is the output printed to the screen when running the code in step 3:
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.front.0:CARD=0’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM front
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
I believe the above output means that the default audio card is not correct, however in checking the default card using this script: Audio device detection w/ pyaudio · GitHub I get:
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.front.0:CARD=0’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM front
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround21
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.tegra-hda.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2’
ALSA lib conf.c:4528:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5007:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:990:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
ALSA lib pcm_dmix.c:1052:(snd_pcm_dmix_open) unable to open slave
Output Device id 0 - tegra-hda: HDMI 0 (hw:0,3)
Output Device id 1 - tegra-hda: HDMI 0 (hw:0,7)
Input Device id 2 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,0)
Output Device id 2 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,0)
Input Device id 3 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,1)
Output Device id 3 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,1)
Input Device id 4 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,2)
Output Device id 4 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,2)
Input Device id 5 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,3)
Output Device id 5 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,3)
Input Device id 6 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,4)
Output Device id 6 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,4)
Input Device id 7 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,5)
Output Device id 7 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,5)
Input Device id 8 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,6)
Output Device id 8 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,6)
Input Device id 9 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,7)
Output Device id 9 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,7)
Input Device id 10 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,8)
Output Device id 10 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,8)
Input Device id 11 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,9)
Output Device id 11 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,9)
Input Device id 12 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,10)
Output Device id 12 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,10)
Input Device id 13 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,11)
Output Device id 13 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,11)
Input Device id 14 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,12)
Output Device id 14 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,12)
Input Device id 15 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,13)
Output Device id 15 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,13)
Input Device id 16 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,14)
Output Device id 16 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,14)
Input Device id 17 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,15)
Output Device id 17 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,15)
Input Device id 18 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,16)
Output Device id 18 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,16)
Input Device id 19 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,17)
Output Device id 19 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,17)
Input Device id 20 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,18)
Output Device id 20 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,18)
Input Device id 21 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,19)
Output Device id 21 - tegra-snd-t186ref-mobile-rt565x: - (hw:1,19)
Input Device id 22 - pulse
Output Device id 22 - pulse
Input Device id 23 - music
Output Device id 23 - music
Output Device id 24 - demixer
Input Device id 25 - voice
Output Device id 25 - voice
Input Device id 26 - music_and_voice
Output Device id 26 - music_and_voice
Input Device id 27 - default
Output Device id 27 - default
Selected device is tegra-hda: HDMI 0 (hw:0,7)ValueError Traceback (most recent call last)
in
14 devinfo = p.get_device_info_by_index(1)
15 print("Selected device is ",devinfo.get(‘name’))
—> 16 if p.is_format_supported(44100.0, # Sample rate
17 input_device=devinfo[“index”],
18 input_channels=devinfo[‘maxInputChannels’],~/.pyenv/versions/3.8-dev/envs/pindrop/lib/python3.8/site-packages/pyaudio.py in is_format_supported(self, rate, input_device, input_channels, input_format, output_device, output_channels, output_format)
935 kwargs[‘output_format’] = output_format
936
→ 937 return pa.is_format_supported(rate, **kwargs)
938
939 def get_default_input_device_info(self):ValueError: (‘Invalid number of channels’, -9998)
I tried device 2, which resulted in the same correct sized array with all 0’s.
So, I seem to missing something probably in configuration but I can’t seem to figure out what. Any help or even direction is much appreciated!