2016-04-27 9 views
5

के साथ एक विशिष्ट इनपुट डिवाइस का चयन कैसे करें PyAudio के माध्यम से ऑडियो रिकॉर्ड करते समय, आप उपयोग करने के लिए सटीक इनपुट डिवाइस कैसे निर्दिष्ट करते हैं?PyAudio

मेरे कंप्यूटर में दो माइक्रोफ़ोन हैं, एक अंतर्निर्मित और यूएसबी के माध्यम से एक, और मैं यूएसबी माइक का उपयोग करके रिकॉर्ड करना चाहता हूं। डिवाइस का चयन करने के लिए Stream class में input_device_index है, लेकिन यह स्पष्ट नहीं है कि यह सूचकांक डिवाइस से कैसे संबंधित है। उदाहरण के लिए, मुझे कैसे पता चलेगा कि कौन सा डिवाइस इंडेक्स 0 संदर्भित करता है? अगर मुझे लगता है, तो मैं कहूंगा कि 0 अंतर्निर्मित डिवाइस को संदर्भित करता है जबकि 1 यूएसबी डिवाइस को संदर्भित करता है, लेकिन मैं इसकी पुष्टि करने के कुछ प्रोग्रामेटिक तरीके को ढूंढना चाहता हूं। लिनक्स पर, क्या इन इंडेक्स और उनके द्वारा संदर्भित डिवाइसों की सूची प्राप्त करने का कोई तरीका है?

उत्तर

0

मैं PyAudio के बारे में पता नहीं है, लेकिन sounddevice मॉड्यूल के साथ ऐसा हो जाता है:

python3 -m sounddevice 
1

मैं pyaudio को देखा नहीं किया, लेकिन मैं कुछ अवसरों पर sounddevice का उपयोग किया है और साथ ही।

यहां एक उदाहरण कोड है जो input और outputaudio devices उपलब्ध कराता है।

import sounddevice as sd 
print sd.query_devices() 

आप उत्पादन, जब मैं माइक जैक करने के लिए अपने हेडसेट डाल के नीचे से देख सकते हैं, Index 1 इनपुट के रूप में उपलब्ध है। 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

डिफ़ॉल्ट लैपटॉप ऑडियो माइक्रोफोन के रूप में index 2

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

आउटपुट

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

ऊपर आता है जब आप उपयोग कर सकते हैं: get_device_info_by_host_api_device_index। उदाहरण के लिए:

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

यह कोड मेरे लिए असफल रहा। जोड़ने की भी आवश्यकता है: info = p.get_host_api_info_by_index (0) और फिर numdevices = info.get ('deviceCount')। इसके अलावा मुझे self.p के बजाय पी का उपयोग करने की आवश्यकता थी, और फिर यह काम किया। कृपया अपना उत्तर ठीक करें और मैं इसे फिर से बढ़ा दूंगा। धन्यवाद। –

+0

@WaynePiekarski हो गया। धन्यवाद! – slegroux

संबंधित मुद्दे