2017-02-14 3 views
8

Ich habe ein großes Projekt mit The Amazing Audio Engine 2 gebaut. Ich habe gekämpft, um Inter-App-Audio integriert zu bekommen und möchte zu AudioKit 3 migrieren.TAAE2 zu AudioKit 3 migrieren

Struggled, bedeutet, es integriert, aber sobald ich es als Generator auswählen, stoppt das Rendering nur, der Motor ist in ein deaktivierter Zustand.

Was sind die Hauptunterschiede zu den Audiosystemen? TAAE2 verwendet Module mit jeweils einem Render-Block, die Audiopuffer von einem Render-Stack schieben und aufklappen.

Wie macht AudioKit Audio? Was wäre bei der Migration von AEModulen zu Audiokit-Objekten auf einer hohen Ebene beteiligt?

Antwort

3

Für die Audiowiedergabe, es ist im Wesentlichen ein Wrapper um AVAudioEngine, AUAudioUnit, AVAudioUnit und AVAudioNode. Es ist eher als Renderkette als als Stapel gedacht, aber das Endergebnis ist das gleiche. Sie können die Systemaudioeinheiten verwenden oder Sie können Ihre eigenen registrieren, indem Sie eine AUAudioUnit-Unterklasse erstellen.

Die Renderkette funktioniert auf die gleiche Weise, aber mit einer blockbasierten API. Anstatt AEAudioUnitModule abzuleiten und die processFunction auf eine C-Funktion zu setzen, in der Sie Pufferlisten und Zeitstempel von Ihrem Renderer abrufen, untergliedern Sie AUAudioUnit und implementieren internalRenderBlock, wo Sie einen Block zurückgeben, der mit den Puffern und Zeitstempeln als Argumente für Ihren Block aufgerufen wird. In diesem Block können Sie die meisten Portierungen vornehmen.

+0

Danke Dave, also klingt es ähnlich wie TAAE1. Wie ist die Reihenfolge der Ketten eingerichtet? Z.B. polyphone Stimmen mit mehreren Oszillatoren, die durch LFOs und Envelope Generatoren moduliert werden, TAAE2 erlaubt den Aufruf eines Prozesses auf einem Modul, wie wird das mit AudioKit gemacht? – jarryd

+1

Wenn ich Ihre Frage richtig verstanden habe, ist der größte Unterschied, dass Sie einen Prozess _on_ in einem Modul aufrufen müssen, müssen Sie diesen Prozess als einen Knoten hinzufügen, den das Audio _through_ durchlaufen wird. Wenn Sie also nur einige Ihrer Oszillatoren bearbeiten möchten, müssen Sie die Ausgabe einiger Oszillatoren durch Ihre Hüllkurvenfilter "routen". Die AVAudioEngine-Familie folgt eher einem physikalischen Modell (Generator -> Patchkabel -> Effekt) als einem Puffermanipulationsmodell. – dave234

+0

Ich versuche zu verstehen, wie das Design von AVAudioEngine die polyphonen Stimmen unterstützen kann. Nehmen wir an, wir haben 1 Stimme, mit 1 Oszillator, der 1 LFO und 1 Envelope hat, in TAAE2 kann die Render-Funktion die Stimme rendern, die dann oscillator.render, lfo.render, envelope.render aufruft. Wie ist dieses Setup in AVAudioEngine mit den Knotenverbindungen? Wäre es audioEngine.connect (voice1, zu: audioEngine.mainMixerNode, Format: audioFormat) und dann in das Sprachobjekt audioEngine.connect (Oszillator, zu: self, Format: audioFormat), audioEngine.connect (lfo, zu: Oszillator. usw.?? – jarryd

3

Ich bin nicht genau sicher, ist das nicht richtige Antwort. aber könnte es genauso sein wie diese Diskussion in unserem Dokument?

migrating to AudioKit

+0

Art von, Ich interessiere mich für die Architektur beteiligt bei der Migration von TAAE2 render Callback und Stack-System zu AudioKit. Ich würde gerne wissen, wie das Verarbeitungsdesign des Motors in AudioKit funktioniert. Wie können die Puffer für die Wiedergabe übergeben werden und wie es mit einem System funktioniert, das mehrere Module verwendet, wobei alle benötigten Audiopuffer verarbeitet und verkettet werden müssen. – jarryd