Swift3 AudioToolbox:PCM播放如何AudioQueueAllocateBuffer?

时间:2017-05-14 14:29:57

标签: swift3 audiotoolbox

我关注https://github.com/AlesTsurko/LearningCoreAudioWithSwift2.0/tree/master/CH05_Player 播放频率但是使用Swift2。 Get microphone input using Audio Queue in Swift 3解决了许多问题,但它是用于录制的。

我被困在为音频队列分配缓冲区

var ringBuffers = [AudioQueueBufferRef](repeating:nil, count:3)
AudioQueueAllocateBuffer(inQueue!, bufferSize, &ringBuffers[0])

它出错

main.swift:152:29: Expression type '[AudioQueueBufferRef]' is ambiguous without more context
main.swift:153:20: Cannot pass immutable value as inout argument: implicit conversion from 'AudioQueueBufferRef' to 'AudioQueueBufferRef?' requires a temporary

- Spads'回答 -

var ringBuffers = [AudioQueueBufferRef?](repeating:nil, count:3)
let status = AudioQueueAllocateBuffer(inQueue!, bufferSize, &ringBuffers[0])
print("\(status.description)")

打印

vm_map failed: 0x4 ((os/kern) invalid argument)
4

我用过的音频描述是

inFormat = AudioStreamBasicDescription(
            mSampleRate:        Double(sampleRate),
            mFormatID:          kAudioFormatLinearPCM,
            mFormatFlags:       kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked,
            mBytesPerPacket:    UInt32(numChannels * MemoryLayout<UInt16>.size),
            mFramesPerPacket:   1,
            mBytesPerFrame:     UInt32(numChannels * MemoryLayout<UInt16>.size),
            mChannelsPerFrame:  UInt32(numChannels),
            mBitsPerChannel:    UInt32(8 * (MemoryLayout<UInt16>.size)),
            mReserved:          UInt32(0)
        )
AudioQueueNewOutput(&inFormat, AQOutputCallback, &player, nil, nil, 0, &inQueue)

1 个答案:

答案 0 :(得分:1)

你有没有AudioQueueBufferRef数组吗?而不是AudioQueueBufferRef

var ringBuffers = [AudioQueueBufferRef?](repeating:nil, count:3)
AudioQueueAllocateBuffer(inQueue!, bufferSize, &ringBuffers[0])