华为语音合成服务,为用户提供实时、可替换、多音调的语音播放体验

在不能操作手机或总盯着手机看的情况下,如何及时获取资讯信息、方便阅读呢?用耳朵听不失为一种好方法。华为机器学习服务的语音合成服务,采用深度神经网络技术,提供高度拟人、流畅自然的语音合成服务。开发者可以在小说阅读、智能硬件、地图导航类应用中集成该能力,为用户提供实时、可替换、多音调的语音播放体验。

语音合成,助力及时性内容送达

语音合成服务支持在线将文字信息转换为语音输出,已在全球部署。该服务的优势有——

  • 多语言、多音色:支持中文、英语、法语、西班牙语、德语、意大利语、俄语、波兰语、泰语、马来语语音合成,更有2种标准男声发音、6种标准女声发音可供选择。

  • 语速、音量可调节:支持多种参数配置,可根据场景需求对发音人的语速、音量进行调整。

  • 集成方式灵活丰富:提供离线SDK、在线SDK快速集成,充分满足不同场景下的语音合成需求。

语音合成服务可以应用于阅读播报、新闻播报、虚拟播报、地图播报、信息通知等及时性较强的场景。比如,用户在骑车、驾车使用地图导航时,路上不方便一直看手机。语音合成广播可以保证表达清晰,准确到达目的地;在司机端打车软件、餐饮叫号、排队软件等场景下,通过语音合成进行订单播报,让用户便捷获取通知信息;市场上很火的电子阅读类应用,提供语音播报和收听功能。用户可以很容易地实现“听书”。即使在锁屏状态下,也可以通过语音播报继续收听,消除地铁、公交、跑步等阅读环境的限制。一些不方便阅读的老人和小孩,同样可以通过“听书”,解决看不清、情绪陪伴等问题。

在智能硬件领域,语音合成服务则可以集成到儿童故事机、智能机器人、平板设备等智能设备上,使人机交互更加自然、亲切。对于短视频App的内容创作者来说,在视频应用中指定文字就可以合成一些语音效果,加快了短视频制作流程。

定制音色,满足用户个性化需求

近期,华为语音合成服务即将上线定制音色功能。用户可以录制并合成自己的声音到应用中,让平日里听小说、导航等生活学习场景更加有趣、亲切。家里有小朋友的父母还可以用自己的声音给孩子们讲故事,释放育儿疲劳的同时加深亲子互动陪伴。

开发实战

开发准备
Maven仓和SDK的配置步骤可以参考开发者网站中的应用开发介绍:
https://developer.huawei.com/consumer/cn/doc/development/hiai-Guides/ml-tts-0000001050068169?ha_source=hms1

  1. 配置集成的SDK包
在应用的build.gradle文件中,dependencies内添加TTS的SDK依赖:
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-voice-tts:3.3.0.274'
// 引入离线语音合成bee语音包
implementation 'com.huawei.hms:ml-computer-voice-tts-model-bee:3.3.0.274'
// 引入离线语音合成eagle语音包
implementation 'com.huawei.hms:ml-computer-voice-tts-model-eagle:3.3.0.274'
  1. 配置AndroidManifest.xml
打开main文件夹中的AndroidManifest.xml文件,可以根据场景和使用需要,配置网络和读写权限,在<application>前添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 代码开发(在线TTS)

3.1创建应用自定义的activity界面,用于选择在线或者离线TTS,并通过api_key或者Access Token设置应用鉴权信息

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);MLApplication.getInstance().setAccessToken("your access token");
}
}

3.2 创建TTS配置及TTS 引擎,可以根据需要配置不同参数

MLTtsEngine mlTtsEngine;
MLTtsConfig mlConfigs;mlConfigs = new MLTtsConfig()// Setting the language for synthesis..setLanguage(MLTtsConstants.TTS_ZH_HANS)// Set the timbre..setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH)// Set the speech speed. Range: 0.2–4.0 1.0 indicates 1x speed..setSpeed(1.0f)// Set the volume. Range: 0.2–4.0 1.0 indicates 1x volume..setVolume(1.0f)// set the synthesis mode..setSynthesizeMode(MLTtsConstants.TTS_ONLINE_MODE);mlTtsEngine = new MLTtsEngine(mlConfigs);
//Sets the volume of the built-in player.
mlTtsEngine.setPlayerVolume(20);
设置回调(回调见3.3)
// Pass the TTS callback to the TTS engine.
mlTtsEngine.setTtsCallback(callback);

