Я пишу программу на swift 4, используя аудио-видео комплект для выполнения следующих действий:
1. После нажатия кнопки запишите звук в течение секунд timeInterval и воспроизведите его сразу после завершения.запись.2. после завершения воспроизведения вернитесь к шагу 1 и запишите звук ... и т. Д.
Я хочу, чтобы этот цикл записи и воспроизведения продолжался, но возникают проблемы из-за обработки потока вswift.
вместо того, чтобы оставаться во внутреннем цикле while, чтобы дождаться окончания воспроизведения записи, перечитать ее и продолжить с программой и, следовательно, преждевременно выйти из внешнего цикла while.
Я хочу, чтобы это происходило в цикле, и я не могу понять, как задать цикл while для проверки, воспроизводится ли аудиоплеер, Больше приоритетов
@IBAction func buttonPressedDAF(_ sender: UIButton) {
self.doDAF = true
print("starting DAF...")
let filename = getDirectory().appendingPathComponent("\(fileNameString)")
let settings = [AVFormatIDKey: Int(kAudioFormatAppleLossless),
AVEncoderAudioQualityKey: AVAudioQuality.max.rawValue,
AVEncoderBitRateKey: 320000,
AVNumberOfChannelsKey: 1,
AVSampleRateKey: 12000.0
] as[String: Any]
while self.finishedPlaying == true {
do {
//while true { // keep running in loop till DAF is switched off
finishedPlaying = false
audioRecorder =
try AVAudioRecorder(url: filename, settings: settings)
audioRecorder.delegate = self
//audioRecorder.record(forDuration: 2)
if (audioRecorder.record(forDuration: timeInterval)) // successfull in starting the recording...
{
// .now() + number of seconds
print("started recording for \(timeInterval) seconds...")
DispatchQueue.main.asyncAfter(deadline: .now() + timeInterval) { // waits for 2 seconds for the audio to record, then stops the recorder
print("recording succesfull, playing...")
self.audioRecorder.stop()
self.audioRecorder = nil
self.playRecording()
while self.audioPlayer.isPlaying == true { // audio is still playing, dont proceed
print("audio player is playing...")
}
print("finished playing audio, proceed to next...")
self.finishedPlaying = true
}
}
} catch {
print("failed...")
}
}
}
Как мне предотвратитьот подпрограммы и продолжения программы.