2009-09-09 6 views
5

Vorrei scrivere un'applicazione multipiattaforma in grado di elaborare e riprodurre i dati del microfono in tempo reale. Immagina come prova del concetto una chat room in cui le persone possano parlare tra loro e applicare filtri alle loro voci. OpenAL è appropriato per questo? In caso contrario, qualcuno può fornire un'alternativa? Inoltre, se qualcuno può fornirmi o collegarmi a un semplice programma "ciao mondo" che legge dal microfono e sputa l'uscita, sarebbe fantastico.Elaborazione audio in tempo reale OpenAL dal microfono

Grazie!

+0

Sono anche interessato a questo. Peccato che nessuno abbia risposto = / – CptAJ

risposta

-1

Apple ha due campioni (o più) che lo fanno. Controlla aurioTouch e SpeakHere. aurioTouch può prendere l'input mic e riprodurlo e SpeakHere può prendere input e registrarlo, e puoi facilmente modificarlo per riprodurlo.

2

OpenAL è tecnicamente in grado di farlo secondo l'API, ma l'implementazione di Apple per iOS non include le funzionalità di acquisizione audio.

Su iOS, è necessario utilizzare le code audio o le unità audio per la registrazione. Per applicare effetti in tempo reale, Audio Units è la strada da percorrere, anche se molto più complicata di Audio Queue.

3

OpenAL potrebbe non essere ottimo per questo scopo. Vorrei raccomandare l'uso di SDL (forse con SDL_Mixer) o PortAudio. Entrambi sono multipiattaforma ed entrambi sono abbastanza facili da usare.

Per utilizzare OpenAL a questo scopo è necessario eseguire il polling per vedere quanti campioni sono stati accumulati in un buffer circolare nascosto. Poi li prendi quando decidi di essere pronto. Quindi applichi il filtro. Quindi alleghi i dati filtrati a un buffer. Quindi accodate il buffer a una sorgente e chiedete alla sorgente di giocare (a meno che non stia già giocando). Il punto di forza di OpenAL, a mio parere, è l'applicazione degli effetti 3D. Non è altrettanto efficace nel filtraggio in tempo reale, anche se mi aspetto che tu possa farlo funzionare se sei disposto ad accettare un po 'più di ritardo sull'output. Preferisco il modello di callback sul modello di oggetti buffer per il filtraggio.


Edit: ho postato un codice che avrebbe fatto esattamente questo oltre a: OpenAL: How to create simple "Microphone Echo" programm? Un commento indica dove si metterebbe al trattamento.