2011-09-27 140 views
0

我在追加额外记录后播放音频数据时出现问题。这里是事件的一般顺序,但不返回任何错误: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后不会播放附加的音频?

+0

我想我明白了这一点。无论如何,我得到了它的工作。 我的更改是1.在AudioQueueDispose之前调用AudioFileClose,并且2.在音频队列停止后(在IsRunning的属性侦听器中)调用AudioFileClose。不要在启动和停止队列之间保持文件打开,而是尽快打开并关闭文件。 – Donald

回答