最近项目有个需求,一个app需要能够播报金额,另一个需要播报叫号,因为金额和排队号是可变的,所以需要播放的音频是不固定的。方案有如下几种:

1、集成百度TTS,通过离在线的sdk接口进行播报;

2、录制表示数字,金额,小数点,英文字母的单个字符,然后先将所需的音频合成为一个音频,再播报,或者直接顺序播报一组音频;

具体实现:

由于本人在别的项目中使用过百度TTS语音播报,这种离在线系统的机制在网络不稳定时,可能出现不播报的情况,而本项目app很可能在一些网络环境较差的情况下使用,所以选择第二种实现方案。

需要使用的库

//exoplayer
implementation 'com.google.android.exoplayer:exoplayer:2.8.1'
implementation 'com.google.android.exoplayer:exoplayer-core:2.8.1'

具体播报方法如下:

先根据金额或者排队序号得到一组音频文件,然后使用下面方法即可正常播报。

音频文件放在app/assets目录下

public void playAudios(Context context, List<String> fileNames){if (fileNames == null){return;}if (player == null){player = ExoPlayerFactory.newSimpleInstance(context, new DefaultTrackSelector());//第一个参数是播放速度,第二个参数是播放音调的高低player.setPlaybackParameters(new PlaybackParameters(0.8f, 1.0f));}//  userAgent -> audio/mpeg  不能为空DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(context, "audio/mpeg");//创建一个媒体连接源ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource();for (int i=0;i<fileNames.size();i++){String fileName = fileNames.get(i);Log.e(TAG, "playAudios fileName: " + fileName);//创建一个播放数据源MediaSource mediaSource = new ExtractorMediaSource.Factory(defaultDataSourceFactory).createMediaSource(Uri.parse("file:///android_asset/" + fileName));concatenatingMediaSource.addMediaSource(mediaSource);}player.setPlayWhenReady(true);player.prepare(concatenatingMediaSource);}

如果在Activity直接调用该方法,可能出现未播报完,页面中止的情况,导致音频播报不完全,所以可以定义一个Service,然后在Service中开启一个线程播报,这样即使当前页面中止了,音频也可以正常完成播报。

/*** 进行语音播报操作(支付的语音播报)* @param numFileNames*/private void playAudio(ArrayList<String> numFileNames){Log.e(TAG, "playAudio execute");new Thread(){@Overridepublic void run() {List<String> fileNames2 = new ArrayList<>();fileNames2.add("xxx.mp3");player.playAudios(mContext, fileNames2);try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}if (numFileNames != null){List<String> fileNames = new ArrayList<>();fileNames.addAll(numFileNames);player.playAudios(mContext, fileNames);numFileNames.clear();}}}.start();}

具体使用时需要注意以下几点:

1、Service需要在AndroidManifest.xml当中进行配置

<service android:name=".service.XXXService" android:enabled="true" android:exported="true"/>

2、每次调用playAudios方法时,传入的一组音频文件格式需要相同,因为默认是根据一组音频的第一个音频格式去解析后面的所有音频文件格式,如果这种音频格式不同,可能导致跟第一个音频不同格式的音频文件不能被正常解析,也不能正常播报。

具体代码,可以去我的资源里面下载相关类。

Android如何播放一组音频文件(类似支付宝收款播报或者叫号播报)相关推荐

  1. android Mp3播放器之音频文件扫描

    文件扫描类.代码很简单将扫描到的文件保存在Vector<file>列表里 [java] view plain copy package com.aws.util; import java. ...

  2. Android 使用URLConnection下载音频文件

    本文链接: Android 使用URLConnection下载音频文件 使用MediaPlayer播放在线音频,请参考Android MediaPlayer 播放音频 有时候我们会需要下载音频文件.这 ...

  3. android 网络mp3格式,Android 使用URLConnection下载音频文件的方法

    有时候我们会需要下载音频文件.这里提供一种思路,将在线音频文件通过流写到本地文件中. 使用URLConnection来建立连接,获取到的数据写到文件中. URLConnection建立连接后,可以获取 ...

  4. 实现在线播放Wav音频文件,支持IE和Google

    最近在弄一个在线播放Wav音频文件的功能,发现audio只支持在google浏览器下才能访问,ie是不支持的,但是ie支持embed标签的播放. getWebIE:function(){var use ...

  5. Java 采集声音_通过java采集PC麦克风音频及播放wav音频文件

    AudioFormat对象 sampleRate 采样率 每秒音频采样数量 sampleSizeInBits 采样位数 每个采样的位数 channels 声道 1: Mono 单声道,2:Stereo ...

  6. Python播放MP3音频文件

    Python播放MP3音频文件(转载) 按推荐顺序排列 ①使用playsound库 from playsound import playsoundplaysound('xx.mp3') ②使用pyga ...

  7. Linux下使用C++播放wav音频文件

    Linux下使用C++播放wav音频文件 安装openal第三方库 上代码 安装openal第三方库 unbuntu下安装命令:sudo apt-get install libopenal-dev 安 ...

  8. windows下使用Qt播放PCM音频文件(通过QAudioOutput和QIODevice)

    在博主之前的博文<windows下使用FFmpeg生成PCM音频文件并播放(通过命令的方式)>(链接https://blog.csdn.net/u014552102/article/det ...

  9. AVAudioPlayer播放在线音频文件

    AVAudioPlayer播放在线音频文件 一:原里: AVAudioPlayer是不支持播放在线音频的,但是AVAudioPlayer有一个 initWithData的方法:我们可以把在线音频转换为 ...

  10. 语音播报(播报本地音频文件)实现收款金额的播报

    最近项目需要实现语音播报收款金额,本来要使用百度AL开发平台的语音合成进行语音播报,虽然这个是可以完美实现,但是这个在免费的情况下有这播放条数的限制,所以最终决定使用播放本地语音的方式进行实现.不多说 ...

最新文章

  1. python3 selenium 无头浏览器 无界面 chromedriver
  2. Servlet的体系结构 || Servlet相关配置
  3. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!
  4. 图像条纹检测 python_【连载2.1】结构光三维检测引言面向强反射表面的多传感器三维检测技术研究...
  5. C语言scanf()函数格式化输入和printf()格式化输出。
  6. 人工智能 信道估计 深度学习_深度学习人体姿态估计算法综述
  7. 一体机服务器性能,一体机的服务器
  8. 在桌面养只捣蛋鹅,让 Desktop Goose 陪你一起用Mac
  9. eXeScope 使用中的小技巧
  10. 吉他录音混音教程入门|连这些录音知识都不懂,以后还怎么“混”?| MZD Studios
  11. android系统中wifi省电模式下的四个基本概念:TIM、DTIM、Beacon-Interval、Listen-Interval
  12. 怎么让python执行完后再执行_python中两个函数顺序执行,怎么让第一个执行完了再执行第二个?...
  13. 纯H5+CSS3实现下雨特效
  14. OKR是上下同欲的载体
  15. 通过js实现图片与文字的转换
  16. 使用Ajax进行前后端交互(一)
  17. 智多星骗子行为让人发指
  18. 解开硬盘逻辑死锁的一种有效方法 (转)
  19. Hexo Next主题添加百度统计
  20. 如何绕过CDN获取网站的真实IP?手把手教你

热门文章

  1. 微软高性能缓存AppFabric(二)使用
  2. Mysql插件HandlerSocket的应用
  3. openv学习—Template Matching
  4. 选修了两门课的学生学号MySQL语句_SQL 语句:在sc表中查询至少选修了两门课的学生学号的语句...
  5. mysql查询同时选修了两门_查找同时选修了C01及C02两门课程的学生姓名及学号
  6. jmeter 前置处理器
  7. python3.6中文版下载-Python3.6.6官方版
  8. Win7重装后修复Ubuntu引导项
  9. 浅谈对软件工程的认识与理解
  10. WEB2.0概念诠释