2012-10-18 15 views
5

Ich bin ein MIDI-Synthesizer mit CoreAudio erstellen. Derzeit habe ich die folgende Audio-Diagramm:Benutzerdefinierte Audio-Effekt in CoreAudio Audio Graph - Render-Callback

Sampler -> Reverb -> IO 

Ich brauche einen Chorus-Effekt auf die grafische Darstellung sowie den Hall hinzuzufügen. Das Problem ist, dass es auf dem iPhone keinen Chorus-Effekt gibt. Um das zu umgehen, habe ich vor, meinen eigenen Chorus-Effekt zu implementieren. Dazu brauche ich Zugriff auf den Audio-Stream.

Die Frage ist: Was ist der beste Weg, um Zugriff auf den Audio-Stream in der Mitte der Audio-Grafik zu bekommen.

Sampler -> Reverb -> [Custom processing] -> IOUnit 

Gibt es eine Weise, die ich den Audio-Stream so etwas wie der AudioUnitAddRenderNotify Rückruf unter Verwendung ändern kann? oder muss ich die Audiodatei folgendermaßen brechen:

Sampler -> Reverb -> [AudioUnitAddRenderNotify callback] -> buffer -> [RenderCallback] -> IOUnit 

Jeder Rat würde geschätzt werden.

Antwort

2

Der einfachste Weg besteht darin, einen Render-Notify-Callback (AudioUnitAddRenderNotify) zur AU Ihres Reverb-Knotens hinzuzufügen und das Audio unter dem kAudioUnitRenderAction_PostRender-Aufruf zu verarbeiten. Ich habe ein Experiment durchgeführt und das funktioniert, solange der Callback nach dem Öffnen des AUGraphs hinzugefügt wurde und keine Verarbeitung im PreRender-Aufruf erfolgte.

+0

Das hat funktioniert. Es stellt sich heraus, dass Sie die Audioinformationen im laufenden Betrieb mithilfe der Render-Benachrichtigung ändern können. –