Ich ging diesen Weg im Jahr 2009 und versuchte Audio Toolkit, Audio Queue Services, openAL und schließlich auf der RemoteIO AudioUnit.
Die Audio Toolbox eignet sich für grundlegende ausgelöste Soundeffekte, konnte jedoch Frequenzen oder Loop-Samples nicht ändern.
Audio Queue Services können Samples loopen, aber die einzige Möglichkeit, die Wiedergabefrequenz eines Samples anzupassen, war das erneute Lesen der Daten aus der Datei - sehr schmerzhaft. Außerdem ist das Framework enorm umständlich - ich würde es nur verwenden, wenn ich versuche, etwas aus dem Internet zu streamen.
OpenAL war ein Glücksfall - war in weniger als einer Stunde in Betrieb, nachdem ich die iPhone-Beispiel-App "CrashLanding" von Apple bekommen hatte, die es nicht mehr gibt. Ich fand, dass OpenAL ideal für Spiele oder sogar ein Musikinstrument geeignet ist - Samples konnten vorab geladen werden, die Frequenzanpassung war einfach, und Looping war kein Problem. Der Deal-Breaker für mich war, dass das Starten und Stoppen eines geloopten Samples fast jedes Mal zu einem unangenehmen "Pop" führen würde. Auch der eingebaute 3D-Audio-Mixer war für meinen Geschmack etwas zu CPU-intensiv.
Wenn Ihr Instrument keine geloopten Samples verwendet, würde ich vorschlagen, zuerst die OpenAL-Route zu versuchen - die Lernkurve ist viel weniger einschüchternd. Versuchen Sie, die Spur zu kommen „SoundEngine.h“, „CrashLanding“ oder „TouchFighter“, oder lesen Sie den folgenden Link:
http://benbritten.com/blog/2008/11/06/openal-sound-on-the-iphone/
Da geloopten Samples wurde für mich eine Voraussetzung, ich schließlich auf Audio Units angesiedelt (die , auf dem iPhone, wird als "RemoteIO" bezeichnet, wenn Sie Eingaben oder Ausgaben machen möchten. Es war extrem schwierig zu implementieren - sehr ähnlich wie bei Audio Queue Services, da der Kern der Implementierung in einem "Puffer-Callback" liegt, der mehrmals pro Sekunde aufgerufen wird, um einen Puffer für ausgehende Audiodaten mit Roh-SInt16-Werten zu füllen.
Letztendlich habe ich mein Instrument wunderbar mit Mehrnoten-Polyphonie, geloopten Samples, ohne Popping und minimaler Latenz arbeiten lassen.
Leider ist RemoteIO nicht gut dokumentiert.Michael Tyson war einer der ersten, im Bereich über RemoteIO ausführlich zu schreiben, und seine Beiträge (und Kommentare) waren sehr nützlich für mich:
http://michael.tyson.id.au/2008/11/04/using-remoteio-audio-unit/
Viel Glück!
Bearbeitet Jahre später: Ich habe den RemoteIO/AudioUnits-Code, auf den ich oben Bezug genommen habe: https://github.com/glenn-barnett/hexaphone/blob/master/Classes/Instrument.m - Entschuldigung für das Chaos, ich hoffe, etwas Zeit zu bekommen, um den Code und Kommentare aufzuräumen.
Danke für den Tipp. Ich probiere OpenAL mit dem oalTouch-Beispielcode aus, aber ich kann die Einstellung nicht finden, um Tonhöhe oder Frequenz im laufenden Betrieb zu ändern. Jeder Tipp in die richtige Richtung wird sehr geschätzt! – Matthew
Vergesst nicht. Ich habe herausgefunden, wie man die Tonhöhe einstellt. Der Beispielcode für oalTouch verwaltet nur eine Sounddatei, also muss ich mir SoundManager unbedingt anschauen. – Matthew
Der SoundEngine-Code funktioniert sehr gut auf iPhone OS 2.21 SDK, aber nicht auf 3.0 des SDK kompilieren. Irgendeine Idee, wenn es eine neue Version gibt? – Matthew