最近写了一个金额的语音播报功能,已封装成依赖库到Github,希望对大家有所帮助。
Github地址 :
https://github.com/javaexception
思路:
(1).准备音频文件。
(2).把要播报的金额转换成大写的金额,比如”零壹贰叁肆伍陆柒捌玖,分角 拾佰仟万拾佰仟亿拾佰仟万”的组合。
(3).通过MediaPlayer播放音频。
###一.准备音频文件
下面是我音频文件,里面是大写的数字,为播报金额组合做准备。
###二.金额转换
###三.MediaPlayer播放音频
1.MediaPlayer简介
MediaPlayer其实是一个封装的很好的音频、视频流媒体操作类,如果查看其源码,会发现其内部是调用的native方法,既然是一个流媒体操作类,那么必然涉及到,播放、暂停、停止等操作,实际上MediaPlayer也为我们提供了相应的方法来直接操作流媒体。
void start():开始或恢复播放。
void stop():停止播放。
void pause():暂停播放。
通过上面三个方法,只要设定好流媒体数据源,即可在应用中播放流媒体资源,为了更好的操作流媒体,MediaPlayer还为我们提供了一些其他的方法,这里列出一些常用的,详细内容参阅官方文档。
int getDuration():获取流媒体的总播放时长,单位是毫秒。
int getCurrentPosition():获取当前流媒体的播放的位置,单位是毫秒。
void seekTo(int msec):设置当前MediaPlayer的播放位置,单位是毫秒。
void setLooping(boolean looping):设置是否循环播放。
boolean isLooping():判断是否循环播放。
boolean isPlaying():判断是否正在播放。
void prepare():同步的方式装载流媒体文件。
void prepareAsync():异步的方式装载流媒体文件。
void release ():回收流媒体资源。
void setAudioStreamType(int streamtype):设置播放流媒体类型。
void setWakeMode(Context context, int mode):设置CPU唤醒的状态。
setNextMediaPlayer(MediaPlayer next):设置当前流媒体播放完毕,下一个播放的MediaPlayer。
在使用start()播放流媒体之前,需要装载流媒体资源。
2.MediaPlayer实现播报源码
###四.使用
Gradle依赖 -
1.最app外层的build.gradle 添加代码:
2.在app 的build.gradle中添加:
使用方法 -
1.普通调用:我想强调的是传入的金额最多精确到”分”,还有在调用的时候应该进行try-catch因为如果传入的不是金额,会出现异常的。 如果是true播报语音为”收款成功+收款金额”,如果是false只播报收款金额。
2.防止用户同时接收多条语音造成语音重叠的调用方法:
播报语速的调控问题,现在因为只能支持Android6.0以上的,所以代码我没添加,等解决后一起更新。
如果有什么不清楚的可以加我公众号或者加微信,希望对大家有所帮助。