gpt4 book ai didi

ios - iPhone 模拟器 10.0 - 语音识别不可用

转载 作者:行者123 更新时间:2023-11-28 15:33:07 25 4
gpt4 key购买 nike

Swift 新手!我正在尝试实现一个使用语音识别器将语音转换为文本的应用。

问题
SFSpeechRecognizer().isAvailablefalse

private let request = SFSpeechAudioBufferRecognitionRequest()
private var task: SFSpeechRecognitionTask?
private let engine = AVAudioEngine()

func recognize() {
guard let node = engine.inputNode else {
return
}

let recordingFormat = node.outputFormat(forBus: 0)
node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in
self.recognitionRequest.append(buffer);
}

engine.prepare()
do {
try engine.start()
} catch {
return print(error)
}

guard let systemRecognizer = SFSpeechRecognizer() else {
return
}

if !systemRecognizer.isAvailable {
self.log(.debug, msg: "Entered this condition and stopped!")
return
}
}

问题
我不确定为什么它会在模拟器中停止。麦克风在 iPhone 模拟器中工作吗?

更新我尝试用下面代码的音频文件进行测试,

let audioFile = Bundle.main.url(forResource: "create_activity", withExtension: "m4a", subdirectory: "Sample Recordings")
let recognitionRequest = SFSpeechURLRecognitionRequest(url: audioFile!)

收到错误提示,Error Domain=kAFAssistantErrorDomain Code=1101 "(null)"

最佳答案

看起来模拟器已经获得了使用 iOS 11 的麦克风的访问权限。不幸的是,我无法找到任何文档来确认这一点,但可以通过以下代码示例来确认此功能。在 iOS 11 模拟器上运行良好,但在 iOS 10 模拟器(或更早版本)上什么都不做。

import UIKit
import Speech

class ViewController: UIViewController {

private var recognizer = SFSpeechRecognizer()
private var request = SFSpeechAudioBufferRecognitionRequest()
private let engine = AVAudioEngine()

override func viewDidLoad() {
super.viewDidLoad()

requestPermissions()
}

private func requestPermissions() {
//
// Do not forget to add `NSMicrophoneUsageDescription` and `NSSpeechRecognitionUsageDescription` to `Info.plist`
//

// Request recording permission
AVAudioSession.sharedInstance().requestRecordPermission { allowed in
if allowed {
// Request speech recognition authorization
SFSpeechRecognizer.requestAuthorization { status in
switch status {
case .authorized: self.prepareSpeechRecognition()
case .notDetermined, .denied, .restricted: print("SFSpeechRecognizer authorization status: \(status).")
}
}

} else {
print("AVAudioSession record permission: \(allowed).")
}
}
}

private func prepareSpeechRecognition() {
// Check if recognizer is available (has failable initializer)
guard let recognizer = recognizer else {
print("SFSpeechRecognizer not supported.")
return
}

// Prepare recognition task
recognizer.recognitionTask(with: request) { (result, error) in
if let result = result {
print("SFSpeechRecognizer result: \(result.bestTranscription.formattedString)")
} else {
print("SFSpeechRecognizer error: \(String(describing: error))")
}
}

// Install tap to audio engine input node
let inputNode = engine.inputNode
let busNumber = 0
let recordingFormat = inputNode.outputFormat(forBus: busNumber)
inputNode.installTap(onBus: busNumber, bufferSize: 1024, format: recordingFormat) { buffer, time in
self.request.append(buffer);
}

// Prepare and start audio engine
engine.prepare()

do {
try engine.start()
} catch {
return print(error)
}
}

}

不要忘记将 NSMicrophoneUsageDescriptionNSSpeechRecognitionUsageDescription 添加到 Info.plist

关于ios - iPhone 模拟器 10.0 - 语音识别不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com