Обработка звука в реальном времени OpenAL с микрофона

Я хотел бы написать кроссплатформенное приложение, которое могло бы обрабатывать и воспроизводить данные микрофона в реальном времени. Представьте себе в качестве доказательства концепции чат-комнату, где люди могут разговаривать друг с другом и применять фильтры к своим голосам. Подходит ли для этого OpenAL? Если нет, может ли кто-нибудь предоставить альтернативу? Вдобавок, если бы кто-нибудь мог предоставить или связать меня с простой программой "hello world", которая читает с микрофона и выводит результат обратно, это было бы здорово.

Спасибо!


person Community    schedule 09.09.2009    source источник
comment
Меня это тоже интересует. Жаль, никто не ответил = /   -  person CptAJ    schedule 30.09.2009


Ответы (3)


OpenAL может не подойти для этой цели. Я бы рекомендовал использовать SDL (возможно, с SDL_Mixer) или PortAudio. Оба являются кроссплатформенными и довольно просты в использовании.

Чтобы использовать OpenAL для этой цели, вы должны опросить, чтобы увидеть, сколько выборок накопилось в скрытом кольцевом буфере. Затем вы берете их, когда решаете, что готовы. Затем вы применяете свой фильтр. Затем вы прикрепляете отфильтрованные данные к буферу. Затем вы ставите буфер в очередь на источник и приказываете источнику воспроизвести (если он еще не воспроизводится). На мой взгляд, сильная сторона OpenAL заключается в применении трехмерных эффектов. Он не так хорош при фильтрации в реальном времени, хотя я ожидаю, что вы сможете заставить его работать, если вы готовы принять немного большую задержку на выходе. Я предпочитаю модель обратного вызова модели буферного объекта для фильтрации.


Изменить: я разместил код, который будет делать именно это, по адресу: OpenAL: Как создать простую программу Microphone Echo? В комментариях указано, где можно разместить обработку.

person JCooper    schedule 31.03.2011

OpenAL технически способен на это в соответствии с API, но реализация Apple для iOS не включает функции захвата звука.

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

person Karl    schedule 31.03.2011

У Apple есть два (или более) образца, которые делают это. Проверьте aurioTouch и SpeakHere. aurioTouch может принимать входные данные с микрофона и воспроизводить их, а SpeakHere может принимать входные данные и записывать их, и вы можете довольно легко изменить его для воспроизведения.

person mahboudz    schedule 24.10.2009