我正在创建一个录音框架,它可以正确编译。当我在一个项目中使用这个框架时,记录文件在框架中指定的文档文件夹中创建,但它的大小保持在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()行后添加计时器时,录音有效,但我不明白原因。
答案 0 :(得分:0)
最后,我通过Apple支持团队的帮助找到了解决方案。
通过AudioRecording类的全局变量调用startRecording(),它可以在不添加计时器的情况下工作。