Wo zu beginnen, die auf iOS-audio-synth?
Ich weiß, das ist ein sehr breites Thema, aber ich habe schon zappelte um mit demos und meine eigenen tests und bin nicht sicher, wenn ich Angriffe auf das problem, richtig. So führt auf, wo ich anfangen soll, wäre dankbar.
Ziel ist der app generieren einige synthetische Klänge, pro die Einstellungen des Benutzers. (Dies ist nicht die einzige app, die Funktion, ich bin nicht die Neuerstellung Korg hier, aber synth ist ein Teil davon.) Der Benutzer würde die typische synth-Einstellungen, wie das wave, reverb, etc. dann würde abholen, wenn Sie die note spielen würde, wahrscheinlich mit einem pitch-und velocity-modifier.
Habe ich ein wenig rumprobiert mit audio-unit-und RemoteIO, aber nur kaum zu verstehen, was ich Tue. Bevor ich ZU weit gehen nach unten, die Kaninchen-Loch, würde ich gerne wissen, ob ich bin sogar in der richtigen ballpark. Ich weiß, audio-synth sein wird low-level, aber ich bin der Hoffnung, dass vielleicht gibt es einige höhere level-Bibliotheken gibt, die ich verwenden kann.
Falls Sie noch irgendwelche Hinweise, wo Sie anfangen, und welche iOS-Technik sollte ich Lesen, um mehr, lassen Sie es mich bitte wissen.
Dank!
EDIT: lass mich besser zusammenfassen zu stellen.
Gibt es irgendwelche synth-Bibliotheken bereits integriert, für iOS? (kommerzielle oder Open-Source - ich habe keine gefunden mit zahlreichen sucht, aber vielleicht vermisse ich es.)
Gibt es höhere level-APIs, die helfen können, generieren Puffer einfacher?
Unter der Annahme, dass kann ich schon erzeugen, Puffer, gibt es eine bessere /einfachere Möglichkeit, senden diese Puffer auf die iOS-audio-Gerät als die RemoteIO Audio Gerät?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine wirklich gute Frage. Ich habe manchmal Fragen mich die gleichen Dinge, und ich immer am Ende mit der MoMu-Toolkit von den Jungs an der Stanford. Diese Bibliothek bietet eine schöne callback-Funktion, die Verbindung zu AudioUnits/AudioToolbox (nicht sicher), so dass alles, was Sie über Pflege ist die Abtastrate, die Größe des Puffers, und die bit-Tiefe von audio-samples, und man kann leicht zu synthetisieren/Prozess alles, was Sie gerne innerhalb der callback-Funktion.
Ich auch empfehlen, die Synthesis ToolKit (STK) für iOS wurde auch veröffentlicht von Ge Wang an der Stanford. Wirklich Coole Sachen zu synthetisieren /Bearbeitung von audio.
Jedes mal, wenn Apple veröffentlicht eine neue iOS-version, die ich überprüfen Sie die Dokumentation neu, um zu finden, eine bessere (oder einfachere) Weise zu synthetisieren audio, aber immer ohne Erfolg.
EDIT: ich möchte hinzufügen, einen link zu den AudioGraph-source-code: https://github.com/tkzic/audiograph Dies ist eine wirklich interessante app um zu zeigen, das Potenzial von AudioUnits, gemacht von Tom Zicarelli. Der code ist wirklich einfach zu Folgen, und ein guter Weg, um dies zu erfahren-manche würden sagen - gewundenen Prozess der Umgang mit low-level-audio in iOS.
Swift & Objective C
Gibt es eine große open-source-Projekt, das ist gut dokumentiert mit videos und tutorials für beide Objektive-C & Swift.
AudioKit.io
Den niedrigsten Stand Weg, um den Puffer der Soundkarte ist durch die audiounit-api, und vor allem die remoteIO audiounit. Das ist ein Haufen Quatsch, aber es gibt ein paar Beispiele, die verstreut im web. http://atastypixel.com/blog/using-remoteio-audio-unit/ ist.
Ich mir vorstellen, dass es andere Wege gibt, zu füllen, Puffer, entweder mit dem AVFoundation-framework, aber ich habe das noch nie getan Sie.
Den anderen Weg, es zu tun ist, verwenden Sie openframeworks für alle Ihre audio-Zeug, aber das setzt auch Voraus, dass Sie möchten, um Ihre zeichnen in openGL. Reißen sich die Audio-Unit-Implementierung sollte nicht zu viel von einem Problem, obwohl, wenn Sie wollen, zu tun, Ihre Zeichnung in einer anderen Art und Weise. Diese Art der Implementierung ist schön, weil es wirft alles um -1..1 Schwimmer für Sie zu füllen.
Schließlich, wenn Sie wollen, eine Starthilfe auf eine Reihe von Oszillatoren /Filter /delay-Linien, können Sie Haken in der openframeworks-audio-system (oder Systeme, die verwendet arrays von -1..1 Schwimmer), die Sie vielleicht prüfen wollen,http://www.maximilian.strangeloop.co.uk.
Besteht aus zwei teilen: Erstens müssen Sie zum generieren von Puffer synthetisierten audio - das ist ziemlich viel-Plattform-agnostisch und Sie benötigen ein gutes Verständnis der audio-Synthese zu schreiben, dieses Teil. Der zweite Teil ist vorbei, diese Puffer zu einer entsprechenden OS-spezifischen API, so dass der Ton tatsächlich gespielt wird. Die meisten APIs für die audio-Wiedergabe unterstützen double-buffering oder sogar mehrere Puffer, so dass Sie synthetisieren Zukunft Puffer während der Wiedergabe des aktuellen Puffers. Wie die iOS-API zu verwenden, das wird wohl davon abhängen, welche Art von Architektur, die Sie für Ihre app, aber das ist wirklich der einfache Teil. Der Synthese-Teil ist, wo Sie brauchen, um die meiste Arbeit zu tun.
Ich weiß, das ist ein wenig alt, aber das scheint der falsche Weg zu mir - was sollten Sie wahrscheinlich tun, ist das Auffinden eines audio-unit-synthesizer, die Modelle die Art von änderungen, die Sie tun möchten. Es gibt viele von Ihnen, einige von Ihnen open-source, andere möglicherweise lizenzierbare - und host-audio-Geräte von Ihrem code. Die Mechanismen, die oben beschrieben scheinen, wie Sie würde gut funktionieren, aber Sie sind nicht wirklich optimiert für die ios-Plattform.
Ich weiß, das Thema ist alt, und ich bin erstaunt, dass sich die situation auf iOS ist immer noch nicht verbessert, wenn es um audio.
Jedoch, gibt es eine silberne Linie auf dem horizon: iOS 6 unterstützt die WebAudio API. Habe ich erfolgreich geschafft haben, eine schöne polyphone Synthesizer mit kaum ein paar Zeilen JavaScript. Zumindest gibt es grundlegende Dinge wie Oszillatoren zur Verfügung out of the box:
https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
und (nur abholen ein Beispiel von vielen)
Ich weiß, dies ist eine alte post, aber schauen Sie sich Die Erstaunliche Audio-Engine.
Dieser form kam die Entwickler von AudioBus für iOS.
Im Grunde es ist ein Wurf bis zwischen audio-Warteschlangen-und audio-Einheiten. wenn Sie brauchen, um in der Nähe real-Zeit, zum Beispiel, wenn Sie brauchen, um zu verarbeiten, Mikrofon Eingang, audio units sind in Ihrer Art und Weise, um eine minimale Latenz.
allerdings gibt es einige Einschränkungen, wie viel Verarbeitung, die Sie tun können, innerhalb der render callback -- ie ein Stück von Daten kommt auf eine extrem hohe Priorität system-thread. Und wenn Sie versuchen, zu viel zu tun in diesem thread, es wird chugg die ganze OS.
also müssen Sie code smart innerhalb dieser callback. es gibt einige Fallstricke, wie die Verwendung von NSLog und den Zugriff auf Eigenschaften eines anderen Objekts, die deklariert wurden, ohne nonatomic (d.h. Sie werden implizit erstellt Schlösser).
dies ist der Hauptgrund, Apple baute ein höheres level-framework (AQ) zu nehmen, diese low-level schwieriges Geschäft. AQ können Sie erhalten, verarbeiten und ausspucken audio-Puffer auf einen thread, wo es egal ist, ob Sie Ursache Latenz.
Jedoch, die Sie bekommen können Weg mit viel Verarbeitung, insbesondere wenn Sie beschleunigen framework um die Geschwindigkeit Ihres mathematische Manipulationen.
In der Tat, gehen Sie einfach mit audio-Einheiten-starten Sie mit diesem link jonbro gab Sie. obwohl AQ ist ein higher-level framework, es ist mehr Kopfschmerzen zu verwenden, und RemoteIO audio-Gerät ist das richtige Werkzeug für diese Aufgabe.
Habe ich mit dem audio-Ausgang Beispiel von open frameworks und der stanford stk Synthese-Bibliothek, um auf meinem iOS-Synthesizer-Anwendung.
Habe ich experimentiert mit der Tonic-Audio-Synthesizer-Bibliothek. Sauber und einfach zu verstehen code mit kompilieren macOS-und iOS-Beispiele.
Irgendwann habe ich begonnen zu generieren meiner eigenen Puffer mit einfachen C-code von Grund auf neu zu tun, die grundlegende Dinge wie Sinus-Generatoren, ADSR und Verzögerungen, die war sehr befriedigend zu Experimentieren.
Schob ich meine float-arrays von Lautsprechern mit Tonic Pendant, Novocaine.
Beispielsweise 256k verwenden Sie diese für all die Musik, die es erzeugt.
Erst vor kurzem fand ich AVAudioUnitSampler, eine super-einfache Möglichkeit zur Wiedergabe von sample-basierten audio-in verschiedenen Tonhöhen, mit geringer Latenzzeit.