在向其附加额外录音后播放音频数据时出现问题。以下是不返回任何错误的一般事件序列:
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 后,附加的音频无法播放?