3.3 配置TTS回调,接收处理语音合成的结果

MLTtsCallback callback = new MLTtsCallback() {String task = "";String fileName = "audio_" + task;@Overridepublic void onError(String taskId, MLTtsError err) {String str = taskId + " " + err;sendMsg(str);}@Overridepublic void onWarn(String taskId, MLTtsWarn warn) {String str = taskId + " 提示:" + warn;sendMsg(str);}@Overridepublic void onRangeStart(String taskId, int start, int end) {String str = taskId + " onRangeStart [" + start + "," + end + "]";// + temp.get(taskId).substring(start);sendMsg(taskId + " onRangeStart[" + start + "," + end + "]");sendMsg1(taskId, start, end);}@Overridepublic void onAudioAvailable(String taskId, MLTtsAudioFragment audioFragment, int offset,Pair<Integer, Integer> range, Bundle bundle) {if (!task.equals(taskId)) {task = taskId;fileName = "/sdcard/audio_" + task + ".pcm";}writeTxtToFile(audioFragment.getAudioData(), fileName, true);}@Overridepublic void onEvent(String taskId, int eventId, Bundle bundle) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append(taskId + " ");switch (eventId) {case MLTtsConstants.EVENT_PLAY_START:stringBuffer.append("onPlayStart ");break;case MLTtsConstants.EVENT_PLAY_STOP:stringBuffer.append("onPlayStop ");stringBuffer.append(bundle.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED));break;case MLTtsConstants.EVENT_PLAY_RESUME:stringBuffer.append("onPlayResume ");break;case MLTtsConstants.EVENT_PLAY_PAUSE:stringBuffer.append("onPlayPause ");break;case MLTtsConstants.EVENT_SYNTHESIS_COMPLETE:stringBuffer.append("onSynthesisComplete ");PCMCovWavUtil.convertWaveFile(fileName);break;case MLTtsConstants.EVENT_SYNTHESIS_START:stringBuffer.append("onSynthesisStart ");break;case MLTtsConstants.EVENT_SYNTHESIS_END:stringBuffer.append("onSynthesisEnd ");break;}Log.d(TAG, "onEvent: " + stringBuffer.toString());}
};

3.4 调用speak合成请求,及播放控制

String id = mlTtsEngine.speak(text, MLTtsEngine.QUEUE_APPEND));mlTtsEngine.pause();
mlTtsEngine.resume();
mlTtsEngine.stop();调用完毕后,释放引擎
if (mlTtsEngine != null) {mlTtsEngine.stop();mlTtsEngine.shutdown();
}
  1. 离线TTS

4.1 离线功能需要新增下载发音人模型包的步骤

private MLLocalModelManager mLocalModelManager;
mLocalModelManager = MLLocalModelManager.getInstance();
MLTtsLocalModel mLocalModel = new MLTtsLocalModel.Factory('发音人'
).create();
mLocalModelManager.isModelExist(mLocalModel).addOnSuccessListener(new OnSuccessListener<Boolean>() {@Overridepublic void onSuccess(Boolean aBoolean) {if (aBoolean) {mlTtsEngine.speak(text, MLTtsEngine.QUEUE_APPEND)} else {downloadModel(true); }}
}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.e(TAG, e.getMessage());}
});

下载模型方法为:

private void downloadModel(final boolean needSpeak) {MLModelDownloadStrategy request = new MLModelDownloadStrategy.Factory().needWifi().create();MLModelDownloadListener modelDownloadListener = new MLModelDownloadListener() {@Overridepublic void onProcess(long alreadyDownLength, long totalLength) {showProcess(alreadyDownLength, "Model download is complete", totalLength);}};mLocalModelManager.downloadModel(mLocalModel, request, modelDownloadListener).addOnSuccessListener(new OnSuccessListener<Void>() {@Overridepublic void onSuccess(Void aVoid) {Log.i(TAG, "downloadModel: " + mLocalModel.getModelName() + " success");showToast("downloadModel Success");updateconfig();if (needSpeak) {speak();}}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {Log.e(TAG, "downloadModel failed: " + e.getMessage());showToast(e.getMessage());}});
}

