- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在制作一个文本转语音和语音转文本的应用程序。
我现在遇到的问题是文本转语音使用 AVSpeechSynthesizer 可以正常工作。但是在我使用 SFSpeechRecognizer 录制并进行语音转文本之后,文本转语音停止工作(即,不回话)。
我也是 swift 新手。但是我从几个不同的教程中获得了这段代码,并试图将它们合并在一起。
这是我的代码:
private var speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "en-US"))!
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
private var recognitionTask: SFSpeechRecognitionTask?
private var audioEngine = AVAudioEngine()
@objc(speak:location:date:callback:)
func speak(name: String, location: String, date: NSNumber,_ callback: @escaping (NSObject) -> ()) -> Void {
let utterance = AVSpeechUtterance(string: name)
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
}
@available(iOS 10.0, *)
@objc(startListening:location:date:callback:)
func startListening(name: String, location: String, date: NSNumber,_ callback: @escaping (NSObject) -> ()) -> Void {
if audioEngine.isRunning {
audioEngine.stop()
recognitionRequest?.endAudio()
} else {
if recognitionTask != nil { //1
recognitionTask?.cancel()
recognitionTask = nil
}
let audioSession = AVAudioSession.sharedInstance() //2
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest() //3
guard let inputNode = audioEngine.inputNode else {
fatalError("Audio engine has no input node")
} //4
guard let recognitionRequest = recognitionRequest else {
fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
} //5
recognitionRequest.shouldReportPartialResults = true //6
recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in //7
var isFinal = false //8
if result != nil {
print(result?.bestTranscription.formattedString) //9
isFinal = (result?.isFinal)!
}
if error != nil || isFinal { //10
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
}
})
let recordingFormat = inputNode.outputFormat(forBus: 0) //11
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
audioEngine.prepare() //12
do {
try audioEngine.start()
} catch {
print("audioEngine couldn't start because of an error.")
}
}
}
最佳答案
他们都有一个 AVAudioSession。
对于 AVSpeechSynthesizer,我想它必须设置为:
_audioSession.SetCategory(AVAudioSessionCategory.Playback,
AVAudioSessionCategoryOptions.MixWithOthers);
对于 SFSpeechRecognizer:
_audioSession.SetCategory(AVAudioSessionCategory.PlayAndRecord,
AVAudioSessionCategoryOptions.MixWithOthers);
希望对您有所帮助。
关于iOS:AVSpeechSynthesizer 在使用 SFSpeechRecognizer 录制后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43637714/
我正在构建一个支持语音识别并将语音转换为文本的搜索,所以我使用 SFSpeechRecognizer .但问题是我需要同时支持多种语言,例如(“en_US”、“fr”、vi、ar)。 主要思想是用户可
我正在尝试使用 SFSpeechRecognizer 在我的应用程序中转录语音命令。命令只有一个词。 SFSpeechAudioBufferRecognitionRequest(来自麦克风点击)可能需
SFSpeechRecognizer 是否像 Siri 一样工作,是在 Apple 服务器上完成处理还是在 iPhone 本地完成? 最佳答案 语音识别 API 的描述在此 link指出 " In t
SFSpeechRecognizer 对于我的用例来说非常不准确。我尝试设置 contextual 字符串,因为我有一组要与之匹配的单词。但它仍然无法这样做。我需要任何其他配置吗? 我正在使用 App
我有一个 SFSpeechRecognizer 从 Apple 的示例应用程序设置 https://developer.apple.com/library/content/samplecode/Spe
我正在使用 iOS 10 内置语音识别来破解一个小项目。我使用设备的麦克风得到了工作结果,我的语音被非常准确地识别。 我的问题是为每个可用的部分转录调用识别任务回调,我希望它检测停止说话的人并调用回调
我已经在以下位置下载了示例代码 SpeakToMe: https://developer.apple.com/library/prerelease/content/samplecode/SpeakTo
我正在尝试使用 SFSpeechRecognizer 但我没有办法测试我是否正确地实现了它,而且由于它是一个相对较新的类,我找不到示例代码(我不知道快)。我是否犯了任何不可原谅的错误/遗漏了什么? [
我正在尝试初始化 SFSpeechRecognizer 的实例,但出现以下错误 Cannot convert value of type 'Locale' to expected argument t
我正在使用 iOS SFSpeechRecognizer API 开发语音转文本应用程序。 找到一个很棒的tutorial here:并且效果很好。 我想在语音输入停止后立即处理文本并执行一些操作。所
我正在编写一个拼字比赛应用程序。我一直在使用 SFSpeechRecognizer,但它不能很好地处理单个字母,因为我猜它正在寻找口头短语。 我已经在谷歌上搜索 SFSpeechRecognizer
这是我第一次在 Swift 中使用 SFSpeechRecognizer,有一个功能无法正常工作。当我按下按钮 audioButtonPressed 时,它似乎开始识别正常,再次按下它会停止。当我尝试
我正在使用这个库 https://github.com/appcoda/SpeechToTextDemo将语音转录为文本 我想用这个库显示真实的语音幅度来显示语音图表 https://github.c
我在我的应用程序中使用 SFSpeechRecognizer,由于有一个专用按钮(开始语音识别),它可以很好地简化最终用户在 UITextView 中输入评论的过程。 但是如果用户首先手动输入一些文本
我正在使用 Swift 开发一个尝试转录对话的 iOS 应用程序。我成功地能够使用 AVAudioEngine() 和 SFSpeechRecognizer() 转录对话。 // MARK:
我正在制作一个文本转语音和语音转文本的应用程序。 我现在遇到的问题是文本转语音使用 AVSpeechSynthesizer 可以正常工作。但是在我使用 SFSpeechRecognizer 录制并进行
我正在尝试使用 Apple 的语音框架在 macOS 10.15.1 上进行语音识别。在 macOS 10.15 之前,语音识别仅在 iOS 上可用,但根据 the documentation和 th
我使用 SFSpeechRecognizer,基本上可以工作。 1.但有时会出现如下错误。 主要是在我没有执行 avStop() 之前。 [Utility] +[AFAggregator logDic
所以我构建了一个简单的应用程序,它使用 SFSpeechRecognizer 进行语音识别,并在屏幕上的 UITextView 中将转换后的语音显示为文本。现在我想让手机说出显示的文字。由于某种原
我正在尝试执行续。在 iOS 10 测试版上使用 AVCapture 进行语音识别。我设置了 captureOutput(...) 以持续获取 CMSampleBuffers。我将这些缓冲区直接放入我
我是一名优秀的程序员,十分优秀!