nvidia-riva / python-clients

Riva Python client API and CLI utils
MIT License
63 stars 22 forks source link

Intercept ALSA / PyAudio errors #24

Closed RchGrav closed 1 year ago

RchGrav commented 1 year ago

Hi There, I've been using this method for months now as well as manually editing it into riva Can easily be switched on and off for verbose errors if necessary, but I don't think it is, nothing relevant has ever appeared here to assist with troubleshooting. This only intercepts initialization errors, other meaningful errors still appear such as device unavailable, wrong device, etc. Regards, Richard Graver

See: contextlib

BEFORE

(assistant-riva-client) rich@neptune:~/Workspace/assistant-riva-client/python-clients$ python scripts/asr/transcribe_mic.py --list-devices
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2642:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_oss.c:377:(_snd_pcm_oss_open) Unknown field port
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_usb_stream.c:486:(_snd_pcm_usb_stream_open) Invalid type for card
ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave
Input audio devices:
7: ReSpeaker 4 Mic Array (UAC1.0): USB Audio (hw:1,0)
15: USB Audio Device: - (hw:3,0)
17: pulse
18: default

AFTER

(assistant-riva-client) rich@neptune:~/Workspace/assistant-riva-client/python-clients$ python scripts/asr/transcribe_mic.py --list-devices
Input audio devices:
7: ReSpeaker 4 Mic Array (UAC1.0): USB Audio (hw:1,0)
15: USB Audio Device: - (hw:3,0)
17: pulse
18: default
(assistant-riva-client) rich@neptune:~/Workspace/assistant-riva-client/python-clients$ python scripts/asr/transcribe_mic.py --input-device 7
## hello

As you can see below specifying a wrong device still gives meaningful errors if an incorrect or non-present device is selected,

(assistant-riva-client) rich@neptune:~/Workspace/assistant-riva-client/python-clients$ python scripts/asr/transcribe_mic.py --input-device 6
Expression 'parameters->channelCount <= maxChans' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1513
Expression 'ValidateParameters( inputParameters, hostApi, StreamDirection_In )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2813
Traceback (most recent call last):
  File "/home/rich/Workspace/assistant-riva-client/python-clients/scripts/asr/transcribe_mic.py", line 75, in <module>
    main()
  File "/home/rich/Workspace/assistant-riva-client/python-clients/scripts/asr/transcribe_mic.py", line 60, in main
    with riva.client.audio_io.MicrophoneStream(
  File "/home/rich/miniconda3/envs/assistant-riva-client/lib/python3.9/site-packages/riva/client/audio_io.py", line 48, in __enter__
    self._audio_stream = self._audio_interface.open(
  File "/home/rich/miniconda3/envs/assistant-riva-client/lib/python3.9/site-packages/pyaudio.py", line 750, in open
    stream = Stream(self, *args, **kwargs)
  File "/home/rich/miniconda3/envs/assistant-riva-client/lib/python3.9/site-packages/pyaudio.py", line 441, in __init__
    self._stream = pa.open(**arguments)
OSError: [Errno -9998] Invalid number of channels