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