2009-09-09 7 views
5

Me gustaría escribir una aplicación multiplataforma que pueda procesar y reproducir datos de micrófono en tiempo real. Imagine como una prueba de concepto una sala de chat donde las personas pueden hablar entre ellas y aplicar filtros a sus voces. ¿OpenAL es apropiado para esto? Si no, ¿alguien puede proporcionar una alternativa? Además, si alguien puede proporcionarme o vincularme a un simple programa "hello world" que lee desde el micrófono y escupe la salida, sería increíble.OpenAL Real Time Audio Processing desde el micrófono

Gracias!

+0

También estoy interesado en esto. Lástima que nadie ha respondido = / – CptAJ

Respuesta

-1

Apple tiene dos muestras (o más) que hacen eso. Echa un vistazo a aurioTouch y SpeakHere. aurioTouch puede tomar la entrada de micrófono y reproducirla y SpeakHere puede tomar entrada y grabarla, y usted puede modificarla fácilmente para reproducirla.

2

OpenAL es técnicamente capaz de hacerlo de acuerdo con la API, pero la implementación de Apple para iOS no incluye las características de captura de audio.

En iOS, necesitará usar colas de audio o unidades de audio para grabar. Para aplicar efectos en tiempo real, Audio Units es el camino a seguir, aunque mucho más complicado que Audio Queues.

3

OpenAL puede que no sea excelente para este propósito. Recomendaría usar SDL (quizás con SDL_Mixer) o PortAudio. Ambos son multiplataforma y ambos son bastante fáciles de usar.

Para utilizar OpenAL para este propósito, debe sondear para ver cuántas muestras se han acumulado en un búfer circular oculto. Luego los agarras cuando decides que estás listo. Luego aplicas tu filtro. Luego adjuntas los datos filtrados a un buffer. A continuación, pone en cola el búfer en una fuente y le dice a la fuente que juegue (a menos que ya se esté reproduciendo). La fuerza de OpenAL, en mi opinión, es para aplicar efectos 3D. No es tan bueno en el filtrado en tiempo real, aunque espero que pueda hacer que funcione si está dispuesto a aceptar un poco más de retraso en la salida. Prefiero el modelo de devolución de llamada sobre el modelo de objeto de búfer para el filtrado.


Editar: he publicado un código que haría exactamente sobre esto en: OpenAL: How to create simple "Microphone Echo" programm? Un comentario señala donde se podría poner el procesamiento.

Cuestiones relacionadas