2017-09-01 3 views
0

J'ai utilisé le code slowPlay pour créer une action qui jouera de la musique de fond. J'ai essayé de faire l'inverse à l'arrêt du bouton, pour arrêter la musique. La musique ne s'arrête pas. Je veux juste avoir un bouton qui joue de la musique et arrête la musique. En utilisant le code que j'ai ci-dessous.Comment arrêter le bruit de fond (swift3)

@IBAction func play(_ sender: Any) { 
    slowPlay 
} 

@IBAction func stop(_ sender: Any) { 
    slowStop 
} 

func slowPlay() { 
    do { 
      let ap = Bundle.main.path(forResource: "slowslow", ofType: "mp3") 
      try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: ap!) as URL) 
    } catch { 
      //// 
    } 

    let session = AVAudioSession.sharedInstance() 
    do { 
      try session.setCategory(AVAudioSessionCategoryPlayback) 
    } catch { 

    } 
    player?.play() 
} 

func slowStop() { 
    do { 
      let ap = Bundle.main.path(forResource: "slowslow", ofType: "mp3") 
      try player = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: ap!) as URL) 
    } catch { 
      //// 
    } 

    let session = AVAudioSession.sharedInstance() 
    do { 
      try session.setCategory(AVAudioSessionCategoryPlayback) 
    } catch { 

    } 
    player?.stop() 
} 
+0

Veuillez vous assurer que vos exemples de code sont lisibles, le formatage simplifiera la vie en essayant de résoudre vos problèmes. – RichAppz

+0

Essayez d'utiliser une instance de lecteur unique pour lire et arrêter les médias. –

Répondre

0

Si vous regardez votre exemple de code que vous créez une nouvelle instance de la player pour les jeux et arrêter.

Vous devez créer une variable de classe pour votre lecteur, quelque chose comme:

var player: AVAudioPlayer? 

Cela vous permettra d'arrêter comme ceci:

func slowStop() { 
    player?.stop() 
} 
+0

Si vous avez besoin d'un exemple de code pour l'ensemble de la pièce faites le moi savoir, je ne suis pas sur mon ordinateur pour le moment. Mais vous devriez être capable de travailler à partir de ça. – RichAppz

0

Créer une seule instance pour le joueur comme coup

var player: AVAudioPlayer? 

func slowPlay() { 
     do { 
      let ap = Bundle.main.path(forResource: "slowslow", ofType: "mp3") 
      self.player = try AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: ap!) as URL) 
     } catch { 
      //// 
     } 

     let session = AVAudioSession.sharedInstance() 
     do { 
      try session.setCategory(AVAudioSessionCategoryPlayback) 
     } catch { 
      //catch error here 
     } 
     self.player?.play() 
    } 

    func slowStop() { 
     self.player?.stop() 
    } 

Vous pouvez ajouter une validation pour vérifier si le joueur est valide ou non avant n'importe quelle action.

+0

Fondamentalement ce que j'ai dit avec l'exemple de code, voulait que Sam s'en sorte;) Cette question est quelque chose que je crois être d'un codeur débutant, à ma réponse était de le diriger dans la bonne direction mais pas nourrir la solution. Nous étions tous là une fois;) – RichAppz