HarmonyOS 鸿蒙Next 语音转文字

HarmonyOS 鸿蒙Next 语音转文字

代码 如下

import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';

class SpeechRecognizerManager {
  private static asrEngine: speechRecognizer.SpeechRecognitionEngine | null = null;
  private static sessionId: string = "asr" + Date.now();

  // 创建引擎
  private static async createEngine(): Promise<void> {
    return new Promise((resolve, reject) => {
      try {
        console.log("开始创建语音识别引擎...");

        const initParams: speechRecognizer.CreateEngineParams = {
          language: 'zh-CN',
          online: 1,
          extraParams: {
            locate: "CN",
            recognitionMode: "long"
          }
        };
        console.log("创建引擎参数:", JSON.stringify(initParams));

        const callback = (err: BusinessError, engine: speechRecognizer.SpeechRecognitionEngine) => {
          if (!err && engine) {
            console.log("引擎创建成功");
            SpeechRecognizerManager.asrEngine = engine;
            resolve();
          } else {
            console.error("引擎创建失败");
            reject();
          }
        };

        speechRecognizer.createEngine(initParams, callback);
      } catch (err) {
        console.error("创建引擎异常", err);
        reject();
      }
    });
  }

  // 设置监听回调
  private static setListener(callback: (result: string) => void) {
    if (!SpeechRecognizerManager.asrEngine) {
      console.error("引擎未初始化,无法设置监听器");
      return;
    }

    const listener: speechRecognizer.RecognitionListener = {
      onStart(sessionId: string, eventMessage: string) {
        console.log('开始识别', sessionId, eventMessage);
      },
      onEvent(sessionId: string, eventCode: number, eventMessage: string) {
        console.log('识别事件', sessionId, eventCode, eventMessage);
      },
      onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {
        console.log('识别结果', sessionId, JSON.stringify(result));
        if (result.isFinal) {
          callback(result.result);
        }
      },
      onComplete(sessionId: string, eventMessage: string) {
        console.log('识别完成', sessionId, eventMessage);
      },
      onError(sessionId: string, errorCode: number, errorMessage: string) {
        console.error('识别错误', sessionId, errorCode, errorMessage);
      }
    };

    SpeechRecognizerManager.asrEngine.setListener(listener);
  }

  // 开始监听
  private static async startListening(): Promise<void> {
    return new Promise((resolve, reject) => {
      if (!SpeechRecognizerManager.asrEngine) {
        reject();
        return;
      }

      const params: speechRecognizer.StartParams = {
        sessionId: SpeechRecognizerManager.sessionId,
        audioInfo: {
          audioType: 'pcm',
          sampleRate: 16000,
          soundChannel: 1,
          sampleBit: 16
        },
        extraParams: {
          recognitionMode: 0,
          maxAudioDuration: 60000
        }
      };

      SpeechRecognizerManager.asrEngine.startListening(params);
      console.log("开始语音识别成功");
      resolve();
    });
  }

  // 停止识别
  static async stopListening(): Promise<void> {
    return new Promise(resolve => {
      if (!SpeechRecognizerManager.asrEngine) {
        resolve();
        return;
      }

      SpeechRecognizerManager.asrEngine.cancel(SpeechRecognizerManager.sessionId);
      resolve();
    });
  }

  // 释放引擎
  static async release(): Promise<void> {
    return new Promise(resolve => {
      if (!SpeechRecognizerManager.asrEngine) {
        resolve();
        return;
      }

      SpeechRecognizerManager.asrEngine.shutdown();
      SpeechRecognizerManager.asrEngine = null;
      resolve();
    });
  }

  // 初始化并开始识别
  static async start(callback: (result: string) => void): Promise<void> {
    try {
      console.log("开始初始化语音识别");
      await SpeechRecognizerManager.createEngine();
      
      console.log("设置监听器");
      SpeechRecognizerManager.setListener(callback);
      
      console.log("开始识别");
      await SpeechRecognizerManager.startListening();
      return Promise.resolve();
    } catch {
      console.error("语音识别启动失败");
      return Promise.reject();
    }
  }
}

export default SpeechRecognizerManager;

报错: 创建引擎异常 TypeError: Cannot read property createEngine of undefined 。我用模拟机 然后语音转文字无法进行使用 是这个api不支持模拟机码


更多关于HarmonyOS 鸿蒙Next 语音转文字的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

模拟器不支持,用真机

更多关于HarmonyOS 鸿蒙Next 语音转文字的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next 语音转文字功能基于华为自研的语音识别技术,支持实时将语音转换为文本。该功能通过内置的语音识别引擎,能够高效处理多语种、多方言的语音输入,并支持离线模式,确保在没有网络连接的情况下仍可使用。用户可以通过系统API调用该功能,开发者可以在应用中集成语音转文字服务,提升用户体验。鸿蒙Next的语音转文字功能还具备低延迟、高准确率的特点,适用于多种场景,如语音输入、语音助手、会议记录等。

回到顶部