Четене на изхода на звуковата карта с python

Успешно използвах pyaudio за четене и запис на данни от микрофона. Бих искал да направя същото за изхода на звуковата карта. (т.е. възпроизвеждане на wav файл и отваряне на поток с pyaudio и четене кадър по кадър изхода на звуковата карта).

За четене на микрофон отворих pyaudio поток като следния

stream = pyaud.open(
    format = pyaudio.paInt16,
    channels = 1,
    rate = 22050,
    input_device_index = 0,
    input = True)

когато променя input_device_index на 1, получавам следната грешка

IOError: [Errno Невалиден брой канали] -9998

По-долу е system_info за звуковата карта на macbook

Default Devices:
================
Default Input Device : 0
    defaultSampleRate: 44100.0
    defaultLowOutputLatency: 0.01
    defaultLowInputLatency: 0.00199546485261
    maxInputChannels: 2
    structVersion: 2
    hostApi: 0 (Core Audio)
    index: 0
    defaultHighOutputLatency: 0.1
    maxOutputChannels: 0
    name: Built-in Microph
    defaultHighInputLatency: 0.0121541950113
    --------------------------------
Default Output Device: 1
    defaultSampleRate: 44100.0
    defaultLowOutputLatency: 0.00655328798186
    defaultLowInputLatency: 0.01
    maxInputChannels: 0
    structVersion: 2
    hostApi: 0 (Core Audio)
    index: 1
    defaultHighOutputLatency: 0.0167120181406
    maxOutputChannels: 2
    name: Built-in Output
    defaultHighInputLatency: 0.1
    --------------------------------

person Panos    schedule 05.04.2015    source източник
comment
Чудя се... Имате wav файл. Защо искате първо да го прекарате през звуковата карта? Прочетете го директно с модула 'wave' python! Имате директен достъп до кадрите и всички вълнови параметри. Много по-лесно (поне на мен ми се струва)!   -  person jcoppens    schedule 05.04.2015
comment
В моя сценарий няма наличен wavфайл. Да кажем, че искам да обработя аудио поток (т.е. VoIP повикване или аудиото на видеоклип в YouTube) и да извърша обработка на сигнала в реално време (т.е. да изчисля силата на звука и да направя някои пояснения).   -  person Panos    schedule 05.04.2015
comment
Добавих информацията като отговор.   -  person jcoppens    schedule 05.04.2015
comment
Благодаря за коментарите   -  person Panos    schedule 05.04.2015


Отговори (1)


Някои звукови карти имат канали 'Capture', което е изходът на звуковата карта. Те може или не могат да работят правилно (изглежда е имало натиск от страна на музикалната индустрия за премахване на тези портове).

Следното е за Linux... Напр. на моята система имам само стандартен вграден ALC887 аудио порт. В /proc/asound/card0 намирам порт pcm2c, който има следната информация:

card: 0
device: 2
subdevice: 0
stream: CAPTURE
id: ALC887-VD Alt Analog
name: ALC887-VD Alt Analog
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1

Тези устройства за заснемане трябва да се показват във вашия аудио миксер.

person jcoppens    schedule 05.04.2015