Linux文字转语音播报总结
一、平台:
Linux +Qt或win10
二、实现功能
实现播报重量数据,举例:“过磅重量为12345.7千克”或是“过磅重量为1万2千3百4十5点7千克”
三、整体方案
播报内容分为:为了播报效果好,将以上非数值部分(固定)采用整体的语音,而其它可变的部分则以独立语音组合播报。步骤如下:
1、将数值转化为字符串,如12345.7转为”1万2千3百4十5点7”
2、将字符串转为一个个对应的语音文件
3、按顺序播放
四、音频文件制作:
第一步:文字转语音
尝试了多款类似工具,最终选了迅捷,且还注册个收费的会员,使用起来有后期保障。
技巧:对于单个组合成语音段的,播报时效果差,
根据测试由于播放器存在播放时在200ms~600ms的语音解析时间,导致其解决办法一定要剪切掉不必要的音频此时我用的是以下这个软件
其好处在于可以看到声音波形,方便裁剪
播放时,尽量采用打开播放器后连续播放多个音频文字,减少打开与关闭播放器的时间。
五、关键代码
1、linux下的代码如下:
//=====================================================================
QString playContentsList;while(breakMark){if(m_playContent == ""){break;}if(m_playContent.indexOf("千克")==0){m_playContent.remove(0,2);voicePath ="qianke";}else{str = m_playContent.mid(0,1);m_playContent.remove(0,1);int delayms;voicePath = charToVoiceFile(str);}if(voicePath == ""){}else{QString audioFile = QApplication::applicationDirPath()+"/audio/"+voicePath+".mp3";QFile f(audioFile);if(!f.exists()){}else{if(audioFile != ""){playContentsList.append(" ");}playContentsList.append(audioFile);}}}if(playContentsList != ""){cmd = QString("mplayer -quiet -slave ")+playContentsList;process.start(cmd);process.waitForFinished();}
//=====================================================================
2、Win10下的代码如下:
QMediaPlayer *player = new QMediaPlayer;player->setVolume(50);
。。。。。。while(breakMark){if(m_playContent == ""){break;}if(m_playContent.indexOf("千克")==0){m_playContent.remove(0,2);voicePath ="qianke";}else{str = m_playContent.mid(0,1);m_playContent.remove(0,1);voicePath = charToVoiceFile(str);}if(voicePath == ""){msleep(600);}else{QString audioFile = QApplication::applicationDirPath()+"/audio/"+voicePath+".mp3";QFile f(audioFile);if(!f.exists()){msleep(500);}else{player->setMedia(QUrl::fromLocalFile(audioFile));// player->setVolume(50);player->play();msleep(600);//后序改进点:这个时间要与音频播放时间有关。}}}
delete player;
六、效果
从原来的0.7~1.1秒1个字,控制到0.6秒1个字的播报,顺畅多了。
七、开发过程中笔记
为了解决组合的语音的播报卡顿问题,因为其原因是打开播放器与关闭播放器需要时间,且占用时间很不稳定,解码需要时间,所以当时测试的方案是:
1、为每个播报的字符创建一个线程
2、每个线程都解释好声音(处于暂停状态状态)
3、按时间顺序给各个线程发送标识,使其播放
结果:在第2点上失败,没能实现“控制在暂停状态”。由于项目进度紧张,且已实现较好的效果,此方案以后有空时再研究。
Linux文字转语音播报总结相关推荐
- 苹果原生文字转语音播报
1.CHiOSSpeech.h // // 文 件 名:CHiOSSpeech.h // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...
- java 文字转换成语音 代码_java文字转语音播报功能的实现方法
前言 本文主要给大家分享了关于java文字转语音播报的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 一.pom.xml引入jar包依赖 com.hynnet ja ...
- ios 原生语音识别,百度翻译API使用,原生文字转语音播报
若有不正之处,希望大家不吝赐教,谢谢! 原生语音识别所需: 首先需要再plist文件中加入: Privacy - Speech Recognition Usage Description 需要使用si ...
- Android如何解决文字转语音播报的问题
如何解决文字转语音的问题 1.网上的普遍解决方式 2.我自己需求和解决方式 3.总结 1.网上的普遍解决方式 TTS+语音引擎实现离线的语音播报的功能 下载百度,讯飞等厂家的离线SDK(收费) 由于这 ...
- SpeechSynthesisUtterance文字转语音播报
一.介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 二.基本属性 var sp ...
- Linux 文字转语音
一.科大讯飞语音识别 科大讯飞官网:https://www.xfyun.cn/ 1.进入产品服务-->离线命令词识别 2.点击SDK下载 3.选择参数,下载 二.文字转语音包使用 1.解压到ub ...
- java文字转语音播报并输出文件
一.pom.xml引入jar包依赖 <!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 --> <depend ...
- python之pyttsx3实现文字转语音播报
1. pyttsx3是什么 pyttsx3是Python中的文本到语音转换库,可以实现文本的朗读功能. 2. pyttsx3的安装 pip install pyttsx3 3. pyttsx3的dem ...
- qt linux 文字转语音,QT文本转语音模块(TTS)QTextToSpeech
QTextToSpeech是QT5.8以上的文本转语音模块. 使用方法: 在.pro工程文件中添加"QT += texttospeech". 添加头文件 #include 源文件: ...
最新文章
- kafka原理_Kafka动态配置实现原理解析
- 一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器
- linux为用户添加sudo权限
- Zookeeper运维问题集锦
- jQuery之过滤选择器
- java自用代码(包括:新建单线程、创建文件夹及文件、map转为json并将json写入txt、文件剪切或改名)...
- EasyCode.Net代码生成器使用心得
- wits数据格式_WITS标准
- Java 相同类型强制转换异常
- C#模拟js的Json对象创建,操作
- 如何设置 Web 服务器的权限之iis
- 左对齐 latex_LaTex中使用XYpic绘制交换图表
- Hash表素数大集合
- 用Bluemix虚拟机搭建自己的博客系统
- BEVFusion: A Simple and Robust LiDAR-CameraFusion Framework 细读
- scholarscope不显示影响因子_如何根据IF快速筛选文章,ScholarScope来帮你
- 1dB增益压缩点概述及测试
- 飞机大战之-添加背景
- iPhone最强悍对抗者——HTC崛起的秘密
- QQ浏览器F12弹出新窗口问题