AudioQueueInputCallback вызывается с пустым буфером - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь записать звук PCM с микрофона iPhone, но когда я запускаю свою аудио-очередь, она останавливается после вызова функции обратного вызова столько раз, сколько имеется буфер.В моем случае 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

Через 2 недели для разработки с API Audio Queue Services некоторыекомпортимент все еще меня смущает.

...