有没有办法在指定时间在 Swift 上使用 AVAudioPlayer 播放音乐?

Posted

技术标签:

【中文标题】有没有办法在指定时间在 Swift 上使用 AVAudioPlayer 播放音乐?【英文标题】:Is there a way to play music with AVAudioPlayer on Swift at a specified time? 【发布时间】:2019-07-25 21:51:34 【问题描述】:

我正在尝试使用AVAudioPlayer.currentTime 记录音频播放器的当前时间,然后暂停它。然后使用AVAudioPlayer.play(atTime: *double*)在指定时间播放歌曲。

我的代码:

var greenCurrentTime = 0.0
var greenButton = false
var trackRight = AVAudioPlayer()

//the if statement is supposed to record the time when the button is pressed for the first time, and the else is supposed to play the audio from the time specified in the if statement when the button is pressed for the second time, i want the audio to be able to go back and play from a previous time 
//the track is already playing

@IBAction func greenHotCue(_ sender: Any) 
        if (greenButton == false) 
            greenCurrentTime = trackRight.currentTime
            print(greenCurrentTime)
            print(greenButton)
            greenButton = true
        
        else 
            trackRight.prepareToPlay()
            trackRight.play(atTime: greenCurrentTime)
            trackRight.play()
            print(greenCurrentTime)
            print(greenButton)
        
    

上面的代码执行了,但是在执行过程中什么也没有发生,并且由于if else 语句中的代码根本没有运行,所以轨道继续播放。

您能建议吗?

【问题讨论】:

您无法使用该方法返回。您的时间应该大于 deviceCurrentTime。您可以在 else 条件下将播放器 currentTime 设置为 greenCurrentTime trackRight.currentTime = greenCurrentTime greenCurrentTime = trackRight.deviceCurrentTime 【参考方案1】:

斯威夫特 5

您可以设置属性 AVAudioPlayer 的 currenTime 来指定播放音频的时间。

audioPlayer.currentTime = 5.0  // Start play audio at 5 seconds.

例子:

class TestVC : UIViewController 
    private var audioPlayer: AVAudioPlayer?

    override func viewDidLoad() 
        super.viewDidLoad()

        let alertSound = URL(fileURLWithPath: Bundle.main.path(forResource: "/Sounds/sound.aac", ofType: nil)!)
        try! AVAudiosession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: convertFromAVAudioSessionCategory(AVAudioSession.Category.playback)))
        try! AVAudioSession.sharedInstance().setActive(true)

        try! audioPlayer = AVAudioPlayer(contentsOf: alertSound)
        audioPlayer!.prepareToPlay()

        let shortStartDelay: TimeInterval = 0.01    // seconds
        let now: TimeInterval = audioPlayer?.deviceCurrentTime ?? 0

        let timeDelayPlay: TimeInterval = now + shortStartDelay
        audioPlayer?.currentTime = 5.0 // Specific time to start play
        audioPlayer?.play(atTime: timeDelayPlay)
    


【讨论】:

以上是关于有没有办法在指定时间在 Swift 上使用 AVAudioPlayer 播放音乐?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中的同一个 VC 上点击按钮后,有没有办法显示以前隐藏在早期代码行中的 UI 元素?

有没有办法在构建我的 Cocoapod 时指定对另一个分支的依赖?

在 iOS 7 上使用 Realm 和 Swift

有没有办法在 Swift Playgrounds 4 中重新缩进线条?

有没有办法在 Swift 中使用#selector 调用带参数的函数

有没有办法在最新的 Swift 3 快照中使用 C 可变参数函数?