I have the feeling that this is very basic and I'm missing out on something but I cannot figure out what so here goes.
I have this method for creating a ScheduledAudioFileRegion for me:
private func scheduledAudioFileRegion(startFrame: Int64, loopCount: UInt32, framesToPlay: UInt32) -> ScheduledAudioFileRegion {
var audioFileRegion: ScheduledAudioFileRegion = ScheduledAudioFileRegion()
audioFileRegion.mTimeStamp.mFlags = UInt32(kAudioTimeStampSampleTimeValid)
audioFileRegion.mTimeStamp.mSampleTime = 0
audioFileRegion.mCompletionProc = nil
audioFileRegion.mCompletionProcUserData = nil
audioFileRegion.mAudioFile = audioFile
audioFileRegion.mLoopCount = loopCount
audioFileRegion.mStartFrame = startFrame
audioFileRegion.mFramesToPlay = framesToPlay
return audioFileRegion
}
Which works in Swift 1.2 and Xcode 6.4
However, after converting to Swift 2.0 the method looks like this
private func scheduledAudioFileRegion(startFrame: Int64, loopCount: UInt32, framesToPlay: UInt32) -> ScheduledAudioFileRegion {
var audioFileRegion: ScheduledAudioFileRegion = ScheduledAudioFileRegion()
audioFileRegion.mTimeStamp.mFlags = AudioTimeStampFlags.SampleTimeValid
audioFileRegion.mTimeStamp.mSampleTime = 0
audioFileRegion.mCompletionProc = nil
audioFileRegion.mCompletionProcUserData = nil
audioFileRegion.mAudioFile = audioFile
audioFileRegion.mLoopCount = loopCount
audioFileRegion.mStartFrame = startFrame
audioFileRegion.mFramesToPlay = framesToPlay
return audioFileRegion
}
And there is an error in this line:
var audioFileRegion: ScheduledAudioFileRegion = ScheduledAudioFileRegion()
'ScheduledAudioFileRegion' cannot be constructed because it has no accessible initializers.
If I look in AudioUnitProperties I can see ScheduledAudioFileRegion declared like this:
public struct ScheduledAudioFileRegion {
public var mTimeStamp: AudioTimeStamp
public var mCompletionProc: ScheduledAudioFileRegionCompletionProc?
public var mCompletionProcUserData: UnsafeMutablePointer<Void>
public var mAudioFile: COpaquePointer
public var mLoopCount: UInt32
public var mStartFrame: Int64
public var mFramesToPlay: UInt32
}
Which doesn't look suspicious to me.
I would assume that I could then initialize a ScheduledAudioFileRegion with the default init method like so:
var audioTimeStamp = AudioTimeStamp()
audioTimeStamp.mFlags = AudioTimeStampFlags.SampleTimeValid
audioTimeStamp.mSampleTime = 0
return ScheduledAudioFileRegion(mTimeStamp: audioTimeStamp,
mCompletionProc: nil,
mCompletionProcUserData: nil,
mAudioFile: audioFile,
mLoopCount: loopCount,
mStartFrame: startFrame,
mFramesToPlay: framesToPlay)
But...same error.
The funny thing is that the ScheduledAudioSlice struct, which - as far as I can see - is declared similarly works fine. Xcode autocompletes the initilizer for it perfectly, which it doesn't for the ScheduledAudioFileRegion.
This is probably really simple and a result of the Swift 2.0 migration, but I can not figure out where the problem is, so...please...kind people of the internet, help me out :-)