自定义录音机框架Swift 3.0

时间:2016-10-10 12:07:59

标签: ios frameworks swift3 audio-recording

我正在创建一个录音框架,它可以正确编译。当我在一个项目中使用这个框架时,记录文件在框架中指定的文档文件夹中创建,但它的大小保持在4KB并且没有增加,文件中没有音频。我已经给了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方法,我从我的项目中调用它。

编辑:当我在self.audioRecorder.record()行后添加计时器时,录音有效,但我不明白原因。

1 个答案:

答案 0 :(得分:0)

最后,我通过Apple支持团队的帮助找到了解决方案。

通过AudioRecording类的全局变量调用startRecording(),它可以在不添加计时器的情况下工作。