其他使用和在线TTS一致

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenHarmony开发的语音小助手

基于OpenHarmony开发的语音小助手 本教程将演示如何在BearPi-HM_Nano开发板上使用GPIO输入功能去读取语音模块信息&#xff0c;实现****开关灯自由****&#xff01;&#xff01; 一、实验前器材准备 语音识别模块 语音播放模块 SD卡 无源喇叭 BearPi-HM_Nano开发板 E53—SC1…

带语音通话功能的华为ME909s-821a使用方法

关键词&#xff1a;华为 HUAWEI ME909s 821a V2 语音 Codec 正文&#xff1a;不少用户反馈&#xff0c;希望华为ME909s-821a模块能带上语音通话功能&#xff0c;其实821a模块引出了PCM数字音频接口&#xff0c;我们只需要外挂一个PCM codec即可实现语音通话功能。但是考虑…

调用华为API实现中文语音识别

目录 1. 作者介绍2. 华为云中文语音识别2.1 录音文件识别与获取2.2 限制要求2.3 对象存储服务&#xff08;OBS&#xff09;简介 3. 实验过程以及结果3.1获得API3.2 代码实现3.3 运行结果 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 张楠&#xff0c;女…

chatgpt赋能python:Python处理Word文件的优秀方案

Python处理Word文件的优秀方案 如今&#xff0c;Word文档在生活中变得越来越普遍&#xff0c;不仅在学校或办公室中使用&#xff0c;而且也在日常生活中&#xff0c;像编辑简历、写作业、撰写文档和工作报告等方面也十分常见。因此&#xff0c;学习如何使用Python处理Word文件…

期待文心一言体验号

期待百度文心一言的体验号&#xff0c;用好chatGPT首先要问自己想要什么&#xff0c;该怎么问才能高效拿到想要的目标结果。遇弱则弱&#xff0c;遇强则强&#xff0c;遇到正能量就能传递正能量&#xff01; 谁有文心一言体验地址麻烦提供一下&#xff0c;交流一下: 下方是回复…

ChatGPT时代:数据标注会成为一种人机交互“语言”么?

标注猿的第70篇原创 一个用数据视角看AI世界的标注猿 大家好&#xff0c;我是AI数据标注猿刘吉&#xff0c;一个用数据视角看AI世界的标注猿。 从去年的10月份到现在有半年的时间没有更新了&#xff0c;去年没有更新是疫情的原因&#xff0c;今年没有更新主要有两个原因一…

Plus 版 Chatgpt,和任何的 PDF 聊天! #Chatpdf

Chatgpt 的出现&#xff0c;颠覆了整个内容生产行业的同时&#xff0c;也极大地提高了很多文字工作者的效率。 于是一时之间&#xff0c;各大公司都在争先推出自己的聊天机器人&#xff0c;希望在这个新兴而庞大的市场分一杯羹。‍‍‍‍‍‍‍‍ 于是 Chatpdf 出现了&#xff…

大厂程序员手把手教你如何写简历(附简历模板)

代码随想录刷题网站上线咯&#xff1a;programmercarl.com&#xff0c;200道力扣题目刷题顺序&#xff0c;详细题解&#xff0c;支持C、Java、Python、Go、JS等多语言版本&#xff0c;一个你只要发现&#xff0c;就会收藏的硬核算法学习网站。 文章目录 简历基调谨慎使用精通两…

ChatGPT做的简历戳中HR心巴,小伙刚毕业就拿下梦想offer!

西风 发自 凹非寺量子位 | 公众号 QbitAI 鹅妹子嘤&#xff0c;最近一位毕业生用ChatGPT生成的求职信&#xff0c;分分钟躲过简历筛选算法。 然后&#xff0c;自己梦寐以求的工作就真的到手了&#xff01; 这位用ChatGPT帮忙找工作的小伙表示&#xff1a; 三月份以来写所有东西…

软件测试个人求职简历该怎么写,模板在这里

目录 1、个人资料 2、专业技能 3、工作经验 4、项目经验 5、教育背景 1、个人资料 姓 名&#xff1a;xxx 性 别&#xff1a;x 手机号码&#xff1a;138888888xx 邮 箱&#xff1a; xxx 学 历&#xff1a;本科 专 业&#xff1a;电子商务 英 语&#xff1a;四级 当前工作…

程序员简历应该怎么写?

