1

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

任何帮助,将不胜感激。

谢谢,

4

0 回答 0