1

デリゲート メソッドから、オーディオの録音中に AudioBufferList を受け取ります。AVAudioPlayer にロードできるように AudioBufferList からデータを収集して保存しようとしていますが、AVAudioPlayer がエラーをスローし、録音を再生できません。AudioBufferList を使用するだけで、ファイルがなくても AVAudioPlayer でオーディオを再生できる必要があります。

もともと、録音をファイルに保存してから 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。)」

どんな助けでも大歓迎です。

ありがとうございました、

4

0 に答える 0