Android 本地收款语音实现

Sample

可以通过运行 sample 查看使用的范例代码以及默认的效果

详细代码请移步 https://github.com/cchao1024/voicePlayer

voice2.png

如何使用

# 在应用级依赖文件添加 bintray 的maven仓库地址
allprojects {
   
    repositories {
   
        jcenter()
        google()
        maven {
   url 'https://dl.bintray.com/cchao1024/maven'}
    }
}
// 添加 jar 包依赖
implementation 'com.github.cchao:VoiceSpeaker:1.0.0'

// 使用初始化
mVoiceSpeaker = VoiceSpeaker.getInstance(this);
// 进入下一音频的速度
mVoiceSpeaker.setPlayRatio(0.88f);
// 设置允许完成完整播放的音频长度(太短或太长 均让其完整播放完,才进入下一音频的部分)
mVoiceSpeaker.setMinMaxPlayEnd(100, 1500);

// 放入队列播放音频
mVoiceSpeaker.putQueue(new VoiceSynthesize()
 .prefix("success")
 .numString(money)
 .build());

需求

需实现收到推送消息 (比如:支付宝到账 234.23元) 能播放语音文件。
遵循队列结构,先来的先播报,后来的排队等待。

原本使用的 第三方语音合成SDK 的,但在生产环境中发现播放播报会不播放或者播放一半就停止。

所以后面开始使用 本地的语音音频 (.mp3) 拼接播放,不再采用 sdk 方案。 当前使用android标配的 MediaPlayer

方案确定

为了实现本地收款语音的播放,笔者想过多种方式实现:

  1. 使用 单个MediaPlayer 循环,逐个播放音频文件
  2. 使用 两个(或多个)MediaPlayer,交易播放音频队列
  3. 使用多个MediaPlayer(对应音频文件数),逐个播放音频文件

笔者在实现编码中3种方案均有实现过,但发现方案1,2因为来回切换播放源会有严重延迟。

最终确认方案3 是可行且稳妥的方案,以下是详细思路

基本思路

  1. 初始化VoiceSpeaker时同时构建多个MediaPlayer(对应音频文件数)并设置好音频源
  2. 调用者放入待播放语音文字(如:收款成功 23.5 元),判断如果正在播放,就将语音文字放入待播放队列
  3. 取出队列头部的待播放语音文字,将其转化成大写中文金额写法(如:收款成功 二十三点五元)
  4. 根据中文金额的待播放语音文字映射成对应的音频文件名,封装成List (如:[2,ten,3,dot,5,元]
  5. 遍历待播放音频文件名List
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值