Appuyez sur Entrée Micro à l'Aide de AVAudioEngine en Swift

Je suis vraiment excité à propos de la nouvelle AVAudioEngine. Il semble comme une bonne API wrapper autour de l'unité audio. Malheureusement, la documentation est inexistante à ce jour, et je vais avoir des problèmes pour obtenir un graphique simple à travailler.

En utilisant le code simple suivant pour configurer l'audio d'un moteur graphique, appuyez sur le bloc n'est jamais appelée. Il imite certains de l'exemple de code flottant autour de l'internet, mais aussi celles qui n'ont pas de travail.

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)")
}
}

Tous je suis à la recherche pour le raw pcm tampon pour l'analyse. Je n'ai pas besoin d'effets ou de sortie. Selon la WWDC parler "502 Moteur Audio dans la Pratique", cette installation devrait fonctionner.

Maintenant, si vous voulez capturer des données à partir du nœud d'entrée, vous pouvez installer un nœud appuyez sur et nous en avons parlé.

Mais ce qui est intéressant à propos de cet exemple est, si je voulais travailler avec le nœud d'entrée, juste dire la capture des données à partir du microphone et peut-être les examiner, de les analyser en temps réel ou peut-être l'écrire dans un fichier, je peux directement installer un robinet sur le nœud d'entrée.

Et le robinet va faire le travail de tirer le nœud d'entrée pour les données, la farce dans les tampons et puis les renvoyer dos à l'application.

Une fois que vous avez données, vous pouvez faire ce que vous devez faire avec elle.

Voici quelques liens que j'ai essayé:

  1. http://hondrouthoughts.blogspot.com/2014/09/avfoundation-audio-monitoring.html
  2. http://jamiebullock.com/post/89243252529/live-coding-audio-with-swift-playgrounds (SIGABRT dans l'aire de jeux sur startAndReturnError)

Edit: C'est la mise en œuvre, selon Thorsten Karrer suggestion. Il ne fonctionne malheureusement pas.

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")
}
}

OriginalL'auteur brodney | 2014-11-29