1

Durch Drücken der Taste ich sollte Audio für 4 Sekunden aufzeichnen und autoplay es und Schleife es für 2-mal. Ein weiterer Druckknopf Ich sollte das gleiche tun, aber vorher sollte ich vorherige Aufzeichnung löschen.Async Aufruf für Aufnahme als Autoplay als Löschen der Audio

Hier ist mein 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)") 
     } 
    } 
} 

Ich sollte das asynchron tun, jemand mir mit diesem helfen könnte?

Dank

Antwort

1

diese bei mir Arbeit, hoffen, dass es hilfreich ist

@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)") 
      } 
     } 
    }