1

En appuyant sur le bouton, je devrais enregistrer de l'audio pendant 4 secondes, le lancer automatiquement et le boucler 2 fois. Un autre bouton pressant je devrais faire la même chose mais avant que je devrais supprimer l'enregistrement précédent.Appel asynchrone à l'enregistrement plutôt qu'à la lecture automatique que la suppression de l'audio

Voici mon code:

@IBAction func loopButton(_ sender: Any) { 
    if audioRecorder?.isRecording == false { 
     playButton.isEnabled = false 
     audioRecorder?.record(forDuration: 4.0) 
     audioRecorder?.stop() 
     audioPlayer?.stop() 


     do { 
      try audioPlayer = AVAudioPlayer(contentsOf: (audioRecorder?.url)!) 
      audioPlayer!.delegate = self 
      audioPlayer!.prepareToPlay() 
      audioPlayer!.numberOfLoops = 2 
      audioPlayer!.play() 
     } catch let error as NSError { 
      print("audioPlayer error: \(error.localizedDescription)") 
     } 
    } else { 
     audioRecorder?.deleteRecording() 
     audioRecorder?.record(forDuration: 4.0) 
     audioRecorder?.stop() 
     audioPlayer?.stop() 

     do { 
      try audioPlayer = AVAudioPlayer(contentsOf: (audioRecorder?.url)!) 
      audioPlayer!.delegate = self 
      audioPlayer!.prepareToPlay() 
      audioPlayer!.numberOfLoops = 2 
      audioPlayer!.play() 
     } catch let error as NSError { 
      print("audioPlayer error: \(error.localizedDescription)") 
     } 
    } 
} 

je dois faire cette manière asynchrone, quelqu'un pourrait-il me aider?

Merci

Répondre

1

Ce travail de moi, espérons qu'il est utile

@IBAction func loopButton(_ sender: Any) { 
     DispatchQueue.main.async { 
      if self.audioRecorder?.isRecording == false { 
       self.audioRecorder?.record(forDuration: 4.0) 
       self.playButton.isEnabled = false 
      } else { 
       self.audioRecorder?.deleteRecording() 
       self.audioRecorder?.record(forDuration: 4.0) 
       self.playButton.isEnabled = false 
      } 
     } 

     DispatchQueue.global().asyncAfter(deadline: .now() + 4.0) { 
      do { 
       try self.audioPlayer = AVAudioPlayer(contentsOf: (self.audioRecorder?.url)!) 
       self.audioPlayer!.delegate = self 
       self.audioPlayer!.prepareToPlay() 
       self.audioPlayer!.numberOfLoops = 2 
       self.audioPlayer!.play() 
      } catch let error as NSError { 
       print("audioPlayer error: \(error.localizedDescription)") 
      } 
     } 
    }