現在、AudioQueueInputCallback
を使用してマイクデータをファイルに書き込もうとしています。AudioFileWritePacketsが失敗しました(エラーコード:1885563711 - 'kcp')
struct MyRecorder {
var recordFile: AudioFileID?
var recordPacket: Int64
var running: Bool
}
コードは(: - 'kcp'
1885563711 errorCodeを持つ)AudioFileWritePackets
呼び出しで失敗:MyRecorder
はこのように見ているstruct
ある
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.")
}
}
:私のコードのコールバックは、次のようになります。ここで何が失敗するのでしょうか?
私はさらなる情報を提供してくれると嬉しく思っていますが、現在どのコードが役に立つかはわかりません。
また、あなたが(それは不変let
-constantだから)そうAudioFileWritePackets
が引数として&inNumPackets
を受け付けませんので、私は、関数の引数inNumPackets
の一時的なコピーを作成しています見ることができるように。
ありがとうございます。変更は私の問題を解決しませんでしたが、エラーの説明が間違いなく私を助けました。私は、 'record.recordPacket'は(' UnsafeMutableRawPointer? 'を使用していたとしても) 'call'コールが1回コールバックされた後に変更されないことを発見しました。 [フォローアップの質問です。](http://stackoverflow.com/questions/42596246/swift-3-pass-struct-by-reference-via-unsafemutablerawpointer)。 – Herickson
aha - well spotted –