Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将aurioTouch项目更改为将录制内容写入.caff或.wav文件_Iphone_Ios_Audio_Avaudioplayer_Avaudiorecorder - Fatal编程技术网

Iphone 如何将aurioTouch项目更改为将录制内容写入.caff或.wav文件

Iphone 如何将aurioTouch项目更改为将录制内容写入.caff或.wav文件,iphone,ios,audio,avaudioplayer,avaudiorecorder,Iphone,Ios,Audio,Avaudioplayer,Avaudiorecorder,我正在调查示例代码 我想将smth更改为从麦克风录制音频,并将这些数据写入.caff或.wav文件。因此,稍后我将能够使用AVAudioPlayer播放此音频 我的想法是在ApplicationIDFinishLaunching中使用AVAudioRecorder,但这可能不是最好的解决方案,或者甚至不可能通过这种方式实现(我没有尝试使用AVAudioRecorder,因为我认为这很可能不是最好的想法)。 我试着把字节数据写入 void FFTBufferManager::GrabAudioDa

我正在调查示例代码

我想将smth更改为从麦克风录制音频,并将这些数据写入.caff或.wav文件。因此,稍后我将能够使用AVAudioPlayer播放此音频

我的想法是在ApplicationIDFinishLaunching中使用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音频)的方式?

我不确定是否正确获得了您的信息,但您不能将缓冲区写入磁盘。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)写出这些帧,如示例所示;