Frage

Ich weiß, dass dies ein sehr breites Thema ist, aber ich habe mit Demos und meinen eigenen Tests herumgezündet und bin mir nicht sicher, ob ich das Problem richtig angreife. Alle Leads, an denen ich anfangen sollte, wäre also geschätzt.

Das Ziel ist es, dass die App gemäß den Einstellungen des Benutzers einige synthetisierte Sounds generiert. (Dies ist nicht die einzige App -Funktion, ich erstelle Korg hier nicht, aber Synthesizer ist ein Teil davon.) Der Benutzer würde die typischen Synthesizer -Einstellungen wie Welle, Reverb usw. festlegen, dann würde er auswählen, wenn die Notiz spielen würde. Wahrscheinlich mit einem Tonhöhen- und Geschwindigkeitsmodifikator.

Ich habe ein bisschen mit Audioeinheit und Remoteio herumgespielt, aber nur kaum verstehe, was ich tue. Bevor ich dieses Kaninchenloch zu weit unten gehe, würde ich gerne wissen, ob ich überhaupt im richtigen Stadion bin. Ich weiß, dass Audio -Synthesizer ein niedriges Niveau sein wird, aber ich hoffe, dass es vielleicht einige Bibliotheken auf höherer Ebene gibt, die ich verwenden kann.

Wenn Sie irgendwelche Hinweise darauf haben, wo Sie anfangen sollen und welche iOS -Technologie ich mehr lesen sollte, lassen Sie es mich bitte wissen.

Vielen Dank!

Bearbeiten: Lassen Sie mich die Fragen besser zusammenfassen.

Gibt es bereits Synth -Bibliotheken für iOS? (Kommerziell oder Open Source - Ich habe keine mit zahlreichen Suchanfragen gefunden, aber vielleicht vermisse ich es.)

Gibt es APIs auf höherer Ebene, die dazu beitragen können, Puffer einfacher zu generieren?

Gibt es eine bessere / einfachere Möglichkeit, diese Puffer an das iOS -Audio -Gerät zu senden, wenn ich bereits Puffer generieren kann, als die Remoteio -Audioeinheit?

War es hilfreich?

Lösung

Dies ist eine wirklich gute Frage. Ich frage mich manchmal die gleichen Dinge und benutze immer die Momu Toolkit Von den Jungs in Stanford. Diese Bibliothek bietet eine nette Rückruffunktion, die eine Verbindung zu Audiounits/Audiotoolbox (nicht sicher) herstellt, sodass Sie nur die Abtastrate, die Puffergröße und die Bittiefe der Audio -Samples einstellen können, und Sie können leicht synthetisieren/ Verarbeiten Sie alles, was Ihnen in der Rückruffunktion gefällt.

Ich empfehle auch das Synthese -Toolkit (STK) für iOS Das wurde auch von Ge Wang in Stanford veröffentlicht. Wirklich coole Sachen, um Audio zu synthetisieren / zu verarbeiten.

Jedes Mal, wenn Apple eine neue iOS -Version veröffentlicht, überprüfe ich die neue Dokumentation, um einen besseren (oder einfacheren) Weg zu finden, um Audio zu synthetisieren, aber immer ohne Glück.

Bearbeiten: Ich möchte einen Link zum Audiographie -Quellcode hinzufügen: https://github.com/tkzic/audiograph Dies ist eine wirklich interessante App, um das Potenzial von Audiounits zu zeigen, die von Tom Zicarelli hergestellt wurden. Der Code ist wirklich leicht zu befolgen und eine großartige Möglichkeit, darüber zu lernen-einige würden sagen ... verworren Prozess des Umgangs mit niedrigem Audio in iOS.

Andere Tipps

Swift & Objective C.

Es gibt ein großartiges Open-Source-Projekt, das mit Videos und Tutorials sowohl für objektives C als auch für Swift gut dokumentiert ist.

Audiokit.io

Der niedrigste Weg, um die Puffer in die Soundkarte zu bringen, ist die Audiounit -API und insbesondere die Remoteio -Audiounit. Dies ist ein Haufen Kauderwelsch, aber es gibt einige Beispiele, die im Internet verstreut sind. http://atastypixel.com/blog/using-remoteio-audio-unit/ ist ein.

Ich stelle mir vor, dass es andere Möglichkeiten gibt, Puffer zu füllen, entweder mit dem Avfoundation -Framework, aber ich habe sie nie getan.

Die andere Möglichkeit, es zu tun, ist die Verwendung von OpenFrameWorks für all Ihre Audio -Sachen, aber das geht auch davon aus, dass Sie Ihre Zeichnung in OpenGL durchführen möchten. Wenn Sie die Audiounit -Implementierung herausreißen, sollte es jedoch nicht zu sehr ein Problem sein, wenn Sie Ihre Zeichnung auf andere Weise durchführen möchten. Diese besondere Implementierung ist schön, weil sie alles auf -1 .. 1 schwimmt, damit Sie es füllen können.

Wenn Sie einen Sprung mit einer Reihe von Oszillatoren / Filtern / Verzögerungsleitungen beginnen möchten, die Sie in das OpenFrameWorks -Audiosystem (oder jedes System mit Arrays von -1..1 -Schwimmern) anschließen können, möchten Sie möglicherweise auschecken http://www.maximilian.strangeloop.co.uk.

