AudioFileOpenURL后添加音频时出现的问题
问题描述:
我在追加额外记录后播放音频数据时出现问题。这里是事件的一般顺序,但不返回任何错误:AudioFileOpenURL后添加音频时出现的问题
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和重置魔术饼干无济于事。
我使用的音频格式如下:
static const AudioStreamBasicDescription kMyAudioFormat = {
.mFormatID = kAudioFormatAppleIMA4,
.mSampleRate = 44100.0,
.mChannelsPerFrame = 2,
.mBitsPerChannel = 0,
.mBytesPerPacket = 68,
.mBytesPerFrame = 0,
.mFramesPerPacket = 64,
.mFormatFlags = 0
};
这到底是怎么回事?为什么在我重新打开AudioFileID后不会播放附加的音频?
答
需要调用AudioFileClose。欲了解更多信息,请参阅:http://lists.apple.com/archives/Coreaudio-api/2011/Oct/msg00014.html
我想我明白了这一点。无论如何,我得到了它的工作。 我的更改是1.在AudioQueueDispose之前调用AudioFileClose,并且2.在音频队列停止后(在IsRunning的属性侦听器中)调用AudioFileClose。不要在启动和停止队列之间保持文件打开,而是尽快打开并关闭文件。 – Donald