Tippen Sie auf Mikrofoneingang mit AVAudioEngine in Swift

8

Ich bin wirklich begeistert von der neuen AVAudioEngine. Es scheint wie ein guter API-Wrapper um Audio-Einheit. Leider ist die Dokumentation bisher nicht existent, und ich habe Probleme, einen einfachen Graphen zu erhalten.

Wenn Sie den folgenden einfachen Code verwenden, um ein Audio-Engine-Diagramm zu erstellen, wird der Tap-Block niemals aufgerufen. Es imitiert einen Teil des Beispielcodes, der im Web schwebt, obwohl auch diese nicht funktionierten.

%Vor%

Alles, was ich suche, ist der rohe PCM-Puffer für die Analyse. Ich brauche keine Effekte oder Ausgaben. Laut dem WWDC-Vortrag "502 Audio Engine in Practice" sollte dieses Setup funktionieren.

  

Wenn Sie jetzt Daten vom Eingangsknoten erfassen wollen, können Sie einen Knotenpunkt installieren und wir haben darüber gesprochen.

     

Aber was ist an diesem speziellen Beispiel interessant? Wenn ich nur mit dem Eingangsknoten arbeiten wollte, sag einfach Daten vom Mikrofon und untersuche es vielleicht, analysiere es in Echtzeit oder schreibe es in die Datei, ich kann es Installieren Sie direkt einen Abgriff auf dem Eingabeknoten.

     

Und der Tap wird die Arbeit machen, den Eingangsknoten für Daten zu ziehen, ihn in Puffer zu stopfen und ihn dann an die Anwendung zurückzugeben.

     

Sobald Sie diese Daten haben, können Sie tun, was immer Sie damit tun müssen.

Hier sind einige Links, die ich ausprobiert habe:

  1. Ссылка
  2. Ссылка (SIGABRT im Spielplatz auf startAndReturnError)

Bearbeiten: Dies ist die Implementierung basierend auf Thorsten Karrers Vorschlag. Es funktioniert leider nicht.

%Vor%     
brodney 29.11.2014, 14:59
quelle

4 Antworten

16

Es könnte sein, dass Ihre AVAudioEngine den Geltungsbereich verlässt und von ARC freigegeben wird ("Wenn es Ihnen gefallen hat, dann sollten Sie es behalten ...").

Der folgende Code (Engine wird zu einem ivar verschoben und bleibt so hängen) feuert den Tap:

%Vor%

(Ich habe die Fehlerbehandlung aus Platzgründen entfernt)

    
Thorsten Karrer 01.12.2014, 20:07
quelle
10

AKTUALISIERT: Ich habe ein komplettes Arbeitsbeispiel für Aufnahme-Mikrofon-Eingang implementiert, einige Effekte (Hall, Verzögerung, Verzerrung) zur Laufzeit angewendet und alle diese Effekte in einer Ausgabedatei gespeichert.

%Vor%

// Initialisiere die Audio-Engine

%Vor%

// Jetzt die Aufnahmefunktion:

%Vor%

Ich hoffe, das könnte dir helfen. Danke!

    
Junaid Mukhtar 08.03.2016 06:07
quelle
2

Die obige Antwort hat nicht für mich funktioniert, aber das Folgende hat es getan. Ich installiere einen Tap auf einen Mixer-Knoten.

%Vor%     
Pescolly 25.01.2015 21:31
quelle
0

nettes Thema

Hallo Brodney

in Ihrem Thema finde ich meine Lösung. Hier ist ein ähnliches Thema AVAudioPCMBuffer mit AVAudioRecorder generieren

siehe Vorlesung Wwdc 2014 502 - AVAudioEngine in Practice Capture-Mikrofon = & gt; in 20 min Puffer mit Tap-Code erstellen = & gt; in 21 .50

hier ist swift 3 code

%Vor%

zum Stoppen von Audio

%Vor%     
myUser 14.04.2017 08:21
quelle