Я стараюсь изменить время воспроизведения песни, которая воспроизводится с помощью ползунка.AVAudioEngine AudioFile Time Management
Моя проблема заключается в получении точной AVAudioTime планировать воспроизведение на основе на ползунке
код (СВИФТ) выглядит следующим образом:
@IBAction func ChangeAudioTime(sender: AnyObject) {
//get current sampleRate of song already playing
var nodetime: AVAudioTime = self.playerNode.lastRenderTime
var playerTime: AVAudioTime = self.playerNode.playerTimeForNodeTime(nodetime)
playerNode.stop()
var time: NSTimeInterval = NSTimeInterval(Slider.value)
var hostTime = AVAudioTime.hostTimeForSeconds(time)
var sampleTime = AVAudioFramePosition(hosttime/UInt64(playerTime.sampleRate))
var ExampleTime: AVAudioTime = AVAudioTime(hostTime:hostTime, sampleTime: sampleTime, atRate: playerTime.sampleRate)
playerNode.scheduleFile(audioFile, atTime:ExampleTime, completionHandler:nil)
playerNode.play()
}
Максимальное значение ползунка присваивается длиной песня, так что это не проблема.
песня просто начинает играть с
началеВыход ExampleTime в консоли:
<AVAudioTime 0x1702b4160: 147.874222 s 80475 fr (/44100 Hz)>
Что я делаю неправильно?
Да. atTime означает, что мы планируем файл в это время в будущем, чтобы начать играть. –
func createStartTime() -> AVAudioTime? { var время: AVAudioTime? , если позволить lastPlayer = self.trackPlayerDictionary [lastPlayerKey] { , если позволить SampleRate = lastPlayer.file .processingFormat.sampleRate { вар sampleTime = AVAudioFramePosition (shortStartDelay * SampleRate) время = AVAudioTime (hostTime: mach_absolute_time(), sampleTime: sampleTime, atRate: sampleRate) } } время возврата } –
Это то, что я использую для создания времени в ближайшем будущем для точного планирования. Затем я использую это время несколько раз для синхронизации нескольких игроков. –