鸿蒙next 文字转语音

news2024/10/8 18:11:09

关于文字转语音的操作
先上代码,然后我再详细说说遇到的坑点
写一个工具类
export class Text2VioceUtils {}起名Text2VioceUtils
首先你要文字转语音你需要一个鸿蒙提供的引擎来做这个事情
static Text2VioceEngine: textToSpeech.TextToSpeechEngine
然后textToSpeech包下边有个函数createEngine
这个函数有个参数,类型是CreateEngineParams,就是创建引擎时候需要给引擎配置的参数返回值是Promise,这个应该不陌生,在我之前写的文章里有介绍,看见promiss就知道这个是个异步,你需要在前面加个await等待,函数名前对应加async ,你用一个变量去接收他 返回值就是这个引擎,再说createEngine函数,他有个重载函数就是CreateEngineParams参数后边有个回调函数类型是AsyncCallback ,这个类型AsyncCallback<T, E = void>有俩返回值,默认有个BusinessError就是报错的信息,另一个就是咱们用到的TextToSpeechEngine,都是大同小异,写法不同而已,你可以在外卖定义一个回调函数//static callback: AsyncCallback<textToSpeech.TextToSpeechEngine>,在创建引擎的之前去把你的回调函数赋值,然后创建的时候把你定义的回调函数填进去,也可以直接写在创建函数里面,都是一样的,看你想怎么写,下面的写法是鸿蒙官方给的示例写法
textToSpeech.createEngine(Text2VioceUtils.initParamsInfo, (err: BusinessError, textToSpeechEngine: textToSpeech.TextToSpeechEngine) => {
if (!err) {
console.info(‘Succeeded in creating engine’);
// 接收创建引擎的实例
Text2VioceUtils.Text2VioceEngine = textToSpeechEngine;
} else {
// 创建引擎失败时返回错误码1003400005,可能原因:引擎不存在、资源不存在、创建引擎超时
console.error(Failed to create engine. Code: ${err.code}, message: ${err.message}.);
}
});
这里我就遇到了之前上文中提到的坑点,说我接收到的引擎是一个undefined
报错信息如下
Error message:Cannot read property createEngine of undefined
按照我写c#的思维逻辑,就是返回的是个null,意思是你没创建引擎成功,因为你在定义的时候你没给你定义的变量赋值,所以是null,然后我就在定义的地方加了一个?,我还是先不把这个奇怪的地方先说了,先记住这个undefined,我还是先说代码好了。
创建引擎的参数CreateEngineParams 目前只支持离线版 online是1,
static initParamsInfo: textToSpeech.CreateEngineParams = {
language: ‘zh-CN’,
person: 0,
online: 1,
extraParams: Text2VioceUtils.extraParam
};
extraParams这个参数可写可不写因为他带个?这里就不多说了直接赋值粘贴因为官网上也没说啥意思
{“style”: ‘interaction-broadcast’, “locate”: ‘CN’, “name”: ‘EngineName’}
创建好了以后需要注册一些回调方法
//设置speak的回调
let speaklistener: textToSpeech.SpeakListener = {
// 开始播报回调
onStart(requestId: string, response: textToSpeech.StartResponse) {
},
// 合成完成及播报完成回调
onComplete(requestId: string, response: textToSpeech.CompleteResponse) {
},
// 停止播报回调
onStop(requestId: string, response: textToSpeech.StopResponse) {
},
// 返回音频流
onData(requestId: string, audio: ArrayBuffer, response: textToSpeech.SynthesisResponse) {
},
// 错误回调
onError(requestId: string, errorCode: number, errorMessage: string) {
}
}
//绑定
Text2VioceUtils.Text2VioceEngine.setListener(speaklistener)

