功能描述

类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到“支付宝到账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]

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

作者:姜康

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

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

android 自动语音提醒,Android 语音播报实现方案相关推荐

  1. android 自动 键盘,关于Android中的软键盘

    InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系 ...

  2. android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...

  3. android自动创建快捷方式,Android开发之生成桌面快捷方式细则(原创)

    本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 申明,标题里的快捷方式不是指开发人员使用频率极高的Ctrl+C和Ctrl+V:也不是IDE里Ctrl+D.Ctrl+F等常用快捷键.这 ...

  4. android自动夜间模式,Android实现日夜间模式的深入理解

    在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...

  5. android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解

    先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...

  6. Android 自动搜索频道,Android自定义收音机搜台控件RadioRulerView

    前言:像这类的自定义控件有非常多的开源项目,但还是没有找到我项目想要的,所以简单实现了一个,下面简单讲讲实现原理. 效果图: 实现思路: 首先画固定背景尺子,而实现这个则要计算刻度线的宽度.刻度线间的 ...

  7. android 自动挂断,android实现接通和挂断电话

    本文实例为大家分享了android实现接通和挂断电话的具体代码,供大家参考,具体内容如下 关键代码:[PhoneUtils类] package com.ebupt.phonerecorddemo.se ...

  8. android自动添加包,android nfc写入应用程序包名与网址 自动打开应用程序与网址...

    安卓手机大部分手机提供了NFC芯片   可以根据NFC传递数据   NFC卡与手机  手机与手机数据等交互  非常好的功能,这篇文章教大家如何向NFC卡或标签写入功能. 用法 :  点击包名   将N ...

  9. android 自动挂断,android 来电自动接听和自动挂断(2.3以上)

    转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...

  10. android 自动播放 幻灯片,Android自动播放Banner图片轮播效果

    本文实例为大家分享了Android自动播放Banner图片轮播的具体代码,供大家参考,具体内容如下 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id=&qu ...

最新文章

  1. 淘淘经受了一次考验...
  2. html中全选按钮代码怎么写,html中的javascript 全选/取消全选操作示例代码
  3. python去实现链表_python实现链表
  4. Remoting 技术
  5. mysql merge 分区_mysql merge 分区
  6. Python全栈工程师(异常(基础))
  7. CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)
  8. java密码框提示_[Java教程]如何实现在密码框如出现提示语
  9. Minio Docker 单机安装(二种模式) linux
  10. mysql workbench创建数据库的时候PK,NN等的含义
  11. 杉岩数据:5种常见容灾复制技术图解
  12. deepdiff函数返回_Linux diff命令详解
  13. python把英语句子成分字母_英语基础(一)句子成分和结构
  14. 大自然Windows XP日文版镜像
  15. 灯泡窃听,照射出物联网的“深层黑洞”
  16. js监听苹果手机自带按钮返回事件
  17. TFT屏的驱动ST7735S使用实例
  18. csv文件 内容转义_保存csv文件时的生僻字处理和格式控制
  19. GraphicsView学习-基本图元使用(2)
  20. i3 1215U 和 i5 1235U选哪个好

热门文章

  1. 学java进美团_美团实习Java岗面经,已拿offer
  2. Unknown custom element: <xxx> - did you register the component correctly? For recursive components
  3. 十大热门经典历史小说,大有希望获得第四届橙瓜网络文学奖
  4. 河南民办计算机大学排名,2021河南民办大学排名 河南最好的民办本科高校有哪些...
  5. PostgreSQL数据库统计信息——analyze大致流程
  6. 风笑天社会研究方法第5版笔记和课后答案
  7. python灰色关联度分析代码_GRA灰色关联度分析学习 附python代码
  8. python while无限循环语句_Python While 循环语句
  9. iOS安装ipa文件
  10. pandas_计算前复权收盘价和后复权收盘价