我得到了我的应用程序崩溃时,我正在使用麦克风在我的情况下,微软团队在后台,并试图录制音频内我的应用程序。
由于未捕获的异常'com.apple.coreaudio. avfaudio',正在终止应用程序,原因:'所需条件为假:是否为有效格式采样速率和通道计数(格式)'
请参考下面的代码:
func startRecording() {
// Clear all previous session data and cancel task
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
// Create instance of audio session to record voice
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSession.Category.record, mode: AVAudioSession.Mode.measurement, options: AVAudioSession.CategoryOptions.defaultToSpeaker)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
self.recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
let inputNode = audioEngine.inputNode
guard let recognitionRequest = recognitionRequest else {
fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
}
recognitionRequest.shouldReportPartialResults = true
self.recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
self.textField.text = result?.bestTranscription.formattedString
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
self.micButton.isEnabled = true
}
})
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
self.audioEngine.prepare()
do {
try self.audioEngine.start()
} catch {
print("audioEngine couldn't start because of an error.")
}
self.textField.text = ""
}
我很确定问题出在这里的某个地方,但不知道如何解决。
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
2条答案
按热度按时间6jygbczu1#
所以应用程序崩溃,因为我没有应用正确的麦克风通道。
第1步在导入后的代码顶部创建一个协议,以表示文件中的错误,其中u:设音频引擎= AVAudioEngine()
第2步在开始的时候在你的函数中添加返回值boolean
第3步在sharedInstanceCatch部分添加这行代码(它将防止崩溃)
以上返回将阻止执行代码...
步骤4在视图控制器中创建扩展
在这里输入代码(网络上有数百万个示例)在函数内部,您可以创建一个警报,并在“in”部分使用self
xqkwcwgp2#