2016-04-27 18 views
5

Quando si registra audio tramite PyAudio, come si specifica il dispositivo di input esatto da utilizzare?Come selezionare un dispositivo di input specifico con PyAudio

Il mio computer ha due microfoni, uno incorporato e uno via USB, e voglio registrare usando il microfono USB. Lo Stream class ha un input_device_index per la selezione del dispositivo, ma non è chiaro come questo indice sia correlato ai dispositivi. Ad esempio, come faccio a sapere a quale indice del dispositivo si riferisce? Se dovessi indovinare, direi che 0 si riferisce al dispositivo incorporato mentre 1 si riferisce al dispositivo USB, ma mi piacerebbe trovare un modo programmatico per confermare questo. Su Linux, c'è un modo per ottenere un elenco di questi indici e dei dispositivi a cui si riferiscono?

risposta

1

Io ho mai guardato pyaudio ma ho usato sounddevice così in poche occasioni.

Ecco un codice di esempio che elenca input disponibile e outputaudio devices.

import sounddevice as sd 
print sd.query_devices() 

Come si può vedere dal basso uscita, quando ho messo il mio auricolare al jack microfono, Index 1 è disponibile come input. 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

Mentre portatile predefinita l'audio del microfono viene in su come index 2

2 Microphone Array (IDT High Defi, MME (2 in, 0 out)

uscita

Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> ================================ RESTART ================================ 
>>> 
    0 Microsoft Sound Mapper - Input, MME (2 in, 0 out) 
> 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out) 
    2 Microphone Array (IDT High Defi, MME (2 in, 0 out) 
    3 Microsoft Sound Mapper - Output, MME (0 in, 2 out) 
< 4 Speakers/Headphones (IDT High, MME (0 in, 2 out) 
    5 Communication Headphones (IDT H, MME (0 in, 2 out) 
    6 Primary Sound Capture Driver, Windows DirectSound (2 in, 0 out) 
    7 Jack Mic (IDT High Definition Audio CODEC), Windows DirectSound (2 in, 0 out) 
    8 Microphone Array (IDT High Definition Audio CODEC), Windows DirectSound (2 in, 0 out) 
    9 Primary Sound Driver, Windows DirectSound (0 in, 2 out) 
    10 Speakers/Headphones (IDT High Definition Audio CODEC), Windows DirectSound (0 in, 2 out) 
    11 Communication Headphones (IDT High Definition Audio CODEC), Windows DirectSound (0 in, 2 out) 
    12 Communication Headphones (IDT High Definition Audio CODEC), Windows WASAPI (0 in, 2 out) 
    13 Speakers/Headphones (IDT High Definition Audio CODEC), Windows WASAPI (0 in, 2 out) 
    14 Jack Mic (IDT High Definition Audio CODEC), Windows WASAPI (2 in, 0 out) 
    15 Microphone Array (IDT High Definition Audio CODEC), Windows WASAPI (2 in, 0 out) 
    16 Headset Microphone (Bluetooth Hands-free Audio), Windows WDM-KS (1 in, 0 out) 
    17 Headphones (Bluetooth Hands-free Audio), Windows WDM-KS (0 in, 2 out) 
    18 Headphones (HpOut), Windows WDM-KS (0 in, 2 out) 
    19 Microphone Array (MicIn2), Windows WDM-KS (2 in, 0 out) 
    20 Jack Mic (MuxedIn), Windows WDM-KS (2 in, 0 out) 
    21 Dock Mic (MuxedIn), Windows WDM-KS (2 in, 0 out) 
    22 Rec. Playback (MuxedIn), Windows WDM-KS (2 in, 0 out) 
    23 Speakers (Speaker/HP), Windows WDM-KS (0 in, 2 out) 
7

è possibile utilizzare: get_device_info_by_host_api_device_index. Ad esempio:

import pyaudio 
p = pyaudio.PyAudio() 
info = p.get_host_api_info_by_index(0) 
numdevices = info.get('deviceCount') 
for i in range(0, numdevices): 
     if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0: 
      print "Input Device id ", i, " - ", p.get_device_info_by_host_api_device_index(0, i).get('name') 
+0

Questo codice non è riuscito per me. Necessario aggiungere anche: info = p.get_host_api_info_by_index (0) e quindi numdevices = info.get ('deviceCount'). Inoltre avevo bisogno di usare p invece di self.p, e poi ha funzionato. Per favore, correggi la tua risposta e poi la invierò. Grazie. –

+0

@WaynePiekarski Fatto. Grazie! – slegroux

Problemi correlati