swift 播放音乐并进行时间和数据回调
时间: 2024-09-30 19:14:21 浏览: 40
swift - 音乐播放器,播放在线音乐,音乐未播放完直接离开页面时,浮窗显示 点击浮窗再次进入播放页面
在 Swift 中播放音乐通常涉及到 AVFoundation 框架,特别是 AVPlayer 和 AVAudioPlayer 类。以下是一个基本的步骤:
1. 导入框架:首先,确保你在源文件中导入 AVFoundation 导库:
```swift
import AVFoundation
```
2. 创建 AVPlayer 或 AVAudioPlayer 对象:你可以根据音频格式选择合适的类。如果是在线流媒体或本地音频文件,AVPlayer 更适合;如果是音频片段,可以使用 AVAudioPlayer。
- **AVPlayer** (用于在线流或本地视频)
```swift
let player = AVPlayer(url: URL(fileURLWithPath: "your_audio_file.mp3"))
```
- **AVAudioPlayer** (用于音频文件)
```swift
do {
let audioUrl = Bundle.main.url(forResource: "your_audio_file", withExtension: "mp3")!
let audioPlayer = try AVAudioPlayer(contentsOf: audioUrl)
} catch {
print("Error loading audio file: \(error)")
}
```
3. 播放音乐:设置完 AVPlayer 后,调用 `play()` 方法开始播放。
```swift
player.play()
```
4. 时间管理和回调:你可以监听 `timeControlStatus` 属性的变化以及添加事件监听器处理播放进度、完成等事件。
```swift
player.addObserver(self, forKeyPath: #keyPath(AVPlayer.currentTime), options: .new, context: nil)
// 定义回调函数
func timeDidChange(_ player: AVPlayer) {
if let currentTime = player.currentTime {
print("当前时间: \(currentTime.seconds) 秒")
}
}
// 当播放完成时触发
player.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: Int32(player.currentTime.timescale)), queue: DispatchQueue.main) { [weak self] time in
guard let strongSelf = self else { return }
if player.currentItem?.status == .ended {
strongSelf.handlePlaybackCompletion()
}
}
// 处理播放结束
func handlePlaybackCompletion() {
// 在这里处理播放完成的逻辑
print("播放已完成")
}
// 清理观察者
player.removeObserver(self, forKeyPath: #keyPath(AVPlayer.currentTime))
```
阅读全文