首页 > 其他分享 >实时语音交互,打造更加智能便捷的应用

实时语音交互,打造更加智能便捷的应用

时间:2024-09-30 15:47:01浏览次数:6  
标签:console string 便捷 sessionId let requestId 语音 交互

随着人工智能和自然语言处理技术的进步,用户对智能化和便捷化应用的需求不断增加。语音交互技术以其直观的语音指令,革新了传统的手动输入方式,简化了用户操作,让应用变得更加易用和高效。

通过语音交互,用户可以在不方便使用触屏操作例如驾驶、烹饪时通过语音指令进行操作;在需要输入大量文本时,通过语音输入,可以显著提高信息输入的效率;此外,语音交互也为视觉障碍或阅读困难的用户提供了一种便捷的替代交互方式。

HarmonyOS SDK 基础语音服务(Core Speech Kit)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能力,便于用户与设备进行互动,实现将实时输入的语音与文本之间相互转换。

文本转语音

可高效的将一段不超过10000字符的文本合成为可播报的音频流,将文字转换成流畅自然的人声,广泛适用于有声阅读、新闻播报、站厅播报等多个应用场景。

系统无障碍接入文本转语音能力,在无网状态下,也可以为视障人士提供普通话播报功能,音色为聆小珊女声。

image

语音识别

可高效实现将实时语音转写成文字,解放双手,适用于语音聊天、语音搜索、语音指令、语音问答等多个应用场景。

将一段音频(时长不超过60s)信息转换为文本。语音识别服务提供将音频信息转换为文本的能力,便于用户与设备进行互动,实现实时语音交互、语音识别。目前本服务支持的语种为中文,支持离线模型。

image

能力优势

稳定可靠:端侧能力,不依赖网络,稳定可靠。

即开即用:系统原生API,不占用应用空间,开箱即用。

功能丰富:针对不同场景,提供了丰富的扩展和调节参数。

功能演示

image
image

开发步骤

(一) 文本转语音

1.在使用文本转语音时,将实现文本转语音相关的类添加至工程。

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

2.调用createEngine接口,创建textToSpeechEngine实例。

createEngine接口提供了两种调用形式,当前以其中一种作为示例,其他方式可参考API参考

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
};

// 调用createEngine方法
textToSpeech.createEngine(initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
  if (!err) {
    console.info('Succeeded in creating engine');
    // 接收创建引擎的实例
    ttsEngine = textToSpeechEngine;
  } else {
    // 创建引擎失败时返回错误码1003400005,可能原因:引擎不存在、资源不存在、创建引擎超时
    console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
  }
});

3.得到TextToSpeechEngine实例对象后,实例化SpeakParams对象、SpeakListener对象,并传入待合成及播报的文本originalText,调用speak接口进行播报。

