2012-07-17 58 views
0

我在調查aurioTouch2示例代碼。如何更改aurioTouch項目以將記錄寫入.caff或.wav文件

我想改變smth以記錄來自麥克風的音頻並將這些數據寫入.caff或.wav文件。所以後來我可以用AVAudioPlayer播放這個音頻。

我的想法是在applicationDidFinishLaunching中使用AVAudioRecorder,但可能它不是最好的解決方案,或者甚至可能不是這樣(我沒有試過使用AVAudioRecorder,因爲我認爲最有可能它不是最好的主意)。 我試着寫字節數據

void FFTBufferManager::GrabAudioData(AudioBufferList *inBL) 
{ 
    memcpy(mAudioBuffer+mAudioBufferCurrentIndex, inBL->mBuffers[0].mData, bytesToCopy); 
    // after this I copy to my own buffer and collect all the data during 30 seconds 
} 

所以你看,我複製到我自己的緩衝區,並在30秒期間收集的所有數據。比我寫數據到.caff文件。這是行不通的。

更新:

,或者可以是播放音頻的二進制數據的方式(不編碼爲.waf或.caff音頻)存在嗎?

回答

1

有幾種不同的方法可以做到這一點。一種方法是使用ExtAudioFileWriteAsync

Apple提供了一個演示如何執行此操作的示例項目。這是RecordAudioToFile

看看其他一些帖子,例如Can anybody help me in recording iPhone output sound through Audio Unit

+0

關於「有幾種不同的方法可以做到這一點,一種方法是使用ExtAudioFileWriteAsync。」:要使用它,你應該使用AudioBufferList。但在這種情況下,您將遇到另一個問題:AudioBufferList只有0.1秒的音頻數據數據,問題是如何組合此AudioBufferList以獲取所有數據。 – 2012-07-17 09:55:46

+0

RecordAudioToFile適用於MacOS,不適用於iOS – 2012-07-17 09:57:14

+0

是的,但是它使用的AudioToolbox API,您將使用的適用於iOS的 – 2012-07-17 10:33:12

0

我不知道我是否正確地得到了你,但你不能只將緩衝區寫入磁盤。 CAF和WAV文件需要自己的頭文件和音頻數據的編碼。 AVRecorder課爲你做這個。關於這個話題有很多問題。例如參見this question

+0

我知道AVRecorder,但aurioTouch使用低級編程,如AudioUnit和AudioBufferList。我認爲,它應該是實施這個的方式,使用這種低級別的工具。 – 2012-07-17 08:46:41

+0

或者可能是,有一種方法,我可以如何播放我寫入二進制文件的數據集? – 2012-07-17 08:49:01