Проблемы управления потоками на Swift - PullRequest
0 голосов
/ 27 ноября 2018

Я пишу программу на 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...")
        }
    }
}

Как мне предотвратитьот подпрограммы и продолжения программы.

...