2013-12-24 3 views
6

Я попыталсяСписок всех аудио устройств с pyaudio Пайтона (Portaudio связывания)

import pyaudio 
p = pyaudio.PyAudio() 
for i in range(p.get_device_count()): 
    print p.get_device_info_by_index(i) 

, но я не получить полный список всех устройств: например, я не получаю устройств ASIO в этом списке. Это странно, потому что portaudio должен также предоставить устройства ASIO, верно?

Как я могу перечислить все аудиоустройства с помощью pyaudio?

+0

Я пытался ваш код, с двоичным кодом pyaudio: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio для меня он печатает все мои устройства ASIO –

+0

Да @EmileVrijdags, я связался с М. Гольке несколько месяцев назад , и он обновил его двоичные файлы с поддержкой ASIO. (мой оригинальный пост был в декабре 2013 года) – Basj

+0

круто! Я хорошо его использую;) –

ответ

-2

Я думаю, что проблема может быть в базовой библиотеке PortAudio. У вас есть (или вы можете написать на C) простую утилиту, которая обращается к библиотеке PortAudio и пытается выполнить этот же список?

Кроме того, прибегая к помощи «Portaudio ASIO» показывает this tidbit from the official PortAudio docs:

Есть случаи, когда Portaudio ограничена возможностями подстилающей родной аудио API ... ASIO SDK позволяет только одно устройство быть открытым одновременно, поэтому PortAudio/ASIO в настоящее время не поддерживает открытие нескольких устройств ASIO одновременно.

+0

Мне нужно это изучить. У меня нет установленного компилятора/компоновщика C (и тех библиотек нет), и не знаю об этом ... У вас есть такие инструменты @MultimediaMike? – Basj

+0

Тот факт, что PortAudio не может открывать * потоки * для нескольких устройств ASIO одновременно, не имеет отношения к перечислению информации об устройстве. –

+0

Модуль 'sounddevice' также использует PortAudio, который * может * найти правильное устройство. – JakeD

1

Я думаю, что ваши ожидания разумны. Эквивалентный код C для перечисления устройств PortAudio предоставит вам все доступные устройства. Есть несколько вещей, которые могут быть неправильными:

  • Ваша сборка PyAudio не была скомпилирована с поддержкой ASIO. PortAudio будет только перечислять устройства для собственных API-интерфейсов хостов, которые были сконфигурированы/скомпилированы во время компиляции.

  • У вас есть 64-битная сборка Python/PyAudio, а ваши драйверы устройств ASIO - 32-разрядные или наоборот (64-разрядные драйверы ASIO и 32-разрядный Python).

Как подсказывает Мультимедиа Майк, вы можете устранить PyAudio из уравнения путем перечисления устройств PA от C. Программа pa_devs.c в распределении Portaudio делает это.

+0

Спасибо за ваш ответ. Я потратил часы и часы, чтобы попытаться скомпилировать PyAudio * с поддержкой ASIO (благодаря обсуждению https://github.com/bastibe/PyAudio/pull/4), но, к сожалению, я не могу закончить компиляцию ... Если у вас есть время чтобы посмотреть процедуру, описанную здесь, https://github.com/bastibe/PyAudio/pull/4 @RossBencina, спасибо заранее! – Basj

3

Я создал (через некоторое время после того, как этот вопрос был отправлен) модуль sounddevice для Python, который включает в себя its own DLLs с поддержкой ASIO (и все другие API-интерфейсы хоста). Он может быть установлен с:

pip install sounddevice --user 

После этого, вы можете просмотреть список всех устройств с:

python -m sounddevice 

Конечно, вы также можете сделать это в Python:

import sounddevice as sd 
sd.query_devices() 

 Смежные вопросы

  • Нет связанных вопросов^_^