2015-10-10 1 views
1

Je ne parviens pas à obtenir un flux PyAudio pour capturer les données audio de mon microphone USB. Je suis un programme Python sur Ubuntu fidèle (Ubuntu 14.04.3 LTS). J'ai configuré ALSA pour régler mon micro USB comme carte son par défaut, et testé que ce travail est correctement en exécutant:PyAudio ne capture pas les données audio correctes

arecord -D plughw:0,0 -f cd test.wav

puis jouer ce audio à l'aide de retour

aplay -D plughw:0,0 test.wav

Mon fichier /etc/modprobe.d/alsa-base.conf ressemble à ceci:

# autoloader aliases 
install sound-slot-0 /sbin/modprobe snd-card-0 
install sound-slot-1 /sbin/modprobe snd-card-1 
install sound-slot-2 /sbin/modprobe snd-card-2 
install sound-slot-3 /sbin/modprobe snd-card-3 
install sound-slot-4 /sbin/modprobe snd-card-4 
install sound-slot-5 /sbin/modprobe snd-card-5 
install sound-slot-6 /sbin/modprobe snd-card-6 
install sound-slot-7 /sbin/modprobe snd-card-7 

# Cause optional modules to be loaded above generic modules 
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; } 
# 
# Workaround at bug #499695 (reverted in Ubuntu see LP #319505) 
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; } 
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; } 
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; } 
# 
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; } 
# Cause optional modules to be loaded above sound card driver modules 
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; } 
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; } 

# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway) 
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; } 
# Prevent abnormal drivers from grabbing index 0 
options bt87x index=-2 
options cx88_alsa index=-2 
options saa7134-alsa index=-2 
options snd-atiixp-modem index=-2 
options snd-intel8x0m index=-2 
options snd-via82xx-modem index=-2 
# options snd-usb-audio index=-2 
options snd-usb-audio index=0 
options snd-usb-caiaq index=-2 
options snd-usb-ua101 index=-2 
options snd-usb-us122l index=-2 
options snd-usb-usx2y index=-2 
# Ubuntu #62691, enable MPU for snd-cmipci 
options snd-cmipci mpu_port=0x330 fm_port=0x388 
# Keep snd-pcsp from being loaded as first soundcard 
options snd-pcsp index=-2 

J'ai installé PyAudio avec succès, mais lorsque j'ouvre un flux, je ne reçois aucune donnée audio. Ma compréhension est que le périphérique par défaut est utilisé lors de l'ouverture d'un flux avec PyAudio (sauf indication contraire par l'argument input_device_index que je ne suis pas en train de définir).

p = pyaudio.PyAudio() 
    stream = p.open(
     format=pyaudio.paInt16, 
     channels=1, 
     rate=18000, 
     input=True, 
     frames_per_buffer=1024 
    ) 

Quand je lance PyAudio().get_device_info_by_index(0), je reçois:

{'defaultSampleRate': 16000.0, 'defaultLowOutputLatency': 0.0239375, 'defaultLowInputLatency': 0.0239375, 'maxInputChannels': 1L, 'structVersion': 2L, 'hostApi': 0L, 'index': 0, 'defaultHighOutputLatency': 0.096, 'maxOutputChannels': 2L, 'name': u'Jabra SPEAK 410 USB: Audio (hw:0,0)', 'defaultHighInputLatency': 0.096} 

^que (Jabra SPEAK 410 USB: Audio) est mon micro USB.

Ce sont les journaux que PyAudio crache quand il est chargé (avant même que le flux ne soit ouvert). J'ai lu en ligne, cependant, que je peux ignorer la plupart de ces erreurs.

ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM hdmi 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.hdmi.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM hdmi 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.modem.0:CARD=0' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline:CARD=0,DEV=0 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.modem.0:CARD=0' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline:CARD=0,DEV=0 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.modem.0:CARD=0' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM phoneline 
ALSA lib confmisc.c:1286:(snd_func_refer) Unable to find definition 'cards.USB-Audio.pcm.modem.0:CARD=0' 
ALSA lib conf.c:4248:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory 
ALSA lib conf.c:4727:(snd_config_expand) Evaluate error: No such file or directory 
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM phoneline 
bt_audio_service_open: connect() failed: Connection refused (111) 
bt_audio_service_open: connect() failed: Connection refused (111) 
bt_audio_service_open: connect() failed: Connection refused (111) 
bt_audio_service_open: connect() failed: Connection refused (111) 
Cannot connect to server socket err = No such file or directory 
Cannot connect to server request channel 
jack server is not running or cannot be started 

Il semble que le flux collecte des données lorsqu'il est ouvert, mais il ne capture aucun son. Mon micro est allumé, réactivées et mis à capturer l'audio à un niveau de 86

Je pense en quelque sorte le périphérique par défaut n'est pas réglé correctement (avec ALSA), parce que quand je fais:

arecord test.wav

et

aplay test.wav

rien est enregistrée.

Répondre

1

Compris. On dirait qu'Ubuntu est livré avec PulseAudio et ALSA. Et PulseAudio détournait l'emplacement par défaut du périphérique.

Ceci est un peu "rigide, mais j'ai juste supprimé PulseAudio complètement et les problèmes ont disparu.

sudo apt-get autoremove pulseaudio