Ich mache einen Audio-Player nur für einen Test für meine anderen Projekte. I definiert eine Klasse mit dem Namen BackgroundAudio
wie folgt:AVAudioPlayer führt zu App-Abstürzen
class BackgroundAudio: NSObject,AVAudioPlayerDelegate {
var audioPlayer = AVAudioPlayer()
override init() {
super.init()
}
func play(audioOfUrl:URL) {
let urlPath = audioOfUrl
do {
audioPlayer = try AVAudioPlayer.init(contentsOf: urlPath)
audioPlayer.delegate = self
audioPlayer.play()
} catch let error {
print(error.localizedDescription)
}
}
func stop() {
audioPlayer.stop()
}
func mute() {
audioPlayer.setVolume(0, fadeDuration: 2)
}
func unMute() {
audioPlayer.setVolume(1, fadeDuration: 2)
}
}
In meinem View-Controller, ich die Klasse initialisiert und einige relevante Funktion zu implementieren, indem dies zu tun:
class ViewController: UIViewController {
var urlPath = Bundle.main.url(forResource: "Focus", withExtension: "mp3")!
var backgroundAudio:BackgroundAudio?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
backgroundAudio = BackgroundAudio()
}
@IBAction func playButtonTapped(_ sender: Any) {
backgroundAudio?.play(audioOfUrl: urlPath)
}
@IBAction func stopButtonTapped(_ sender: Any) {
backgroundAudio?.stop()
}
@IBAction func muteButtonTapped(_ sender: Any) {
backgroundAudio?.mute()
}
@IBAction func unMuteButtonTapped(_ sender: Any) {
}
}
Alles funktioniert ganz gut, aber aufgeworfenen Fragen . Das Problem ist das:
Wenn ich die Schaltfläche play
angeklickt und es funktioniert, aber wenn ich mute
drücken, stürzt das Programm ab. liegt daran, dass die Klasse nicht initialisiert wird, wenn die Stummschaltung vor dem Drücken der Wiedergabetaste gedrückt wird.
Wie löst man das? Vielen Dank im Voraus
try Überprüfung 'wenn audioPlayer.isPlaying' – kathayatnk