将AudioBufferList中的NSData加载到AVAudioPlayer

时间:2015-06-03 02:10:43

标签: ios audio avaudioplayer audiobuffer audiobufferlist

在委托方法中,我在录制音频时收到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。)”

任何帮助都将不胜感激。

谢谢,

0 个答案:

没有答案