Как записать звук на определенное время с помощью AV Audio - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь написать код для записи звука в течение 2 секунд и автоматически воспроизвести его после завершения записи.В этом коде нет ошибок, но он, похоже, не выполняет запись вообще, а непосредственно переходит в цикл if и печатает «запись успешно ...» и ничего не воспроизводит.

@IBAction func buttonPressedDAF(_ sender: UIButton) {

    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]

    do{

        audioRecorder = try AVAudioRecorder(url: filename, settings: settings)
        audioRecorder.delegate = self


        if(audioRecorder.record(forDuration: 2 ))

        {
            print("recording succesfull...")
            audioRecorder.stop()
            audioRecorder = nil
            playRecording()
        }


    }
    catch {
        print ("failed...")
    }

У меня уже естьДо этого немного работал с AV Audio, и у него нет проблем с реализацией Audio Recorder, основанного на кнопках Start, Stop, однако здесь кажется, что функция record (forDurartion:) просто не работает.

Заранее спасибо

1 Ответ

0 голосов
/ 25 ноября 2018

Если для этого нет блока завершения, вы можете просто использовать мой код ниже, чтобы сделать задержку для вызова кода остановки записи :)

@IBAction func buttonPressedDAF(_ sender: UIButton) {

        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]

        do{

            audioRecorder = try AVAudioRecorder(url: filename, settings: settings)
            audioRecorder.delegate = self


            if(audioRecorder.record(forDuration: 2 ))

            {
                // .now() + number of seconds
                DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                    print("recording succesfull...")
                    self.audioRecorder.stop()
                    self.audioRecorder = nil
                    self.playRecording()
                }
            }


        }
        catch {
            print ("failed...")
        }
...