Je fais un lecteur audio juste pour un test pour mes autres projets. je définissais une classe nommée BackgroundAudio
comme suit:Le problème d'AVAudioPlayer mène aux plantages de l'application
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)
}
}
Dans mon View Controller, j'initialisés la classe et mettent en place une fonction peu pertinente en faisant ceci:
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) {
}
}
Tout fonctionne très bien, mais questions soulevées . Le problème est le suivant:
Si j'ai cliqué sur le bouton play
et que cela fonctionne, mais si j'appuie sur le bouton mute
, le programme plante. est-ce parce que la classe n'est pas initialisée quand la sourdine est pressée avant que le bouton de lecture ne soit pressé.
Comment résoudre ceci? Merci d'avance
essayer de vérifier le 'si audioPlayer.isPlaying' – kathayatnk