// 设置speak的回调信息
let speakListener: textToSpeech.SpeakListener = {
  // 开始播报回调
  onStart(requestId: string, response: textToSpeech.StartResponse) {
    console.info(`onStart, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 合成完成及播报完成回调
  onComplete(requestId: string, response: textToSpeech.CompleteResponse) {
    console.info(`onComplete, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 停止播报回调
  onStop(requestId: string, response: textToSpeech.StopResponse) {
    console.info(`onStop, requestId: ${requestId} response: ${JSON.stringify(response)}`);
  },
  // 返回音频流
  onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
    console.info(`onData, requestId: ${requestId} sequence: ${JSON.stringify(response)} audio: ${JSON.stringify(audio)}`);
  },
  // 错误回调
  one rror(requestId: string, errorCode: number, errorMessage: string) {
    console.error(`onError, requestId: ${requestId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
  }
};
// 设置回调
ttsEngine.setListener(speakListener);
let originalText: string = '你好,华为';
// 设置播报相关参数
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', // requestId在同一实例内仅能用一次,请勿重复设置
  extraParams: extraParam
};
// 调用播报方法
ttsEngine.speak(originalText, speakParams);

(二) 语音识别

1.在使用语音识别时,将实现语音识别相关的类添加至工程。

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

2.调用createEngine方法,对引擎进行初始化,并创建SpeechRecognitionEngine实例。

createEngine方法提供了两种调用形式,当前以其中一种作为示例,其他方式可参考API参考

let asrEngine: speechRecognizer.SpeechRecognitionEngine;
let requestId: string = '123456';
// 创建引擎,通过callback形式返回
// 设置创建引擎参数
let extraParam: Record<string, Object> = {"locate": "CN", "recognizerMode": "short"};
let initParamsInfo: speechRecognizer.CreateEngineParams = {
  language: 'zh-CN',
  online: 1,
  extraParams: extraParam
};
// 调用createEngine方法
speechRecognizer.createEngine(initParamsInfo, (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
  if (!err) {
    console.info('Succeeded in creating engine.');
    // 接收创建引擎的实例
    asrEngine = speechRecognitionEngine;
  } else {
    // 无法创建引擎时返回错误码1002200008,原因:引擎正在销毁中
    console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
  }
});

3.得到SpeechRecognitionEngine实例对象后,实例化RecognitionListener对象,调用setListener方法设置回调,用来接收语音识别相关的回调信息。

// 创建回调对象
let setListener: speechRecognizer.RecognitionListener = {
  // 开始识别成功回调
  onStart(sessionId: string, eventMessage: string) {
    console.info(`onStart, sessionId: ${sessionId} eventMessage: ${eventMessage}`);
  },
  // 事件回调
  onEvent(sessionId: string, eventCode: number, eventMessage: string) {
    console.info(`onEvent, sessionId: ${sessionId} eventCode: ${eventCode} eventMessage: ${eventMessage}`);
  },
  // 识别结果回调,包括中间结果和最终结果
  onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {
    console.info(`onResult, sessionId: ${sessionId} sessionId: ${JSON.stringify(result)}`);
  },
  // 识别完成回调
  onComplete(sessionId: string, eventMessage: string) {
    console.info(`onComplete, sessionId: ${sessionId} eventMessage: ${eventMessage}`);
  },
  // 错误回调,错误码通过本方法返回
  // 如:返回错误码1002200006,识别引擎正忙,引擎正在识别中
  // 更多错误码请参考错误码参考
  one rror(sessionId: string, errorCode: number, errorMessage: string) {
    console.error(`onError, sessionId: ${sessionId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
  }
}
// 设置回调
asrEngine.setListener(setListener);

4.设置开始识别的相关参数,调用startListening方法,开始合成。

let audioParam: speechRecognizer.AudioInfo = {audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16};
let extraParam: Record<string, Object> = {"vadBegin": 2000, "vadEnd": 3000, "maxAudioDuration": 40000};
let recognizerParams: speechRecognizer.StartParams = {
  sessionId: requestId,
  audioInfo: audioParam,
  extraParams: extraParam
};
// 调用开始识别方法
asrEngine.startListening(recognizerParams);

5.传入音频流,调用writeAudio方法,开始写入音频流。读取音频文件时,开发者需预先准备一个pcm格式音频文件。

let uint8Array: Uint8Array = new Uint8Array();
// 可以通过如下方式获取音频流:1、通过录音获取音频流;2、从音频文件中读取音频流
// 写入音频流,音频流长度仅支持640或1280
asrEngine.writeAudio(requestId, uint8Array);

了解更多详情>>

访问基础语音服务联盟官网

获取文本转语音服务开发指导文档

获取语音识别服务开发指导文档

标签:console,string,便捷,sessionId,let,requestId,语音,交互
From: https://www.cnblogs.com/HarmonyOSSDK/p/18441970

相关文章

  • C# List的便捷使用获取交集、差集与并集
    前言在C#中,我们有时会需要对两个数据列表进行一些数据的提取、对比之类的特殊操作,此时我们就可以借助System.Linq进行快速操作。我们可以使用System.Linq(LanguageIntegratedQuery)来方便地对List<T>进行交集、差集和并集的操作 1.并集-Union并集可以快速......
  • 实时语音交互中文基准首期测评出炉;美取消 SB-1047 法案,大模型厂商大难不死丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • SciTech-Automation-UI交互自动化: Microsoft 的 接口自动化测试 : 微信的: LLM(AI/Tr
    用LLM+Python实现微信消息的自动应答!/usr/bin/python3#coding:utf-8importpandasaspdimportnumpyasnpfromuiautomationimportwindowControl,Menucontrolfromfunctoolsimportpartial,wraps#readreplydatadf=pd.read_csv("应答数据.csv",......
  • 第3章 表格布局与表单交互
    3.1表格概述3.1.1表格的结构表格是由行和列组成的二维表,而每行又由一个或多个单元格组成,用于放置数据或其他内容。表格中的单元格是行与列的交叉部分,是组成表格的最基本单元。单元格的内容是数据,也称数据单元格。数据单元格可以包含文本、图片、列表、段落、表单、水平线或......
  • 第三章 表格布局与表单交互章节习题
    1.采用表格布局完成“CASIO计算器”外观设计,其中表格的每一个单元格均需要设计带边框,效果如图:代码:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>CASIO计算器</title></head><body><tablewidth="400"borde......
  • 【升级版本】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交
     ......
  • PlantSimulation的socket交互之TCP
    PlantSimulation的socket交互之TCP 1.python的socketTCP客户端建立其实可以任选python或plantsimulation作为客户端,博主因研究需要,将python设为客户端。plant设为服务器。1"""2CreatedonSatDecember1421:00:0020213@author:ZhangLitong-NanjingUniversity......
  • GPT-SoVITS语音合成模型实践
    1.概述GPT-SoVITS是一款开源的语音合成模型,结合了深度学习和声学技术,能够实现高质量的语音生成。其独特之处在于支持使用参考音频进行零样本语音合成,即使没有直接的训练数据,模型仍能生成相似风格的语音。用户可以通过微调模型,进一步提升其性能,以适应特定的应用需求。2.内容2.1......
  • 【Web APIs day 03 事件流、事件委托、其他事件:优化多个事件绑定和实现常见网页交互】
    WebAPIs-第3天目标:学习事件流,事件委托,其他事件等知识,优化多个事件绑定和实现常见网页交互事件流移除事件监听其他事件元素尺寸与位置综合案例事件流为什么要学习事件流?可以帮我们解决一些疑惑,比如点击子盒子会会弹出2次的问题事件流指的是事件完整执行过程中的......
  • yy语音找不到qjpeg4.dll怎么办?YY语音qjpeg4.dll修复大全:多种方法总有一款适合你
    当YY语音找不到qjpeg4.dll文件时,这通常意味着系统或YY语音的安装目录中缺少了必要的动态链接库文件。以下是一些修复方法,你可以根据自己的情况选择适合的一种或多种方法尝试解决:1.重新安装YY语音步骤:卸载当前版本的YY语音。清除可能残留的旧文件或注册表项(可选步骤,如果卸......