Tippen Sie auf Mikrofon-Eingang Mit AVAudioEngine in Swift
Ich bin wirklich begeistert über die neue AVAudioEngine. Es scheint wie eine gute API-wrapper um die audio-Einheit. Leider ist die Dokumentation bisher nicht existent, und ich habe Probleme damit, ein einfaches Diagramm zu arbeiten.
Mithilfe der folgenden einfachen code zum einrichten einer audio-engine Grafik, Tippen Sie auf block nie aufgerufen. Es ahmt einige der Beispiel-code im Umlauf im web, obwohl diese auch nicht funktioniert.
let inputNode = audioEngine.inputNode
var error: NSError?
let bus = 0
inputNode.installTapOnBus(bus, bufferSize: 2048, format: inputNode.inputFormatForBus(bus)) {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
println("sfdljk")
}
audioEngine.prepare()
if audioEngine.startAndReturnError(&error) {
println("started audio")
} else {
if let engineStartError = error {
println("error starting audio: \(engineStartError.localizedDescription)")
}
}
Alle ich bin auf der Suche nach der raw-pcm-Puffer für die Analyse. Ich brauche keine Effekte oder die Ausgabe. Nach der WWDC sprechen "502 Audio-Engine in der Praxis", das setup sollte funktionieren.
Nun, wenn Sie wollen, um das erfassen von Daten aus der input-Knoten, können Sie einen Knoten Tippen Sie auf, und wir haben darüber gesprochen.
Aber was interessant an diesem Beispiel ist, wenn ich arbeiten wollte, nur mit dem input-node, sagen Sie einfach-capture-Daten aus dem Mikrofon und vielleicht untersuchen Sie, analysieren Sie in Echtzeit oder vielleicht schreiben Sie es aus, um die Datei, die ich direkt installieren können, Tippen Sie auf die Eingabe-Knoten.
Und Tippen Sie auf die Arbeit, ziehen die input-Knoten für Daten, Füllung es in den Puffer und dann wieder zurück an die Anwendung.
Sobald Sie den Daten, die Sie tun können, was Sie brauchen, zu tun.
Hier sind einige links, die ich ausprobiert:
- http://hondrouthoughts.blogspot.com/2014/09/avfoundation-audio-monitoring.html
- http://jamiebullock.com/post/89243252529/live-coding-audio-with-swift-playgrounds (SIGABRT Spielplatz auf startAndReturnError)
Edit: Dies ist die Implementierung basiert auf Thorsten Karrer ' s Vorschlag. Es funktioniert leider nicht.
class AudioProcessor {
let audioEngine = AVAudioEngine()
init(){
let inputNode = audioEngine.inputNode
let bus = 0
var error: NSError?
inputNode.installTapOnBus(bus, bufferSize: 2048, format:inputNode.inputFormatForBus(bus)) {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
println("sfdljk")
}
audioEngine.prepare()
audioEngine.startAndReturnError(nil)
println("started audio")
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte es der Fall sein, dass Ihr AVAudioEngine geht aus dem Rahmen und ist freigegeben von ARC ("Wenn es Euch gefallen hat, dann sollten Sie gesetzt haben, behalten Sie es auf...").
Den folgenden code (Motor bewegt wird, um ein ivar und damit-sticks um) feuert das Tippen:
(Ich entfernt die Fehlerbehandlung für die Kürze)
AKTUALISIERT: implementierte ich ein funktionsfähiges Beispiel für Aufnahme-mic-Eingang, die Anwendung einiger Effekte (Reverb, delay, distortion) zur Laufzeit, und speichern Sie alle diese Effekte zu einem Ausgabe-Datei.
//Initialisieren der audio-engine
//Jetzt die Aufnahme-Funktion:
Ich hoffe, dass diese Ihnen helfen könnten. Danke!
Obigen Antwort nicht für mich arbeiten, aber die folgenden haben. Ich bin der Installation Tippen Sie auf einen mixer-Knoten.
schönes Thema
Hallo brodney
in Ihr Thema finde ich meine Lösung . hier ist mit einem ähnlichen Thema Generieren AVAudioPCMBuffer mit AVAudioRecorder
siehe Vorlesung Wwdc 2014 502 - AVAudioEngine in der Praxis erfassen Mikrofon => in 20 min schaffen-Puffer mit tap-code => in 21 .50
hier ist swift 3 code
stoppen audio -