Hi Howard.
1. I would have to make it a var, but it should not be mutable.
2. It’s not optional. Without it, the PDAudioPlayer class could not
function.
On Tue, 26 Sep 2017 at 11:39 am, Kenny Leung via swift-users < > swift-users@swift.org> wrote:
Hi Muthu.
Thanks for the suggestion.
I don’t want to do that because failure to create the AudioQueue should
mean failure to create the AudioPlayer itself.
-Kenny
On Sep 25, 2017, at 6:33 PM, somu subscribe <somu.subscribe@gmail.com> >> wrote:
Hi Kenny,
You could use a lazy var and initialise it with a closure.
class PDAudioPlayer {
//Would be created lazily when first invoked
lazy var mQueue : AudioQueueRef = {
//create an audioQueue and return that instance
return audioQueue
}()
}
Thanks and regards,
Muthu
On 26 Sep 2017, at 9:12 AM, Kenny Leung via swift-users < >> swift-users@swift.org> wrote:
Hi All.
I’m trying to implement the AudioQueue example from Apple in Swift, and
keep it as Swifty as I can. I’ve run into a problem where I have a let ivar
for the AudioQueue, but the only way to initialize that let ivar is to pass
a block to the function that creates the AudioQueue. I get the error,
"Variable 'self.mQueue' used before being initialized”. Is there any way to
get around this catch?
Thanks!
-Kenny
The code follows.
———8<————8<————
class PDAudioPlayer {
static let kNumberBuffers :Int = 3 // 1
//var mDataFormat:AudioStreamBasicDescription //
2
let mQueue :AudioQueueRef // 3
//var mBuffers :[AudioQueueBufferRef] // 4
//var mAudioFile :AudioFileID? //
5
var bufferByteSize :UInt32? // 6
var mCurrentPacket :Int64? // 7
var mNumPacketsToRead :UInt32? // 8
var mPacketDescs :UnsafePointer<AudioStreamPacketDescription>? // 9
var mIsRunning: Bool = false // 10
let dispatchQueue :DispatchQueue
let source :PDFileAudioSource
var audioBuffers :[PDAudioBuffer]
init?(source:PDFileAudioSource) {
self.source = source
self.dispatchQueue = DispatchQueue(label:"AudioPlayer", qos:.
default, attributes:, autoreleaseFrequency:.workItem, target:nil)
self.audioBuffers = [PDAudioBuffer]()
var tempAudioQueue :AudioQueueRef?
var dataFormat = source.mDataFormat
let status = AudioQueueNewOutputWithDispatchQueue(&tempAudioQueue,
&dataFormat, 0, self.dispatchQueue) { [weak self] (queue, buffer) in
// ERROR on this line
guard let this = self else {
return // block
}
guard let audioBuffer = this.audioBufferForAudioQueueBuffer(aqBuffer:buffer)
else {
return // block
}
this.source.fillBuffer(audioBuffer)
}
if status != 0 {
return nil
}
guard let audioQueue = tempAudioQueue else {
return nil
}
self.mQueue = audioQueue
}
private func audioBufferForAudioQueueBuffer(aqBuffer:
AudioQueueBufferRef) -> PDAudioBuffer? {
for buffer in self.audioBuffers {
if buffer.audioQueueBuffer == aqBuffer {
return buffer
}
}
return nil
}
}
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users