2015-05-08 54 views
5

我一直在四處搜索Swift文檔到保存AVAudioEngine的音頻輸出,但我找不到任何有用的提示。
有什麼建議嗎?SWIFT - 是否可以保存來自AVAudioEngine或AudioPlayerNode的音頻?如果是,如何?

解決方案 我發現一個解決方法,謝謝馬特的答案。 這裏的如何使其通過AVAudioEngine 後保存音頻樣本代碼(我認爲這在技術上是之前)

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

    } 

希望這有助於!

一個問題要解決:

有時候,你outputNode比輸入短:如果通過2加速時間率,你的聲音會更短的2倍。這是問題的IM面臨着因爲現在我保存文件的條件是(10號線)

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

任何幫助嗎?

+0

這裏:[蘋果文件從AV導出](https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/05_Export.html#//apple_ref/doc/uid/TP40010188-CH9-SW2) – Moritz

+0

謝謝@eric D.,我正在通過代碼。看起來它會完成這項工作。儘管如此,我發現了很多東西,還有很多我必須瞭解的內容。如果我提出問題可以嗎? 例如,我如何加載不是帶有URL的AudioFile但是有audioEngine或AudioNode的資產? 你有沒有經歷過這段代碼? – mlk

+0

Personnally,不是真的,我只是以爲你可能錯過了這個文檔,所以我粘貼了鏈接。但這不是問題所在:問題在於你不能在SO上提出太寬泛的問題。無論如何,評論並不是這個地方。我建議你創建一個新問題,包括你當前的代碼,顯示你想要達到的目標以及你在哪裏掙扎,或者類似的東西。哦,每個帖子*一個*主題。順便說一句,歡迎來到SO。 :) – Moritz

回答

5

是的,這很容易。您只需輕敲一個節點並將緩衝區保存到文件中即可。

不幸的是,這意味着你必須通過節點播放。我希望AVAudioEngine能讓我直接處理一個聲音文件到另一個聲音文件,但顯然這是不可能的 - 你必須實時播放和處理。

+0

謝謝你,幫了我很多。 有一件事,我不認爲你需要發揮,如果你在音頻節點上安裝水龍頭。我還沒有嘗試過,但我實際上不需要它,因爲我保存它之前無論如何播放音頻。就像健康檢查一樣。 – mlk

+0

好吧,我會再試一次,但在我的測試中,我無法通過緩衝區實際播放文件來保存文件。 – matt

1

離線渲染使用GenericOutput AudioUnit爲我工作。請檢查這個鏈接,我已經完成了混合兩個,三個音頻離線,並將其結合到一個單一的文件。不一樣的情況,但它可以幫助你獲得一些想法。 core audio offline rendering GenericOutput

相關問題