说到程序员简历&#xff0c;这两个月&#xff0c;我看过不下10,000份简历。。。 答主不是HR&#xff0c;也不是技术负责人&#xff0c;但是在网站的运营工作中&#xff0c;每天最开心的事情就是研究候选人的简历了~~ 这些人中&#xff0c;有BAT的资深大牛程序员&#xff0c;也有…

建议这样使用ChatGPT,让你成为更好的开发者

这样使用ChatGPT&#xff0c;让你成为更好的开发者 作为开发人员&#xff0c;您的责任之一是不断学习和提高您的技能。ChatGPT 是一个强大的工具&#xff0c;可以通过多种方式帮助您成为更好的开发人员。如果你不知道什么是 ChatGPT&#xff0c;它是 OpenAI 开发的一种大型语言…

大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍

紧急提醒&#xff1a;还有1天&#xff01; 2020.NET开发者大会就要开幕啦&#xff01; 你都做好参会准备没有&#xff1f; 特殊时期&#xff0c;为方便小伙伴们顺利参会&#xff0c;小编特意整理了这篇大会参会攻略&#xff0c;大到各种日程安排、小到签到、出行、防疫等&#…

10、记录使用科大讯飞的语音唤醒硬件生成PCM文件,通过ffmpeg库去生成MP3音频文件

基本思想&#xff1a;不太会ffmpeg解析pcm的音频文件&#xff0c;所以记录一下结合具体的场景和具体的应用 具体生成的pcm使用的官方代码&#xff0c;不详细叙述&#xff0c;官方的唤醒模块将会产生一个pcm文件&#xff0c;可使用下列命令或者代码将pcm转成mp3文件&#xff0c…

深兰科技亮相2023数博会:硅基知识大模型推动个人数字化产业

近日&#xff0c;2023中国国际大数据产业博览会 “数字经济与实体经济深度融合”论坛在贵阳举行。腾讯云、京东集团、网易、深兰科技等8家企业负责人进行了行业演讲。 作为2023数博会的专业论坛之一&#xff0c;本次论坛以“数融百业 创变赋新”为主题&#xff0c;从数实融合视…

吴怀宇 | 对比欧盟,中国的《人工智能法案》应有什么底座?

来源&#xff1a;OpenDAI 作者&#xff1a;吴怀宇 中国科学院博士、北京大学博士后 2023年6月14日&#xff0c;欧洲议会全体会议表决通过了《人工智能法案》授权草案&#xff0c;标志着该法案将进入欧盟立法严格监管人工智能技术应用的最终谈判阶段。欧洲议会此前曾发出声明&a…

希尔伯特旅馆里,住着AI的某种真相

“无穷”和“无穷1”&#xff0c;哪个更大&#xff1f; 已经吸收了不知道多少数据的AI模型&#xff0c;和比他多学习一条数据的模型&#xff0c;哪个更智能&#xff1f; 想聊聊这个问题&#xff0c;出于一个偶然的机会。很早之前我在测试ChatGPT的时候&#xff0c;突然想问他个…

AI大时代——一次全新的生产力革命

✏笔者按&#xff1a; 我这个人是比较笨的&#xff0c;我是在3月9日左右才恍然意识到一个崭新的AI大时代已经到来了。 全文7339字&#xff0c;阅读需要约10分钟 >>前言 我是在大三时候阅读《游戏编程中的人工智能技术》这本书的时候接触到的人工智能和神经网络的相关…

“AI教父”Geoffrey Hinton:智能进化的下一个阶段

来源 | The Robot Brains Podcast OneFlow编译 翻译 | 杨婷、贾川 ChatGPT等大模型带来的震撼技术革新&#xff0c;让Geoffrey Hinton突然改变了自己的一个想法。 这位75岁的“人工智能教父”意识到&#xff0c;数字智能优于生物智能的进程无法避免&#xff0c;超级智能很快就会…

为什么说 AI 将拯救整个世界?

【CSDN 编者按】AI 会让我们失业吗&#xff1f;AI 会“杀”死人类吗&#xff1f;当一门重要的新技术横空出世的时候&#xff0c;人们总是会担心它给人们带来的种种威胁&#xff0c;基于此&#xff0c;本文作者认为&#xff0c;虽然 AI 风险很高&#xff0c;但也存在非常有影响力…