把回调函数绑定上,然后就可以播放了
// 调用播报方法
Text2VioceUtils.Text2VioceEngine.speak(originalText, Text2VioceUtils.speakParams);
播放有两个参数一个是你的文本内容,一个是SpeakParams 语音播放的参数,主要是什么语速啊,音量啊,声音类型啊(pcm)这些配置
static extraParam1: Record<string, Object> = {“queueMode”: 0, “speed”: 1, “volume”: 2, “pitch”: 1, “languageContext”: ‘zh-CN’,
“audioType”: “pcm”, “soundChannel”: 3, “playType”: 1 };
static speakParams: textToSpeech.SpeakParams = {
requestId: util.generateRandomUUID(), // requestId在同一实例内仅能用一次,请勿重复设置
extraParams: Text2VioceUtils.extraParam1
};
这些代码就可以了,足够跑起来的了,如果关掉,或者正在播放时候你再转语音他会有繁忙,都会有对应的参数,比如shutdown,isbusy等
那我就开始说坑点了,别看代码少,md有问题!我之前不说是有个报错undefined么,在创建的时候报错一下,我就把获取到引擎调用的地方都加了?,报错没有了,app也不会闪退了,然后我debug看了下,引擎还是没有创建出来依旧是undefined,我就把加?的地方都撤回了,结果就speak函数的地方有undefined报错,我以为这回是创建好了,打断点,依旧没创建,没创建你干嘛不给我闪退报错呢。我怀疑是有缓存,随即清理项目,依旧没改变,然后我就怀疑是模拟器的问题,不是真机的话开发起来难度真的不小,代码写的真不知道对错,随机用官方给的代码跑一边,也是undefined报错,然后我就确定了,肯定不是我代码的错。官方代码跑模拟器也报错,随即释怀了,不用再去纠结了。最后总结一句话:作为程序,你要相信自己写的代码。再一句话,mate50pro调试不了真机,连官方提供的tesing都tm链接不上,sdk是5.0以上的,这对想转行学next代价有点太大了。不仅要买个新手机,还要多掉好多头发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 问题】基础——序列化

接上文 序列化 45.什么是序列化&#xff1f;什么是反序列化&#xff1f;46.说说有几种序列化方式&#xff1f; 45.什么是序列化&#xff1f;什么是反序列化&#xff1f; 什么是序列化&#xff0c;序列化就是把Java对象转为二进制流&#xff0c;方便存储和传输。 所以反序列化…

SOA是什么

SOA SOA 即 Service-Oriented Architecture&#xff08;面向服务的架构&#xff09;。 一、定义 SOA 是一种软件设计方法和架构理念&#xff0c;它将应用程序的不同功能单元&#xff08;称为服务&#xff09;通过定义良好的接口和契约联系起来。这些服务可以独立部署、独立运…

【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);

前言 &#x1f31f;&#x1f31f;本期讲解关于锁的相关知识了解&#xff0c;这里涉及到高频面试题哦~~~ &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&am…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第6关---OpenCompass 评测 InternLM-1.8B 实践

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV1RM4m1279j/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/OpenComp…

嵌入式设备硬件和软件安全设计

1. 引言 哪个领域的网络安全实施记录最差&#xff1f; 既不是 PKI/数字证书&#xff0c;也不是 密钥管理&#xff0c;也不是 OAuth。很可能是嵌入式设备和物联网 领域。 总的来说&#xff0c;这似乎是一个梦想&#xff0c;但如果可设计出“设计安全”的系统&#xff0c;而不…

转行大模型开发,能不能挽救职业生涯?

大模型算是当之无愧最火的一个方向了&#xff0c;算是新时代的风口。有小伙伴觉得&#xff0c;既然是新领域、新方向&#xff0c;那么&#xff0c;人才需求肯定比较大&#xff0c;相应的人才缺乏&#xff0c;竞争也会更少&#xff0c;那转行去做大模型是不是一个更好的选择呢&a…

硬盘数据恢复的方法有哪几种?9种妙招速览

在当今数字化时代&#xff0c;硬盘数据的安全至关重要。然而&#xff0c;数据丢失的情况时有发生&#xff0c;掌握硬盘数据恢复方法显得尤为重要。本文将详细介绍几种有效的硬盘数据恢复方法&#xff0c;帮助用户在遇到数据丢失问题时&#xff0c;能够迅速采取措施&#xff0c;…

Visual studio2019+PCL1.11.1+win10

目录 一.软件下载1.visual studio2019下载2.PCL下载二.安装步骤1.安装PCL1.11.0步骤2.解压pcl-1.11.0-pdb-msvc2019-win64.zip3.安装OpenNI-Windows-x64-2.2.msi4. 设置环境变量5.visual studio2019配置6.双击新添加的属性表—VC++目录—包含目录,添加7个include路径7.测试代码…

幸运7游戏模拟 python

