stopContinuousRecognition() 阻止应用程序 5-7 秒
stopContinuousRecognition() blocks the app for 5-7 seconds
我正在尝试使用 Swift 在 iOS 项目中使用 Azure Speech SDK 实现语音识别,我 运行 遇到语音识别完成函数 (stopContinuousRecognition()
) 阻止应用程序 UI 几秒钟,但没有内存或处理器负载或泄漏。我试图将此功能移动到 DispatchQueue.main.async {}
,但没有结果。也许有人遇到过这样的问题?是否有必要将它放在一个单独的线程中,为什么函数需要这么长时间才能完成?
编辑:
很难提供工作示例,但基本上我是在按下按钮时调用此函数:
private func startListenAzureRecognition(lang:String) {
let audioFormat = SPXAudioStreamFormat.init(usingPCMWithSampleRate: 8000, bitsPerSample: 16, channels: 1)
azurePushAudioStream = SPXPushAudioInputStream(audioFormat: audioFormat!)
let audioConfig = SPXAudioConfiguration(streamInput: azurePushAudioStream!)!
var speechConfig: SPXSpeechConfiguration?
do {
let sub = "enter your code here"
let region = "enter you region here"
try speechConfig = SPXSpeechConfiguration(subscription: sub, region: region)
speechConfig!.enableDictation();
speechConfig?.speechRecognitionLanguage = lang
} catch {
print("error \(error) happened")
speechConfig = nil
}
self.azureRecognition = try! SPXSpeechRecognizer(speechConfiguration: speechConfig!, audioConfiguration: audioConfig)
self.azureRecognition!.addRecognizingEventHandler() {reco, evt in
if (evt.result.text != nil && evt.result.text != "") {
print(evt.result.text ?? "no result")
}
}
self.azureRecognition!.addRecognizedEventHandler() {reco, evt in
if (evt.result.text != nil && evt.result.text != "") {
print(evt.result.text ?? "no result")
}
}
do {
try! self.azureRecognition?.startContinuousRecognition()
} catch {
print("error \(error) happened")
}
}
当我再次按下按钮停止识别时,我调用了这个函数:
private func stopListenAzureRecognition(){
DispatchQueue.main.async {
print("start")
// app blocks here
try! self.azureRecognition?.stopContinuousRecognition()
self.azurePushAudioStream!.close()
self.azureRecognition = nil
self.azurePushAudioStream = nil
print("stop")
}
}
我还使用来自麦克风的原始音频数据(recognizeOnce
非常适合第一个短语,所以音频数据一切正常)
尝试先关闭流再停止连续识别:
azurePushAudioStream!.close()
try! azureRecognition?.stopContinuousRecognition()
azureRecognition = nil
azurePushAudioStream = nil
您甚至不需要异步执行。
至少这对我有用。
我正在尝试使用 Swift 在 iOS 项目中使用 Azure Speech SDK 实现语音识别,我 运行 遇到语音识别完成函数 (stopContinuousRecognition()
) 阻止应用程序 UI 几秒钟,但没有内存或处理器负载或泄漏。我试图将此功能移动到 DispatchQueue.main.async {}
,但没有结果。也许有人遇到过这样的问题?是否有必要将它放在一个单独的线程中,为什么函数需要这么长时间才能完成?
编辑: 很难提供工作示例,但基本上我是在按下按钮时调用此函数:
private func startListenAzureRecognition(lang:String) {
let audioFormat = SPXAudioStreamFormat.init(usingPCMWithSampleRate: 8000, bitsPerSample: 16, channels: 1)
azurePushAudioStream = SPXPushAudioInputStream(audioFormat: audioFormat!)
let audioConfig = SPXAudioConfiguration(streamInput: azurePushAudioStream!)!
var speechConfig: SPXSpeechConfiguration?
do {
let sub = "enter your code here"
let region = "enter you region here"
try speechConfig = SPXSpeechConfiguration(subscription: sub, region: region)
speechConfig!.enableDictation();
speechConfig?.speechRecognitionLanguage = lang
} catch {
print("error \(error) happened")
speechConfig = nil
}
self.azureRecognition = try! SPXSpeechRecognizer(speechConfiguration: speechConfig!, audioConfiguration: audioConfig)
self.azureRecognition!.addRecognizingEventHandler() {reco, evt in
if (evt.result.text != nil && evt.result.text != "") {
print(evt.result.text ?? "no result")
}
}
self.azureRecognition!.addRecognizedEventHandler() {reco, evt in
if (evt.result.text != nil && evt.result.text != "") {
print(evt.result.text ?? "no result")
}
}
do {
try! self.azureRecognition?.startContinuousRecognition()
} catch {
print("error \(error) happened")
}
}
当我再次按下按钮停止识别时,我调用了这个函数:
private func stopListenAzureRecognition(){
DispatchQueue.main.async {
print("start")
// app blocks here
try! self.azureRecognition?.stopContinuousRecognition()
self.azurePushAudioStream!.close()
self.azureRecognition = nil
self.azurePushAudioStream = nil
print("stop")
}
}
我还使用来自麦克风的原始音频数据(recognizeOnce
非常适合第一个短语,所以音频数据一切正常)
尝试先关闭流再停止连续识别:
azurePushAudioStream!.close()
try! azureRecognition?.stopContinuousRecognition()
azureRecognition = nil
azurePushAudioStream = nil
您甚至不需要异步执行。
至少这对我有用。