在AudioFileOpenURL之后附加音频的问题

时间:2011-09-27 05:09:45

标签: objective-c macos audiotoolbox audioqueue

在向其添加额外录音后播放音频数据时遇到问题。这是一般事件序列,不会返回任何错误:

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后,为什么不会播放附加的音频?

1 个答案:

答案 0 :(得分:0)

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