在开发语音识别功能时,开发者创建SpeechRecognitionEngine实例并初始化引擎时常见报错如下,该如何解决?
语音识别能力应用较广泛,例如设备在无网状态下,为听障人士或不方便收听音频场景提供音频转文本能力等。HarmonyOS侧提供speechRecognizer能力,可以将一段中文音频信息(中文、中文语境下的英文;短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音,详情可参考官网demo。创建实例并初始化引擎对应的API speechRecognizer.createEngine。
通过报错信息以及错误码,可尝试对照Core Speech Kit错误码定位报错原因。
- import { speechRecognizer } from '@kit.CoreSpeechKit';
- import { BusinessError } from '@kit.BasicServicesKit';
-
- // 定义引擎对象
- let asrEngine: speechRecognizer.SpeechRecognitionEngine;
- // 定义监听回调对象
- let listener: speechRecognizer.RecognitionListener = {
- onStart() {
- },
- onEvent() {
- },
- onResult() {
- },
- onComplete(sessionId: string, eventMessage: string) {
- asrEngine.shutdown(); // 识别完成时,及时释放资源,保证下一次能再正常创建引擎实例
- console.info(`onComplete, sessionId: ${sessionId} eventMessage: ${eventMessage}`);
- },
- onError() {
- },
- };
-
- // 设置创建引擎参数
- let extraParams: Record<string, Object> = { "locate": "CN", "recognizerMode": "short" };
- let initParamsInfo: speechRecognizer.CreateEngineParams = {
- language: 'zh-CN',
- online: 1,
- extraParams: extraParams
- };
-
- // 创建语音识别实例
- function CreateEngine() {
- speechRecognizer.createEngine(initParamsInfo)
- .then((speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
- // 接收引擎实例
- asrEngine = speechRecognitionEngine;
- console.info(`Succeeded in creating engine, result: ${JSON.stringify(asrEngine)}.`);
-
- // 设置监听
- asrEngine.setListener(listener);
-
- // 开始监听
- asrEngine.startListening({
- sessionId: 'xxx', // sessionId字符长度需要小于64,而且不能包含特殊字符,如'.'
- audioInfo: {
- audioType: 'pcm',
- sampleRate: 16000,
- soundChannel: 1,
- sampleBit: 16,
- }
- });
- })
- .catch((err: BusinessError) => {
- console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
- });
- }
-
- @Entry
- @Component
- struct Index {
- private message: string = 'Hello World';
-
- build() {
- RelativeContainer() {
- Text(this.message)
- .id('HelloWorld')
- .fontSize($r('app.float.page_text_font_size'))
- .fontWeight(FontWeight.Bold)
- .alignRules({
- center: { anchor: '__container__', align: VerticalAlign.Center },
- middle: { anchor: '__container__', align: HorizontalAlign.Center }
- })
- .onClick(() => {
- CreateEngine();
- });
- }
- .height('100%')
- .width('100%');
- }
- }
Q:录音转文字识别结束报错,报错信息onError,sessionId:errorCode:1002200009 errorMessage: Capability SendRequest Error.
A:该报错的原因可能为当前测试机版本过低,建议升级版本测试;同时可以先调用shutdown()方法关闭引擎,再通过createEngine()方法重新初始化引擎。
Q:speechRecognizer.createEngine是否支持在穿戴设备上使用?
A:不支持。Core Speech Kit当前支持的设备类型为Phone、Tablet、PC/2in1,不支持穿戴设备,详情可参考Core Speech Kit支持的设备。
实现语音识别能力,通过speechRecognizer.createEngine创建实例并初始化引擎报错,可通过排查参数CreateEngineParams、当前调试设备、以及当前调试设备中是否存在多实例问题来解决。