gpt4 book ai didi

swift - 使用 AudioFileGetProperty() 和 kAudioFilePropertyDataFormat 后发现可选值 nil

转载 作者:行者123 更新时间:2023-11-30 11:14:22 27 4
gpt4 key购买 nike

我正在尝试使用 swift AudioToolbox API 来播放音频文件。但是,当我使用 AudioFileGetProperty() 获取 AudioStreamBasicDescription 时,当我尝试解开该值时,应用程序崩溃,并显示“解开可选值时意外发现 nil”。这是没有意义的,因为:

1) 我调用 AudioFileGetProperty() 后 OSStatus 为零。2)我可以看到控制台中的值最初为“nil”,但在调用 AudioFileGetProperty() 后,它变为“Some”,并突然填充了值。

也许我错误地使用了指针?我是否错误地使用了选项?

 func playAudioFileWithToolbox(){
var aqData = AQPlayerState()
let url2 = bundle.path(forResource: "dave_speaking", ofType: "m4a")!
var filePathArray = Array(url2.utf8)
let audioFileUrl = CFURLCreateFromFileSystemRepresentation(nil, &filePathArray, filePathArray.count, false)
//Problem: how do we pass aqData.mAudioFile? Initially it is nil
//We are supposed to pass by reference
let status = AudioFileOpenURL(audioFileUrl!, permissions, 0, &(aqData.mAudioFile))

var dataFormatSize:UInt32 = UInt32(MemoryLayout<AudioStreamBasicDescription>.size)

//Here I populate aqData.mDataFormat
var propertyStatus = AudioFileGetProperty(aqData.mAudioFile!, kAudioFilePropertyDataFormat, &dataFormatSize, &(aqData.mDataFormat))


//Next line crashes saying that it is unwrapping an optional value
var audioStreamDescription = aqData.mDataFormat!
}
struct AQPlayerState{
var mDataFormat:AudioStreamBasicDescription?
var mQueue:AudioQueueRef?
var mBuffers:AudioQueueBufferRef?
var mAudioFile: AudioFileID?
var bufferByteSize:UInt32 = 0
var mCurrentPacket:Int64 = 0
var mNumPacketsToRead:UInt32 = 0
var mPacketDescs : UnsafeMutablePointer<AudioStreamPacketDescription>?
var mIsRunning : Bool = false
init(){

}
}

最佳答案

所以我发现我错误地使用了指针和可选值的组合。因为 mDataFormat 本身就是一个可选的:

var mDataFormat:AudioStreamBasicDescription?

传递对它的引用没有多大意义,即 &mDataFormat。

因此我更改了此变量以使其成为非可选:

var mDataFormat:AudioStreamBasicDescription = AudioStreamBasicDescription()

这样,就为它分配了内存和地址,现在做这样的事情是有意义的:

&aqData.mDataFormat

var propertyStatus = AudioFileGetProperty(aqData.mAudioFile!, kAudioFilePropertyDataFormat, &dataFormatSize, &aqData.mDataFormat)

无论如何,我仍在学习如何将选项与指针结合起来,因此您可以给我的任何其他反馈都会有所帮助。

关于swift - 使用 AudioFileGetProperty() 和 kAudioFilePropertyDataFormat 后发现可选值 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com