Пользовательский фреймворк для записи звука Swift 3.0

#ios #frameworks #swift3 #audio-recording

#iOS #фреймворки #swift3 #аудиозапись

Вопрос:

Я создаю фреймворк для записи звука, он компилируется правильно. Когда я использую эту платформу в проекте, файл записи создается в папке documents, как указано в framework, но его размер остается на уровне 4 КБ и не увеличивается, и в файле нет звука. Я дал 30 секунд для записи.Я использовал AVFoundation для записи звука, и тот же код работает, если я использую его непосредственно в своем проекте, но вызов кода через специально созданный фреймворк не работает.

 public func startRecording() {
    do {
        if (recordingSession != nil) {
            return
        }
        recordingSession = AVAudioSession.sharedInstance()
        try recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try recordingSession.setActive(true)

        recordingSession.requestRecordPermission() { allowed in
            DispatchQueue.main.async {
                if allowed {
                    print("allowed")
                    let audioFilename = self.getDocumentsDirectory().appendingPathComponent("recording.caf")
                    print(audioFilename)
                    let settings = [
                        AVFormatIDKey: Int(kAudioFormatAppleIMA4),
                        AVSampleRateKey: 16000,
                        AVNumberOfChannelsKey: 1,
                        AVLinearPCMBitDepthKey: 16,
                        AVLinearPCMIsBigEndianKey: 0,
                        AVLinearPCMIsFloatKey: 0
                    ]

                    do {
                        self.audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
                        self.audioRecorder.delegate = self
                        self.audioRecorder.isMeteringEnabled = true
                        let audioHWAvailable = self.recordingSession.isInputAvailable
                        if !audioHWAvailable
                        {
                            print("no audio input available")
                            return
                        }
                        UIApplication.shared.beginReceivingRemoteControlEvents()

                        self.audioRecorder.record(forDuration: 30)
                        if self.audioRecorder.prepareToRecord()
                        {
                            print("Recording started")
                            self.audioRecorder.record()
                        }

                    } catch {
                        self.finishRecording()
                    }
                } else {
                    print("failed to record!")
                }
            }
        }
    } catch {
        print("failed to record!")
    }

}
  

У меня есть этот метод startRecording в классе framework, который я вызываю из своего проекта.

РЕДАКТИРОВАТЬ: когда я добавляю таймер после строки self.AudioRecorder.record(), запись работает, но я не понимаю причины.

Ответ №1:

Наконец я нашел решение, обратившись за помощью в службу поддержки Apple.

Вызов startRecording() через глобальную переменную класса AudioRecording работал без добавления таймера.