2016-04-27 2 views
5

Lors de l'enregistrement audio via PyAudio, comment spécifiez-vous le périphérique d'entrée exact à utiliser?Comment sélectionner un périphérique d'entrée spécifique avec PyAudio

Mon ordinateur possède deux microphones, un intégré et un via USB, et je veux enregistrer en utilisant le micro USB. Le Stream class a un input_device_index pour sélectionner le périphérique, mais il n'est pas clair comment cet indice est corrélé aux périphériques. Par exemple, comment savoir à quel périphérique l'index 0 fait référence? Si je devais deviner, je dirais 0 se réfère à l'appareil intégré tandis que 1 se réfère à l'appareil USB, mais je voudrais trouver une manière programmatique de confirmer cela. Sous Linux, existe-t-il un moyen d'obtenir une liste de ces index et des périphériques auxquels ils font référence?

Répondre

0

Je ne sais pas PyAudio, mais avec le module sounddevice il va comme ça:

python3 -m sounddevice 
1

Je nai regardé pyaudio mais j'ai utilisé sounddevice aussi bien à quelques reprises.

Voici un exemple de code qui répertorie les codes input et outputaudio devices disponibles.

import sounddevice as sd 
print sd.query_devices() 

Comme vous pouvez le voir ci-dessous la sortie, quand je mets mon casque à la prise micro, Index 1 est disponible en entrée. 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

Alors que le microphone audio portable par défaut est comme index 2

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

Sortie

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

vous pouvez utiliser: get_device_info_by_host_api_device_index. Par exemple:

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

Ce code a échoué pour moi. Nécessaire pour ajouter aussi: info = p.get_host_api_info_by_index (0) puis numdevices = info.get ('deviceCount'). Aussi j'avais besoin d'utiliser p au lieu de self.p, et ensuite cela a fonctionné. S'il vous plait, réparez votre réponse et je la remettrai alors. Merci. –

+0

@WaynePiekarski Fait. Merci! – slegroux