详解Android 语音播报实现方案(无SDK)

详解Android 语音播报实现方案(无SDK),第1张

概述本文介绍了详解Android语音播报实现方案(无SDK),分享给大家,具体如下:功能描述

本文介绍了详解AndroID 语音播报实现方案(无SDK),分享给大家,具体如下:

功能描述

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

要解决的问题

1.播放单个语音文件

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

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

实现思路

1、播放单个文件选择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();            }          });

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

 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();              }            }          });

3、短时间多次播报请求,开采用同步方式进行,一条播完播放下一条,这里采用synchronized + notifyAll() 实现,当然也可以用别的方法。

代码封装

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

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

详细代码见文末。

代码使用

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

final List<String> List = new VoiceTemplate()        .prefix("success")        .numString("12.13")        .suffix("yuan")        .gen();VoiceSpeaker.getInstance().speak(List);

源码

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 语音播报实现方案(无SDK)全部内容,希望文章能够帮你解决详解Android 语音播报实现方案(无SDK)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存