
回复
在数字化快速发展的今天,语音技术在提升交互体验和辅助特殊人群方面发挥着重要作用。鸿蒙 Next 的 Core Speech Kit 提供了文本转语音(TTS)和语音识别(ASR)功能,为开发者打造无障碍交互应用提供了有力支持,本文将深入探讨其实用场景。
鸿蒙 Core Speech Kit 提供 双引擎驱动模式
确保已安装鸿蒙开发工具,并创建 HarmonyOS 项目,添加 Core Speech Kit 相关依赖。
引入模块 :在代码文件中引入 textToSpeech 模块。
import { textToSpeech } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';
创建引擎 :调用 createEngine 接口创建 TextToSpeechEngine 实例,设置语言、音色等参数。
let ttsEngine: textToSpeech.TextToSpeechEngine;
let extraParam: Record<string, Object> = {"style": 'interaction-broadcast', "locate": 'CN', "name": 'EngineName'};
let initParamsInfo: textToSpeech.CreateEngineParams = { language: 'zh-CN', person: 0, online: 1, extraParams: extraParam };
textToSpeech.createEngine(initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
if (!err) {
ttsEngine = textToSpeechEngine;
} else {
console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
}
});
设置播报参数与监听器 :实例化 SpeakParams 对象和 SpeakListener 对象,设置播报策略、音量、语速等参数,并监听播报事件。
let speakListener: textToSpeech.SpeakListener = { /* 监听器方法实现 */ };
ttsEngine.setListener(speakListener);
let originalText: string = 'Hello HarmonyOS';
let extraParam: Record<string, Object> = {"queueMode": 0, "speed": 1, "volume": 2, "pitch": 1, "languageContext": 'zh-CN', "audioType": "pcm", "soundChannel": 3, "playType": 1 };
let speakParams: textToSpeech.SpeakParams = { requestId: '123456', extraParams: extraParam };
ttsEngine.speak(originalText, speakParams);
引入模块 :引入 speechRecognizer 模块。
import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';
创建引擎 :调用 createEngine 方法创建 SpeechRecognitionEngine 实例,设置语言、识别模式等参数。
let asrEngine: speechRecognizer.SpeechRecognitionEngine;
let sessionId: string = '123456';
let extraParam: Record<string, Object> = {"locate": "CN", "recognizerMode": "short"};
let initParamsInfo: speechRecognizer.CreateEngineParams = { language: 'zh-CN', online: 1, extraParams: extraParam };
speechRecognizer.createEngine(initParamsInfo, (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
if (!err) {
asrEngine = speechRecognitionEngine;
} else {
console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
}
});
设置监听器 :实例化 RecognitionListener 对象,设置回调方法,接收语音识别结果等信息。
let setListener: speechRecognizer.RecognitionListener = { /* 回调方法实现 */ };
asrEngine.setListener(setListener);
开始识别 :根据音频来源(文件或麦克风),设置识别参数,调用 startListening 方法开始识别。
private startListeningForWriteAudio() {
let recognizerParams: speechRecognizer.StartParams = { sessionId: this.sessionId, audioInfo: { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 } };
asrEngine.startListening(recognizerParams);
}
写入音频流 :对于音频文件识别,读取文件并写入音频流;对于麦克风识别,获取音频流后写入。
let uint8Array: Uint8Array = new Uint8Array();
asrEngine.writeAudio(sessionId, uint8Array);
import { textToSpeech } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';
let ttsEngine: textToSpeech.TextToSpeechEngine;
function createEngine() {
let extraParam: Record<string, Object> = {"style": 'interaction-broadcast', "locate": 'CN', "name": 'EngineName'};
let initParamsInfo: textToSpeech.CreateEngineParams = { language: 'zh-CN', person: 0, online: 1, extraParams: extraParam };
textToSpeech.createEngine(initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
if (!err) {
ttsEngine = textToSpeechEngine;
} else {
console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
}
});
}
function speak(text: string) {
let speakListener: textToSpeech.SpeakListener = { /* 监听器方法实现 */ };
ttsEngine.setListener(speakListener);
let extraParam: Record<string, Object> = {"queueMode": 0, "speed": 1, "volume": 2, "pitch": 1, "languageContext": 'zh-CN', "audioType": "pcm", "soundChannel": 3, "playType": 1 };
let speakParams: textToSpeech.SpeakParams = { requestId: '123456', extraParams: extraParam };
ttsEngine.speak(text, speakParams);
}
import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';
let asrEngine: speechRecognizer.SpeechRecognitionEngine;
let sessionId: string = '123456';
function createEngine() {
let extraParam: Record<string, Object> = {"locate": "CN", "recognizerMode": "short"};
let initParamsInfo: speechRecognizer.CreateEngineParams = { language: 'zh-CN', online: 1, extraParams: extraParam };
speechRecognizer.createEngine(initParamsInfo, (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
if (!err) {
asrEngine = speechRecognitionEngine;
} else {
console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
}
});
}
function startRecognition() {
let setListener: speechRecognizer.RecognitionListener = { /* 回调方法实现 */ };
asrEngine.setListener(setListener);
let recognizerParams: speechRecognizer.StartParams = { sessionId: sessionId, audioInfo: { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 } };
asrEngine.startListening(recognizerParams);
}
function writeAudio(audioData: Uint8Array) {
asrEngine.writeAudio(sessionId, audioData);
}