Dies gibt zwei Teile: Zunächst müssen Sie Puffer mit synthetisiertem Audio generieren - dies ist ziemlich plattform -agnostisch und Sie benötigen ein gutes Verständnis der Audio -Synthese, um diesen Teil zu schreiben. Der zweite Teil besteht darin, diese Puffer an eine geeignete OS-spezifische API zu übergeben, damit der Sound tatsächlich gespielt wird. Die meisten APIs für Audio -Wiedergabe unterstützen Doppelpufferung oder sogar mehrere Puffer, damit Sie zukünftige Puffer synthetisieren können, während Sie den aktuellen Puffer abspielen. Was die iOS -API verwenden soll, hängt wahrscheinlich davon ab, welche Art von Gesamtarchitektur Sie für Ihre App haben, aber dies ist wirklich der einfache Teil. Im Synthese -Teil müssen Sie den größten Teil der Arbeit erledigen.

Ich weiß, dass dies ein wenig alt ist, aber das scheint mir der falsche Ansatz zu sein - Sie sollten wahrscheinlich einen Audioeinheits -Synthesizer finden, der die Art von Änderungen modelliert, die Sie vornehmen möchten. Es gibt viele von ihnen, einige von ihnen Open Source, andere möglicherweise lizenzierbar - und hosten die Audioeinheiten aus Ihrem Code. Die oben beschriebenen Mechanismen scheinen gut zu funktionieren, aber sie werden nicht wirklich für die iOS -Plattform optimiert.

Ich weiß, dass dieses Thema alt ist und ich bin erstaunt, dass sich die Situation auf iOS noch nicht verbessert hat, wenn es um Audio geht.

Am Horizont steht jedoch eine silberne Linie: iOS 6 unterstützt die Webaudio -API. Ich habe es erfolgreich geschafft, einen schönen Polyphone -Synth mit kaum ein paar Zeilen in JavaScript zu haben. Zumindest gibt es grundlegende Dinge wie Oszillatoren, die außerhalb der Box erhältlich sind:

https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html

und (nur um ein Beispiel aus vielen auszuwählen)

Ich weiß, dass dies ein alter Beitrag ist, aber überprüfen Sie es Der erstaunliche Audio -Engine.

Die Amazing Audio Engine ist ein hoch entwickeltes Rahmen für iOS -Audioanwendungen, die so konstruiert sind, dass Sie nicht mit der Arbeit zu arbeiten sind, und verarbeitet alle Feinheiten von iOS -Audio in Ihrem Namen.

Dies kam zum Entwickler von Audiobus für iOS.

Grundsätzlich wird es ein Wurf zwischen Audio -Warteschlangen und Audioeinheiten. Wenn Sie sich beispielsweise an Echtzeit nähern müssen, sind Audioeinheiten beispielsweise Ihr Weg, um eine Mindestlatenz zu erzielen.

Es gibt jedoch eine gewisse Einschränkung, wie viel Verarbeitung Sie im Render -Rückruf durchführen können - dh ein Stück Daten kommt auf einem System -Thread mit ultrahoher Priorität ein. Und wenn Sie versuchen, in diesem Thread zu viel zu tun, wird das gesamte Betriebssystem chuggen.

Sie müssen also in diesem Rückruf intelligent codieren. Es gibt nur wenige Fallstricke, wie die Verwendung von NSLog und den Zugriff auf Eigenschaften eines anderen Objekts, das ohne nichtatomar erklärt wurde (dh sie werden implizit Schlösser erzeugen).

Dies ist der Hauptgrund, warum Apple ein höheres Rahmen (AQ) aufgebaut hat, um dieses schwierige Geschäft auf niedrigem Niveau zu übernehmen. Mit AQ können Sie einen Prozess erhalten und Audiopuffer in einem Thread ausspucken, in dem es keine Rolle spielt, ob Sie eine Latenz verursachen.

Sie können jedoch mit viel Verarbeitung davonkommen, insbesondere wenn Sie das Beschleunigungsrahmen verwenden, um Ihre mathematischen Manipulationen zu beschleunigen.

Gehen Sie einfach mit Audioeinheiten aus - beginnen Sie mit diesem Link, den Jonbro Ihnen gegeben hat. Obwohl AQ ein Rahmen auf höherer Ebene ist, ist es mehr Kopfschmerzen, und die Remoteio-Audioeinheit ist das richtige Werkzeug für diesen Job.

Ich habe das Audio -Ausgangsbeispiel von Open Frameworks und der Stanford STK -Synthese -Bibliothek verwendet, um an meiner iOS -Synth -Anwendung zu arbeiten.

Ich habe mit dem experimentiert Tonic Audio Synth Library. Sauber und leicht zu verstehen Code mit Ready to Compile MacOS- und iOS -Beispielen.

Irgendwann habe ich angefangen, meine eigenen Puffer mit einfachem C -Code von Grund auf neu zu generieren, um grundlegende Dinge wie Sinusgeneratoren, ADSRs und Verzögerungen zu machen, die sehr befriedigend zu experimentieren waren.

Ich habe meine Float -Arrays mit dem Gegenstück von Tonic mit den Lautsprechern gedrängt. Novocain.

Zum Beispiel 256K Verwenden Sie diese für all die Musik, die sie erzeugt.

Erst kürzlich habe ich gefunden AvaudiounitSampler, eine supergroße Möglichkeit, Muster-Basis-Audio auf verschiedenen Stellplätzen mit geringer Latenz zu spielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top