1

在向其附加额外录音后播放音频数据时出现问题。以下是不返回任何错误的一般事件序列:

AudioQueueNewInput       // Start audio queue
AudioFileCreateWithURL   // Create audio file
AudioFileSetProperty     // Set magic cookie

AudioQueueAllocateBuffer // Allocate buffers
AudioQueueEnqueueBuffer  // Prime buffer
AudioQueueStart          // Start the audio queue

// Record some audio in the audio queue callback...
AudioQueueWritePackets
AudioQueueEnqueueBuffer

AudioQueueStop           // Stop the queue
AudioQueueFlush          // Flush remaining buffers in the queue
AudioFileSetProperty     // Set magic cookie again (needed for some formats?)
AudioQueueDispose        // Dispose queue
AudioFileClose           // Close the file

我可以启动和停止队列以追加记录,效果很好。音频完美附加,我可以按预期播放。当我重新打开文件并尝试追加时出现问题:

AudioQueueNewInput       // Start audio queue
AudioFileOpenURL         // Re-open audio file
AudioFileGetProperty     // Get packet count and resume recording at last packet
AudioFileOptimize        // "Optimize" the file for appending
AudioFileSetProperty     // Set magic cookie

AudioQueueAllocateBuffer // Allocate buffers
AudioQueueEnqueueBuffer  // Prime buffer
AudioQueueStart          // Start the audio queue

// Record some audio in the audio queue callback...
AudioQueueWritePackets
AudioQueueEnqueueBuffer

AudioQueueStop           // Stop the queue
AudioQueueFlush          // Flush remaining buffers in the queue

我注意从最后一个音频包恢复录制,事实上,数据正在附加到文件中,因为我可以看到文件大小在增长。但是,当我播放文件时,我听不到附加的音频。它播放原始音频,但在我期望听到附加音频之前就停止了。

我尝试了不同的组合,围绕 AudioFileOptimize 移动并重置魔法 cookie 无济于事。

我使用的音频格式如下:

static const AudioStreamBasicDescription kMyAudioFormat = {
    .mFormatID = kAudioFormatAppleIMA4,
    .mSampleRate = 44100.0,
    .mChannelsPerFrame = 2,
    .mBitsPerChannel = 0,
    .mBytesPerPacket = 68,
    .mBytesPerFrame = 0,
    .mFramesPerPacket = 64,
    .mFormatFlags = 0
};

这里发生了什么?为什么我重新打开 AudioFileID 后,附加的音频无法播放?

4

1 回答 1

1

需要调用 AudioFileClose。有关更多信息,请参阅: http: //lists.apple.com/archives/Coreaudio-api/2011/Oct/msg00014.html

于 2011-10-04T17:00:52.937 回答