题目&#xff1a; 幸运"7"游戏,用计算机模拟掷骰子的过程&#xff0c;测算两个骰子点数之和为7的概率。 游戏规则是你丢两个骰子&#xff0c;如果其点数之和为7你就赢4元&#xff0c;不是7你就输1元。 假设你刚开始有10元&#xff0c;当全部输掉为0元的时候游戏结…

阿里云云虚拟主机SSL证书安装指南

在安装SSL证书的过程中&#xff0c;您需要确保已经正确获取了SSL证书文件&#xff0c;并且能够访问阿里云云虚拟主机的管理页面。以下是详细的步骤说明&#xff1a; 第一步&#xff1a;准备SSL证书 申请SSL证书&#xff1a;访问华测ctimall网站&#xff08;https://www.ctimal…

Cloud-Edge-Terminal Collaborative AIGC for Autonomous Driving

摘要 在动态自动驾驶环境中&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术可以通过利用模型的生成和预测能力来补充车辆感知和决策&#xff0c;并有可能增强运动规划&#xff0c;轨迹预测和交通模拟。本文提出了一种云-边缘-终端协同架构&#xff0c;以支持AI…

【SQL】Windows MySQL 服务查询启动停止自启动(保姆级)

MySQL是一种开放源代码的轻量级关系型数据库管理系统&#xff0c;使用最常用的结构化查询语言&#xff08;SQL&#xff09;对数据库进行管理。由于MySQL具有体积小、速度快、成本低、开放源码等优点&#xff0c;现已被广泛应用于互联网上的中小型网站中&#xff0c;并且大型网站…

sqlserver-合理化CTFP(cost threshold for parallelism)

文章目录 About CTFPCTFP 默认值的意义合理化CTFP值1.查看高使用次数的执行计划2.调整CTFP值 About CTFP CTFP (Cost Threshold for Parallelism) 是 SQL Server 中的一项配置&#xff0c;用于控制查询执行计划何时使用并行处理。具体来说&#xff0c;它表示执行计划的“子树成…

Python系统教程005(字符串的格式化输出)

知识回顾 1、默认情况下&#xff0c;input函数接收的数据是字符串类型。 2、字符串类型的关键词是str。 3、\n和\t都是转义字符&#xff0c;\n用来换行&#xff0c;\t用来留出一段固定长度的空白。 4、type函数能够用来查看变量的数据类型 5、数据类型的转换&#xff0c;举…

MySQL从0到1基础语法笔记(上)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 MySQL笔记&#xff1a; 一、注释&#xff1a; 二、SQL四大类&#xff…

鸿蒙开发(NEXT/API 12)【应用加密】程序访问控制

能力简介 为了保护应用代码安全&#xff0c;保护开发者的核心资产&#xff0c;HarmonyOS提供了端到端的应用代码保护机制&#xff0c;该机制以系统安全为基础&#xff0c;构建内核级应用生命周期内的代码安全保护能力。 开发者向应用市场提交上架申请&#xff0c;上传应用包后…

<Rust>iced库(0.13.1)学习之番外:如何为窗口添加初始值?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 注:新版本已更新为0.13 概述 这是本专栏的番外篇,主要介绍一下新…

国产测径仪的发展历史

关键字:国产测径仪,进口测径仪,蓝鹏测控,测径仪厂家,测径仪品牌 国产测径仪的发展史是一段从引进技术到自主创新、从依赖进口到逐步国产替代的历程。以下是国产测径仪发展史上的几个关键阶段和里程碑&#xff1a; 起步与引进阶段 在早期&#xff0c;国内测径仪技术相对落后&a…

AI Agent现状:为何企业落地AI应用这么难

本文旨在探讨一个关键问题&#xff1a;为何在企业AI应用场景中&#xff0c;大模型应用在用户眼中显得乏善可陈&#xff0c;以至于未能激发出足够的实施意愿。简要来说&#xff0c;当前大多数文本相关应用所提供的智能增值不足&#xff0c;用户需要至少100次以96%准确率进行的LL…

虚拟化数据恢复—互斥不当导致vmfs卷损坏的数据恢复案例

虚拟化数据恢复环境&#xff1a; 某企业信息管理平台&#xff0c; 几台VMware ESX Server主机共享一台存储设备&#xff0c;大约有几十台虚拟机。 虚拟化故障&原因&#xff1a; Vcenter报告虚拟磁盘丢失。管理员通过ssh远程到ESX中执行fdisk -l命令查看磁盘&#xff0c;发…