详解Android语⾳播报实现⽅案(⽆SDK)
本⽂介绍了详解Android 语⾳播报实现⽅案(⽆SDK),分享给⼤家,具体如下:
功能描述
类似⽀付宝收款时候的语⾳播报功能:当别⼈扫描你的收款码,你收到钱之后,就会听到“⽀付宝到账12.55元”的语⾳播报。要解决的问题
1.播放单个语⾳⽂件
2.播放完单个语⾳⽂件之后⽴即播放下⼀条,这样才能连续
3.当多个完整的语⾳序列都需要播报时的处理(⽐如⽀付宝短时间内收到多条收款推送)
实现思路flutter sdk
1、播放单个⽂件选择MediaPlayer
⾸先创建⼀个MediaPlayer实例
MediaPlayer player = new MediaPlayer();
然后设置数据源,这⾥数据源从assets中获取,当然也可以将语⾳⽂件放在raw⽂件夹⾥
fd = AssetFileDescription(path);
player.FileDescriptor(), fd.getStartOffset(),
然后调⽤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) {
counter[0]++;
if (counter[0] < list.size()) {
try {
AssetFileDescriptor fileDescriptor = AssetFileDescription(String.format("sound/tts_%s.mp3", (counter[0])));
mp.FileDescriptor(), StartOffset(), Length());
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
} else {
}
}
});
3、短时间多次播报请求,开采⽤同步⽅式进⾏,⼀条播完播放下⼀条,这⾥采⽤synchronized + notifyAll() 实现,当然也可以⽤别的⽅法。
代码封装
功能代码分为两部分,⼀部分是语⾳序列组成的List,这⾥是VoiceTemplate;
⼀部分是播放的功能封装,接收List,然后播放语⾳,这⾥叫做VoiceSpeaker;
详细代码见⽂末。
代码使⽤
⽐如要播放“⽀付宝到账⼗⼆点⼀三元”,代码如下
final List<String> list = new VoiceTemplate()
.prefix("success")
.numString("12.13")
.suffix("yuan")
.gen();
源码
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论