如何在Spotify播放器中向前或向后10秒

10 duration spotify ios swift

我试图在Spotify播放器中添加(向前移动)10秒的歌曲持续时间或减去(向后移动)10秒,但是我真的很困惑如何添加或减去。

当我尝试使用此代码时,歌曲的持续时间不会改变

// forward button action 
@IBAction func moveFrdBtnAction(_ sender: Any) {
  SpotifyManager.shared.audioStreaming(SpotifyManager.shared.player, didSeekToPosition: TimeInterval(10))
}

// spotify delegate method seekToPosition
func audioStreaming(_ audioStreaming: SPTAudioStreamingController!, didSeekToPosition position: TimeInterval) {
    player?.seek(to: position, callback: { (error) in
        let songDuration = audioStreaming.metadata.currentTrack?.duration as Any as! Double
        self.delegate?.getSongTime(timeCount: Int(songDuration)+1)
    })
}
Run Code Online (Sandbox Code Playgroud)

我们正在两个平台(Android和iOS)上使用相同的SDK制作音乐应用程序,Spotify SDK的seekToPosition方法在Android版本中正常运行,但是在iOS版本中不起作用。委托方法调用本身,但音乐停止了。

您能否告诉我们为什么会发生这种情况,以及我们应该怎么做才能在iOS设备上运行它。

有人可以向我解释如何解决这个问题,我已经尝试解决这个问题,但没有结果。

任何帮助将不胜感激。

提前致谢。

jjr*_*ott 1

我不使用这个 API,所以我的答案将基于您的代码和 Spotify 的参考文档

我认为您的流程存在一些问题:

  1. 正如罗伯特·德雷斯勒(Robert Dresler)评论的那样,你(大约)永远不应该直接打电话给代理人,而是代理人打电话给你。
  2. 我很确定您的操作当前会导致正好跳到10秒,而不是跳到10 秒。

(顺便说一句,我建议更改函数的名称moveFrdBtnAction以至少添加更多元音)

无论如何,这是我对你想要的最好的猜测:

// forward button action 
@IBAction func moveForwardButtonAction(_ sender: Any) {
   skipAudio(by: 10)
}

@IBAction func moveBackButtonAction(_ sender: Any) {
   skipAudio(by: -10)
}

func skipAudio(by interval: TimeInterval) {
   if let player = player {
      let position = player.playbackState.position // The documentation alludes to milliseconds but examples don't.
         player.seek(to: position + interval, callback: { (error) in
         // Handle the error (if any)
      })
   }
}

// spotify delegate method seekToPosition
func audioStreaming(_ audioStreaming: SPTAudioStreamingController!, didSeekToPosition position: TimeInterval) {
   // Update your UI
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有处理在曲目开始之前或结束之后的查找,这可能会发生在简单的position + interval. API 可能会为您处理这个问题,也可能不会。