从委托方法中,我在录制音频时收到了 AudioBufferList。我正在尝试从 AudioBufferList 收集数据并将其保存,以便将其加载到我的 AVAudioPlayer 中,但 AVAudioPlayer 抛出错误,我无法播放录音。我需要能够在没有文件的情况下通过 AVAudioPlayer 播放音频,只需使用 AudioBufferList。
最初我将录音保存到文件中,然后将其加载到 AVAudioPlayer 中,但是使用这种方法,我无法附加到录音,而不必制作另一个音频文件,然后在附加后合并这两个文件。这花费了很多时间,我仍然希望能够在附加之间收听录音。所以现在我没有保存音频文件,这样我就可以继续追加它,直到我想保存它。这个问题是我从 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。)”
任何帮助,将不胜感激。
谢谢,