2012-07-17 57 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