2016-04-27 25 views
5
ile belirli bir giriş cihazı nasıl seçilir

PyAudio ile ses kaydederken, kullanılacak giriş cihazını nasıl belirlersiniz?PyAudio

Bilgisayarımın biri USB ve diğeri USB olmak üzere iki mikrofon ve USB mikrofonu kullanarak kaydetmek istiyorum. Stream class, cihazı seçmek için bir input_device_index ürününe sahiptir, ancak bu endeksin cihazlarla nasıl ilişkilendirildiği açık değildir. Örneğin, 0 numaralı cihaz endeksinin ne anlama geldiğini nasıl bilebilirim? Tahmin etmem gerekirse, cihaz 1'i USB cihazına atıfta bulunurken, yerleşik cihazı ifade eder, ancak bunu doğrulamak için programatik bir yol bulmak isterdim. Linux'ta, bu indekslerin ve başvurulan cihazların listesini almanın bir yolu var mı?

cevap

1

Ben pyaudio baktım sığınak ama birkaç kez de sounddevice kullandım.

İşte input ve outputaudio devices listelerini listeleyen örnek bir kod.

import sounddevice as sd 
print sd.query_devices() 

Sana mikrofon jakı benim kulaklık koymak çıkışı, aşağıda da görebileceğiniz gibi

, Index 1 girdi olarak kullanılabilir. 1 Jack Mic (IDT High Definition A, MME (2 in, 0 out)

varsayılan dizüstü ses mikrofonu index 2

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

Çıktı

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

olarak çıkageldi ederken kullanabilirsiniz: get_device_info_by_host_api_device_index. Örneğin:

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

Bu kod benim için başarısız oldu. Ayrıca eklemek gerekiyor: info = p.get_host_api_info_by_index (0) ve daha sonra numdevices = info.get ('deviceCount'). Ayrıca self.p yerine p kullanmam gerekti ve sonra çalıştı. Lütfen cevabınızı düzeltin ve o zamana kadar vereceğim. Teşekkürler. –

+0

@WaynePiekarski Bitti. Teşekkürler! – slegroux