31 lines
783 B
Swift
31 lines
783 B
Swift
import Foundation
|
|
import AVFoundation
|
|
|
|
final class AudioPlayer: NSObject, AVAudioPlayerDelegate {
|
|
private var player: AVAudioPlayer?
|
|
private var onFinish: (() -> Void)?
|
|
|
|
func play(url: URL, onFinish: (() -> Void)? = nil) {
|
|
self.onFinish = onFinish
|
|
do {
|
|
let data = try Data(contentsOf: url)
|
|
let player = try AVAudioPlayer(data: data)
|
|
player.delegate = self
|
|
player.prepareToPlay()
|
|
player.play()
|
|
self.player = player
|
|
} catch {
|
|
print("Audio play error: \(error)")
|
|
}
|
|
}
|
|
|
|
func stop() {
|
|
player?.stop()
|
|
player = nil
|
|
}
|
|
|
|
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
|
|
onFinish?()
|
|
}
|
|
}
|