AudioFileWritePackets失败(错误代码:1885563711 - 'kcp')

AudioFileWritePackets失败(错误代码:1885563711 - 'kcp')

问题描述:

我正在尝试使用AudioQueueInputCallback将麦克风数据写入文件。我的代码的回调看起来是这样的:AudioFileWritePackets失败(错误代码:1885563711 - 'kcp')

func myAQInputCallback(inUserData: UnsafeMutableRawPointer?, 
         inQueue: AudioQueueRef, 
         inBuffer: AudioQueueBufferRef, 
         inStartTime: UnsafePointer<AudioTimeStamp>, 
         inNumPackets: UInt32, 
         inPacketDesc: UnsafePointer<AudioStreamPacketDescription>?) { 
    var error: OSStatus 
    var recorder = inUserData!.load(as: MyRecorder.self) 

    // Is this neccessary? 
    var tmpInOutNumPackets = inNumPackets 

    if inNumPackets > 0 { 
     error = AudioFileWritePackets(recorder.recordFile!, 
             false, 
             inBuffer.pointee.mAudioDataByteSize, 
             inPacketDesc, 
             recorder.recordPacket, 
             &tmpInOutNumPackets, 
             inBuffer.pointee.mAudioData) 
     checkError(error, msg: "Couldn't write packet to audio file.") 

     recorder.recordPacket += Int64(inNumPackets) 
    } 

    if recorder.running { 
     error = AudioQueueEnqueueBuffer(inQueue, inBuffer, 0, nil) 
     checkError(error, msg: "Couldn't enqueue buffer.") 
    } 
} 

MyRecorderstruct看起来像这样:

struct MyRecorder { 
    var recordFile: AudioFileID? 
    var recordPacket: Int64 
    var running: Bool 
} 

的代码失败在AudioFileWritePackets通话(与错误码:1885563711 - 'kcp')。这里可能会发生什么故障?

我很乐意提供进一步的信息,但目前我不知道哪些代码在这里有帮助。

而且你可以看到我创建的函数参数inNumPackets的临时副本,否则AudioFileWritePackets不会接受&inNumPackets作为参数(因为它是一个不可改变的let的常数)。

即误差实际上是'pck?'kAudioFileInvalidPacketOffsetError,其被描述为

分组偏移量是过去的文件的末尾,或者不是在文件的末尾写入当VBR格式, 或在构建数据包表时读取了损坏的数据包大小。

的问题可能与你不使用的数据包的实际数目写的,这是在tmpInOutNumPackets发现后AudioFileWritePackets回报的事实做。

所以尽量

recorder.recordPacket += Int64(tmpInOutNumPackets) 

代替。

+0

谢谢你的回答。这个改变并没有解决我的问题,但错误描述确实帮助了我。我发现,record.recordPacket在一次回调调用后不会改变(就像'struct'是通过值传递的 - 即使我使用了'UnsafeMutableRawPointer?')。 [这是一个后续问题。](http://*.com/questions/42596246/swift-3-pass-struct-by-reference-via-unsafemutablerawpointer)。 – Herickson

+0

啊哈 - 很好看 –