0

我正在尝试更改正在使用滑块播放的歌曲的播放时间。

我的问题是获得准确的 AVAudioTime 以根据滑块安排播放

代码(swift)如下所示:

@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)>

我究竟做错了什么?

4

1 回答 1

1

我认为这是你需要的:

-(void)playAtTime:(AVAudioTime*)aTime {

startingFrame = _currentTime * self.file.processingFormat.sampleRate;
AVAudioFrameCount frameCount = (AVAudioFrameCount)(self.file.length - startingFrame);

    [_player scheduleSegment:self.file
               startingFrame:startingFrame
                  frameCount:frameCount
                      atTime:aTime
           completionHandler:^{
                NSLog(@"done playing");//actually done scheduling.
            }];
    [_player play];


}

scheduleFile:atTime 实际上播放整个文件,atTime 是它开始的时间。我还在弄清楚自己是如何工作的。应该是未来的某个时候,

在示例中,_currentTime(以秒为单位)是您想要开始的歌曲中的位置。

于 2015-07-24T07:21:47.983 回答