在委托方法中,我在录制音频时收到AudioBufferList。我试图从AudioBufferList收集数据并保存它,以便我可以将其加载到我的AVAudioPlayer但AVAudioPlayer抛出错误,我无法播放录音。我需要能够通过AVAudioPlayer播放音频而不需要文件,只需使用AudioBufferList即可。
最初我将录音保存到一个文件然后将其加载到AVAudioPlayer中但是使用这种方法我无法附加到录音而不必制作另一个音频文件,然后在追加后合并2个文件。这花了很多时间,我仍然希望能够听取追加之间的录音。所以现在我没有保存音频文件,所以我可以继续添加它直到我想保存它。这个问题是我从AudioBufferList保存的NSData没有正确加载到AVAudioPlayer。
以下是我收集NSData的代码:
- (void) microphone:(EZMicrophone *)microphone
hasBufferList:(AudioBufferList *)bufferList
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels
{
AudioBuffer sourceBuffer = bufferList->mBuffers[0];
if (audioBuffer.mDataByteSize != sourceBuffer.mDataByteSize)
{
free(audioBuffer.mData);
audioBuffer.mDataByteSize = sourceBuffer.mDataByteSize;
audioBuffer.mData = malloc(sourceBuffer.mDataByteSize);
}
int currentBuffer =0;
int maxBuf = 800;
for( int y=0; y< bufferList->mNumberBuffers; y++ )
{
if (currentBuffer < maxBuf)
{
AudioBuffer audioBuff = bufferList->mBuffers[y];
Float32 *frame = (Float32*)audioBuff.mData;
[data appendBytes:frame length:audioBuffer.mDataByteSize];
currentBuffer += audioBuff.mDataByteSize;
}
else
{
break;
}
}
}
当我尝试将NSData加载到AVAudioPlayer时,我收到以下错误:
self.audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:&err];
错误: 错误域= NSOSStatusErrorDomain代码= 1954115647“操作无法完成。(OSStatus错误1954115647。)”
任何帮助都将不胜感激。
谢谢,