ios - 使用空缓冲区调用 AudioQueueInputCallback
问题描述
我尝试使用 iPhone 麦克风录制 PCM 音频,但是当我启动音频队列时,它会在调用回调函数的次数与缓冲区一样多后自行停止。在我的情况下3次。这是我的代码:
class AudioModel {
private var inQueue: AudioQueueRef!
init() {
// Describe PCM format. 8kHz, 16bits, mono
var inFormat = AudioStreamBasicDescription(mSampleRate: 8000.0, // 8kb
mFormatID: kAudioFormatLinearPCM,
mFormatFlags: kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked,
mBytesPerPacket: 2,
mFramesPerPacket: 1,
mBytesPerFrame: 2,
mChannelsPerFrame: 1,
mBitsPerChannel: 16,
mReserved: 0)
AudioQueueNewInput(&inFormat, audioQueueInputCallback, nil, nil, nil, 0, &inQueue)
for _ in 0...2 {
var bufferRef: AudioQueueBufferRef!
AudioQueueAllocateBuffer(inQueue, 320, &bufferRef)
AudioQueueEnqueueBuffer(inQueue, bufferRef, 0, nil)
}
}
func startRecord() {
AudioQueueStart(inQueue, nil)
}
func pauseRecord() {
AudioQueuePause(inQueue)
}
private let audioQueueInputCallback: AudioQueueInputCallback = { (inUserData, inAQ, inBuffer, inStartTime, inNumberPacketDescriptions, inPacketDescs) in
print("AudioQueueInputCallback called")
print("mAudioDataByteSize: \(inBuffer.pointee.mAudioDataByteSize)")
var err = AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, nil)
if err != noErr {
print("AudioQueueEnqueueBuffer err: \(err)")
return
}
}
}
当我打电话时,startRecord
我已经把这个拿出来了,没有别的了
AudioQueueInputCallback called
mAudioDataByteSize: 0
AudioQueueInputCallback called
mAudioDataByteSize: 0
AudioQueueInputCallback called
mAudioDataByteSize: 0
在使用 Audio Queue Services API 开发 2 周后,我仍然觉得有些话不妥。