2016-04-27 16 views
5

Wie können Sie bei der Aufnahme von Audio über PyAudio das genaue zu verwendende Eingabegerät angeben?So wählen Sie ein bestimmtes Eingabegerät mit PyAudio aus

Mein Computer hat zwei Mikrofone, einen eingebauten und einen über USB, und ich möchte mit dem USB-Mikrofon aufnehmen. Die Stream class hat eine input_device_index für die Auswahl des Geräts, aber es ist unklar, wie dieser Index mit den Geräten korreliert. Woher weiß ich zum Beispiel, auf welchen Geräteindex 0 sich bezieht? Wenn ich raten müsste, würde ich sagen, 0 bezieht sich auf das eingebaute Gerät, während 1 auf das USB-Gerät verweist, aber ich würde gerne einen programmatischen Weg finden, dies zu bestätigen. Gibt es unter Linux eine Möglichkeit, eine Liste dieser Indizes und der Geräte, auf die sie verweisen, zu erhalten?

Antwort

0

Ich weiß nicht, über PyAudio, aber mit dem sounddevice Modul geht es wie folgt aus:

python3 -m sounddevice 
1

Ich habe nicht an pyaudio aussah, aber ich habe sounddevice auch auf einigen Gelegenheiten verwendet.

Hier ist ein Beispielcode, der die verfügbaren input und outputaudio devices auflistet.

import sounddevice as sd 
print sd.query_devices() 

Wie man es von unten Ausgang sehen kann, wenn ich mein Headset Mikrofon-Buchse stecken, ist Index 1 als Eingabe zur Verfügung. 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

Während Standard-Laptop Audio-Mikrofon kommt als index 2

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

Ausgabe

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

können Sie: get_device_info_by_host_api_device_index. Zum Beispiel:

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

Dieser Code ist für mich fehlgeschlagen. Benötigt, um auch hinzuzufügen: info = p.get_host_api_info_by_index (0) und dann numdevices = info.get ('deviceCount'). Außerdem musste ich p anstelle von self.p verwenden, und dann funktionierte es. Bitte korrigieren Sie Ihre Antwort und ich werde es dann aufwerten. Vielen Dank. –

+0

@WaynePiekarski Fertig. Vielen Dank! – slegroux

Verwandte Themen