Должен ли я использовать многопоточное программирование для микширования 2 аудиопотоков? - PullRequest
1 голос
/ 24 июня 2011

Я хотел бы написать программу, которая захватывает аудиопоток с микрофона и одновременно смешивает этот поток с воспроизводимым аудиофайлом.

Я ищу библиотеку, API и т. Д.и т.д ... но я беспокоюсь о реализации, я должен использовать многопоточное программирование?Я пока не знаю, как использовать поток.

Операционная система - Windows, язык - C ++ или Python.

спасибо

Ответы [ 4 ]

1 голос
/ 24 июня 2011

Я думаю, что вам понадобится какая-то многопоточность, чтобы захват и воспроизведение проходили гладко бок о бок.

Помните, что многопоточность в Python ограничена GIL . В C ++ вы можете использовать что-то вроде Boost.Thread.

В общем, правильно настроить многопоточность сложно, и вы должны не спешить, чтобы ознакомиться с ней. Ваш лучший вариант, вероятно, искать хорошую книгу.

0 голосов
/ 01 июля 2011

Вы можете взглянуть на источник Audacity AudioIO.cpp, который использует portmixer (также стоит посмотреть).

Вы можете заглянуть в portmixer, чтобы увидеть, как запустить аудиопоток в Windows.Есть также много хороших учебных пособий онлайн, таких как этот .

Хотя Windows Wave API запускает аудиопоток для вас, лучше всего иметь другой поток для чтения / анализа / декодированияаудиофайл, который вы хотите смешать и заполнить буфер, который доступен для обратного вызова аудиопотока.Portaudio / SDL / Open AL - это просто слой поверх хостов звука Windows (MME / Direct Sound), так что это по-прежнему верно, если вы используете один из них.

Но если вы чувствуете себя очень ленивымили просто хотите быстрое подтверждение концепции, можно выполнить заполнение буфера из аудиофайла в главном потоке.

Что касается входа микрофона, когда вы указываете детали потока, вы можете сказать, какие входы устройствавы хотите, и они предоставляются вам в виде массива int / float, который вы можете отправить непосредственно в выходной массив.В вашем случае вы хотите смешать (добавить) аудио файл.

0 голосов
/ 24 июня 2011

Вы можете использовать SDL микшер . Он запускает поток, так что вам не нужно это делать. Есть хорошие учебники и справочные страницы.

0 голосов
/ 24 июня 2011

py2.6 поставляется с обработкой на основе многопоточности, так что вам не нужно делать только green-thread

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...