Iphone 如何将aurioTouch项目更改为将录制内容写入.caff或.wav文件
我正在调查示例代码 我想将smth更改为从麦克风录制音频,并将这些数据写入.caff或.wav文件。因此,稍后我将能够使用AVAudioPlayer播放此音频 我的想法是在ApplicationIDFinishLaunching中使用AVAudioRecorder,但这可能不是最好的解决方案,或者甚至不可能通过这种方式实现(我没有尝试使用AVAudioRecorder,因为我认为这很可能不是最好的想法)。 我试着把字节数据写入Iphone 如何将aurioTouch项目更改为将录制内容写入.caff或.wav文件,iphone,ios,audio,avaudioplayer,avaudiorecorder,Iphone,Ios,Audio,Avaudioplayer,Avaudiorecorder,我正在调查示例代码 我想将smth更改为从麦克风录制音频,并将这些数据写入.caff或.wav文件。因此,稍后我将能够使用AVAudioPlayer播放此音频 我的想法是在ApplicationIDFinishLaunching中使用AVAudioRecorder,但这可能不是最好的解决方案,或者甚至不可能通过这种方式实现(我没有尝试使用AVAudioRecorder,因为我认为这很可能不是最好的想法)。 我试着把字节数据写入 void FFTBufferManager::GrabAudioDa
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音频)的方式?我不确定是否正确获得了您的信息,但您不能将缓冲区写入磁盘。CAF和WAV文件需要自己的标题和音频数据编码。
AVRecorder
类为您完成此操作。关于这个话题有很多问题。例如,请参见。有几种不同的方法可以做到这一点。一种方法是使用
苹果提供了一个示例项目来演示如何做到这一点。是的
看看其他一些帖子,例如,我知道AVRecorder,但aurioTouch使用低级编程,如AudioUnit和AudioBufferList。我认为,这应该是实现这一点的方法,使用这种低级乐器。或者可能是,有一种方法,我如何播放我写入二进制文件的数据集?关于“有几种不同的方法可以做到这一点。一种方法是使用ExtAudioFileWriteAsync。”:要使用它,应该使用AudioBufferList。但在这种情况下,您将遇到另一个问题:AudioBufferList仅包含0.1秒音频数据的数据,问题是如何组合此AudioBufferList以获取所有数据。RecordAudioToFile适用于MacOS,而不是iOSyes,而是它使用的AudioToolbox API,您将使用iOSmemcpy将每个AudioBufferList缓冲区的帧放到不同的缓冲区,然后使用err=ExtAudioFileWriteAsync(afr->fOutputAudioFile,inNumberFrames,afr->fAudioBuffer)写出这些帧,如示例所示;