有没有办法在指定时间在 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 时指定对另一个分支的依赖?
有没有办法在 Swift Playgrounds 4 中重新缩进线条?