作者:姜康

链接:https://www.jianshu.com/p/df2022b3937d

声明:本文是 姜康 原创。转载请联系作者获得授权。

功能描述

类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到“支付宝到账12.55元”的语音播报。

要解决的问题

1.播放单个语音文件

2.播放完单个语音文件之后立即播放下一条,这样才能连续

3.当多个完整的语音序列都需要播报时的处理(比如支付宝短时间内收到多条收款推送)

实现思路

播放单个文件选择MediaPlayer

首先创建一个MediaPlayer实例

MediaPlayer player = new MediaPlayer();

然后设置数据源,这里数据源从assets中获取,当然也可以将语音文件放在raw文件夹里

fd = FileUtils.getAssetFileDescription(path);

player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(),fd.getLength());

然后调用 prepareAsync() 方法,异步加载,并设置监听,加载完毕之后开始播放(与 prepare 方法区别开来)

player.prepareAsync();

player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp){

mp.start();

}

});

由于播放的语音文件不止一个,因此需要监听播放完成的状态,在播放完成之后播放下一条语音

player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override

public void onCompletion(MediaPlayer mp) {

mp.reset();

counter[0]++;

if (counter[0] < list.size()) {

try {

AssetFileDescriptor fileDescriptor = FileUtils.getAssetFileDescription(String.format("sound/tts_%s.mp3", list.get(counter[0])));

mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());

mp.prepare();

} catch (IOException e) {

e.printStackTrace();

latch.countDown();

}

} else {

mp.release();

latch.countDown();

}

}

});

短时间多次播报请求,开采用同步方式进行,一条播完播放下一条,这里采用

synchronized + notifyAll() 实现,当然也可以用别的方法。

代码封装

功能代码分为两部分,一部分是语音序列组成的 List,这里是 VoiceTemplate;

一部分是播放的功能封装,接收 List,然后播放语音,这里叫做 VoiceSpeaker;

详细代码见文末。

代码使用

比如要播放“支付宝到账十二点一三元”,代码如下

final List list = new VoiceTemplate()

.prefix("success")

.numString("12.13")

.suffix("yuan")

.gen();

VoiceSpeaker.getInstance().speak(list);

源码

KTools:

https://link.jianshu.com/?t=https://github.com/jiangkang/KTools

https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceSpeaker.java

https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceTemplate.java

android 语音播报方案,Android 语音播报实现方案(无SDK)相关推荐

  1. java语音播报源代码_详解Android 语音播报实现方案(无SDK)

    本文介绍了详解Android 语音播报实现方案(无SDK),分享给大家,具体如下: 功能描述 类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到"支付宝到账12. ...

  2. Android端离线推送语音播报原理实现

    碰到的问题差不多两个: 首先是离线推送的问题,如果离线推送需要语音播报的话,需要APP运行一个前台服务,这个服务运行才行,否则自己的代码都没有,怎么实现语音播报呢? 第二就是怎么用服务去获取到离线推送 ...

  3. android电话语音播放,使用Android自带的TTS实现语音播报(电话号码)功能

    事先声明:该文章参考以下几篇文章,如果大家想看,可直接点击进入: https://github.com/SolveBugs/Utils/blob/master/SpeechUtils.java htt ...

  4. Android TextToSpeech实现文字转语音,进行播报

    1. 下载讯飞语音引擎 2.初始化 TextToSpeech. 使用下面的构造函数进行初始化 TextToSpeech(android.content.Context context, android ...

  5. 来电语音播报软件下载apk_来电播报app下载 来电姓名播报 for Android v1.2.6 安卓版 下载-脚本之家...

    来电播报APP是一款提供来电信息提醒的软件,汇聚多种提醒模式供用户选择使用,如照片提示.音乐提示.来电号码提示等等,让用户可以在电话接通的一瞬间就能知道和自己打电话是谁,避免出现不知道对方是谁的尴尬场 ...

  6. android 语音播报中文,android 语音播报(通过手说tts 实现中文语音播报)

    手说TTS介绍: 手说TTS,是Android平台下的中文语音引擎,提供了中文文本到语音的转换. 使用手说TTS进行中文文本的朗读,包括中文简繁体.阿拉伯数字.英文字母及一些符号的混读.并且处理了中文 ...

  7. android离线语音开发,Android应用开发之Android 云之声离线语音合成

    本文将带你了解Android应用开发之Android 云之声离线语音合成,希望本文对大家学Android有所帮助. 离线语音解析 public class SpeechUtilOffline impl ...

  8. python语音播报库-python 语音库

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 我需要自动分离两位发言者的声音. 我刚开始学习语音识别,我看了python的wav ...

  9. python 语音播报库_python 语音库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我需要自动分离两位发言者的声音. 我刚开始学习语音识别,我看了python的wa ...

  10. Android 讯飞语音开发(Android Studio)

    前段时间火了一个很牛的讯飞语音,去看官方文档,瞬间蒙逼,官方是用的eclipse,我用的Android Studio.好了,能上代码尽量不BB. 先来看看gradle里面要配置的东西. module里 ...

最新文章

  1. 深度学习助力网络科学:基于深度学习的社区发现最新综述
  2. Python Day34
  3. svn的备份还原(一)
  4. 【好文翻译】二十年来我得到的20条编程经验
  5. 获取指定文件目录路径下的所有文件
  6. Delphi 2009 安装序列号
  7. 视频教程-Windows程序设计应用开发-C/C++
  8. C语言——是否为闰年的判断
  9. react-router-dom文档
  10. 自我思考:世界观与方法论——关于做事方法,情商,智商,爱商的深入思索
  11. maven报错cannot reconnect
  12. 4G工业路由器大气环境监测方案
  13. linux c open flush,ctrl+c以及写操作失败和flush
  14. java图形界面编程视频,mysql数据库引擎面试
  15. TreeMap、二叉树
  16. Access FileDialog 用户定义类型未定义(User-defined type not defined)的解决方法
  17. directory index of “/data/“ is forbidden
  18. 要跑步,选对鞋!给新手的跑步鞋指南
  19. orleans remote call error
  20. C++Qt中qmake的详解

热门文章

  1. Mac外接 Windows 键盘映射修改
  2. arcgis中属性表某字段显示出现遗漏问题的解决办法(地图不显示澳门特别行政区)
  3. 软件设计师---信息安全
  4. 我国职业教育的第一届本科生,毕业了!
  5. 基于windows的mongodb安装及mongovue可视化连接使用
  6. 【FPGA入门九】状态机实验
  7. 真心求一个有pi控制的基于28335的dsp程序
  8. div 圆角div渐变色 渐变色循环换色
  9. 射频功放学习之ADS-MATLAB联合仿真(一)
  10. Intel 网卡修改mac地址方法