5

Ich habe mich umgesehen Swift Dokumentation zu speichern Sie eine Audio-Ausgabe von AVAudioEngine, aber ich konnte keinen nützlichen Tipp finden.
Irgendwelche Vorschläge?SWIFT - Kann ich Audio von AVAudioEngine oder von AudioPlayerNode speichern? Wenn ja, wie?

Lösung Ich fand einen Weg um dank Matt Antwort. Hier ist ein Beispielcode, wie ein Audio zu speichern, nachdem es durch einen AVAudioEngine vorbei (ich glaube, dass technisch, bevor es)

newAudio = AVAudioFile(forWriting: newAudio.url, settings: nil, error: NSErrorPointer()) 
//Your new file on which you want to save some changed audio, and prepared to be bufferd in some new data... 

var audioPlayerNode = AVAudioPlayerNode() //or your Time pitch unit if pitch changed 

//Now install a Tap on the output bus to "record" the transformed file on a our newAudio file. 
audioPlayerNode.installTapOnBus(0, bufferSize: (AVAudioFrameCount(audioPlayer.duration)), format: opffb){ 
     (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in 

     if (self.newAudio.length) < (self.audioFile.length){//Let us know when to stop saving the file, otherwise saving infinitely 

     self.newAudio.writeFromBuffer(buffer, error: NSErrorPointer())//let's write the buffer result into our file 

     }else{ 
      audioPlayerNode.removeTapOnBus(0)//if we dont remove it, will keep on tapping infinitely 
      println("Did you like it? Please, vote up for my question") 
     } 

    } 

hoffe, das hilft!

Ein Problem zu lösen:

Manchmal ist Ihre outputNode kürzer als die Eingabe: Wenn Sie die Zeitrate von 2 beschleunigen, wird Ihre Audio-2-mal kürzer sein. Dies ist die Frage im jetzt mit Blick auf da mein Zustand die Datei für das Speichern ist (Zeile 10)

if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio. 

Jede Hilfe hier?

+0

Hier: [Apple Dokument aus AV zu exportieren] (https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/05_Export.html#//apple_ref/doc/uid/TP40010188-CH9-SW2) – Moritz

+0

Dank @eric D., ich gehe durch den Code. Sieht so aus, als würde es den Job machen. Nichtsdestotrotz gibt es viele Dinge, die ich entdecke und viele Zeilen, die ich verstehen muss. Ist es in Ordnung, wenn ich Fragen aufwerfe? Zum Beispiel, wie könnte ich ein Asset laden, das keine AudioFile mit URL ist, sondern eine audioEngine oder AudioNode? Haben Sie diesen Code schon einmal gelesen? – mlk

+0

Persönlich, nicht wirklich, ich dachte nur, Sie haben dieses Dokument möglicherweise verpasst, also habe ich den Link eingefügt. Aber das ist nicht das Problem: Die Sache ist, dass man nicht zu weitgehende Fragen zu SO stellen kann. Und Kommentare sind sowieso nicht der richtige Ort dafür. Ich schlage vor, dass Sie eine neue Frage mit Ihrem aktuellen Code erstellen, die zeigt, was Sie erreichen möchten und wo Sie sich anstrengen oder so. Oh, und * ein * Thema pro Post. Willkommen in SO übrigens. :) – Moritz

Antwort

5

Ja, es ist ziemlich einfach. Sie tippen einfach auf einen Knoten und speichern den Puffer in einer Datei.

Leider bedeutet dies, dass Sie über den Knoten abspielen müssen. Ich hatte gehofft, dass AVAudioEngine mir die Möglichkeit geben würde, eine Audiodatei direkt in eine andere zu übertragen, aber das ist scheinbar unmöglich - man muss in Echtzeit spielen und arbeiten.

+0

Danke Mann, es hat mir sehr geholfen. Eine Sache, ich glaube nicht, dass Sie spielen müssen, wenn Sie den Tap auf den AudioNode installieren. Ich habe es noch nicht versucht, aber ich brauche es eigentlich nicht, da ich den Ton sowieso vor dem Speichern spiele. genau wie ein Gesundheitscheck. – mlk

+0

Nun, ich werde es noch einmal versuchen, aber in meinen Tests konnte ich die Datei nicht speichern, ohne die Puffer tatsächlich abzuspielen. – matt

1

Offline-Rendering Arbeitete für mich mit GenericOutput AudioUnit. Bitte überprüfen Sie diesen Link. Ich habe zwei, drei Audios offline gemischt und zu einer einzigen Datei zusammengefasst. Nicht das gleiche Szenario, aber es kann Ihnen helfen, eine Idee zu bekommen. core audio offline rendering GenericOutput

Verwandte Themen