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é:
- http://hondrouthoughts.blogspot.com/2014/09/avfoundation-audio-monitoring.html
- 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
Vous devez vous connecter pour publier un commentaire.
Cela pourrait être le cas que votre AVAudioEngine est hors de portée et est publié par l'ARC ("Si vous avez aimé, alors vous devriez avoir à conserver sur elle...").
Le code suivant (moteur est déplacé vers une ivar et donc autour de bâtons) les feux de la tap:
(J'ai enlevé l'erreur de manipulation par souci de concision)
Jup, fonctionne pour moi. Je ne l'ai pas testé dans la cour de récréation, mais il fonctionne au moment de la compilation, et fonctionne à partir de Xcode. Le robinet bloc est appelé en permanence.
Malheureusement, je dois admettre que c'était un consignes objet, après tout. Mon AudioProcessor classe est instanciée dans une méthode, et non comme une propriété de classe.
Aucune raison pourquoi vous avez choisi l'appDelegate méthode avec la "notification" argument? La valeur par défaut/de facto l'un est didFinishLaunchingWithOptions:
La raison en est que au moment où j'ai écrit la réponse (2014), Xcode me donnerait la notification de l'argument par défaut. Pour la question à portée de main, il n'a pas d'importance de toute façon.
OriginalL'auteur Thorsten Karrer
Mise à JOUR: j'ai mis en place un travail complet exemple de l'Enregistrement d'entrée micro, l'application de certains effets (réverb, delay, distortion) au moment de l'exécution, et d'enregistrer l'ensemble de ces effets à un fichier de sortie.
//Initialiser le moteur audio
//Maintenant, la fonction d'enregistrement:
J'espère que cela peut vous aider. Merci!
Im actuellement en train de travailler sur un même module que je n'ai pas été couronnée de succès dans la mise en œuvre. c'est à dire hors de rendu d'un fichier audio avec des effets. Voici un post que im suivant: [rendu en différé] (stackoverflow.com/a/15361251/2429443). J'espère que ça aide
D'où viennent ces valeurs proviennent de?: laissez ioBufferDuration = 128.0 / 44100.0
le code utile qui fonctionne. maintenant, j'ai le code sur la façon dont cette AudioEngine fonctionne avec tous les liens entre AudioUnits.
OriginalL'auteur Junaid Mukhtar
La réponse ci-dessus n'a pas fonctionné pour moi, mais les suivants n'. Je suis de l'installation d'un robinet sur une table de mixage nœud.
OriginalL'auteur Pescolly
beau sujet
hi brodney
dans votre sujet j'ai trouver ma solution . voici des sujets similaires Générer AVAudioPCMBuffer avec AVAudioRecorder
voir conférence de la Wwdc 2014 502 - AVAudioEngine dans la Pratique de capture micro => dans 20 min de créer tampon avec tap code => dans 21 .50
voici swift 3 code
pour arrêter l'audio
OriginalL'auteur myUser