android 小音频频繁播放
android中多媒体文件(音乐和视频)的播放是用MediaPlayer方式是大家比较熟悉的,但是现在要来说一下另外一种音乐文件播放的方式SoundPool,相比较而言,用MediaPlayer来播放音乐的话,占用的系统资源是很多的,加载资源也需要时间,所以它不适合用来频繁播放小音频文件,比如控件焦点、点击时需要播放小音频文件,这个时候用SoundPool来播放音频文件,比用MediaPlayer来播放效率要高很多。这里也来说说,如果用MediaPlayer来播放小音频文件的话,会出现延时,点击了之后等会儿才出现声音。所以,SoundPool比MediaPlayer更轻量级,适合用于频繁播放的小音频文件。
下面就来说说它的用法:
第一步:放置目标音频文件
将音频文件放在res/raw目录下,这样就可以通过R来引用它了。如果想放在Assert目录下也是可以的,这里先放在raw下。
第二步:编写音频播放的类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class MusicPlayer { private Context mContext ; private static MusicPlayer sInstance ; static class Type{ public final static int MUSIC_CLICK = 1 ; public final static int MUSIC_FOCUSED = 2 ; } private SoundPool mSp ; private Map<integer ,integer=""> sSpMap ; private MusicPlayer(Context context){ mContext = context ; sSpMap = new TreeMap<integer ,integer="">() ; mSp = new SoundPool(10 ,AudioManager.STREAM_MUSIC ,100) ; sSpMap.put(Type.MUSIC_CLICK, mSp.load(mContext, R.raw.click, 1)) ; sSpMap.put(Type.MUSIC_FOCUSED, mSp.load(mContext, R.raw.focused, 1)) ; } public static MusicPlayer getInstance(Context context){ if(sInstance == null) sInstance = new MusicPlayer(context) ; return sInstance ; } public void play(int type){ if(sSpMap.get(type) == null) return ; mSp.play(sSpMap.get(type), 1, 1, 0, 0, 1) ; }}</integer></integer> |
第三步:调用接口,播放音频
|
1
2
3
4
5
6
7
|
// 在界面上需要这样调用// 初始化mMusic = MusicPlayer.getInstance(MainActivity.this) ;// 在onClick中播放click时的声音mMusic.play(MusicPlayer.Type.MUSIC_CLICK) ;// 在onFocusChange中聚焦状态播放聚焦的声音mMusic.play(MusicPlayer.Type.MUSIC_FOCUSED) ; |
如果想放在Assert中的话,要注意在引用音频文件时要用AssetFileDescriptor,具体方式如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
MediaPlayer mMediaPlayer = new MediaPlayer() ; AssetFileDescriptor fd = mContext.getAssets().openFd(“music/click.pm3”) ; // assert目录下的music目录 mMediaPlayer.setDataSource(fd.getFileDescriptor() ,fd.getStartOffset() ,fd.getLength()) ; mMediaPlayer.prepare() ; mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { mMediaPlayer.release() ; } }) ; mMediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer arg0, int arg1, int arg2) { mMediaPlayer.release() ; return false; } }) ; mMediaPlayer.start() ; |
注意:在用MediaPlayer时要记住释放资源!在两个回调接口中实现。
结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com
android 小音频频繁播放的更多相关文章
- Android 音视频开发(一):PCM 格式音频的播放与采集
什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...
- Android MediaPlayer 音频倍速播放,调整播放速度
本文链接: Android MediaPlayer 倍速播放,调整播放速度 现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5.1.5.2倍等等. 从Android API 2 ...
- Android 实现简单音乐播放器(二)
在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...
- Android 实现简单音乐播放器(一)
今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...
- android MediaCodec 音频编解码的实现——转码
原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说 ...
- xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用
代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView ...
- 微信小程序音乐播放
最近在写一个艾美食艾音乐的微信小程序,其中有用到音乐播放的功能,基本播放切换功能已经实现,但是在反复切换歌曲.重新进入歌曲以及单曲循环.列表循环的测试过程中还是发生了bug,特此写一篇文章,捋一下思路 ...
- android基础---->音频和视频的使用
Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目 ...
- iOS 9音频应用播放音频之ios9音频基本功能
iOS 9音频应用播放音频之ios9音频基本功能 在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类.虽然AVAudioPlayer类不能播放网 ...
随机推荐
- AppCan IDE中有时格式化代码后,代码就运行不了了。
AppCan IDE中有时格式化代码后,代码就运行不了了.
- idea-代码格式化快捷键设置(2019.1版)
idea默认格式化快捷键是:Ctrl+Alt+L,有时会因其它软件快捷键的冲突导致失灵. 设置方法如下: 1.File --> Settings... 2. Keymap -> Code ...
- 剑指offer-正则表达式匹配-字符串-python****
# -*- coding:utf-8 -*- ''' 题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式. 模式中的字符'.'表示任意一个字符(不包括空字符!),而'*'表示它前面的字符可以出 ...
- vscode 格式化vue代码单引号变双引号
首选项->设置.输入框输入vetur vscode中设置 "vetur.format.defaultFormatterOptions": { "prettier&q ...
- 在不同电脑设备之间, 同步 VSCode 的插件和配置
前提有一个码云或者github的账户,以下是我用github的示例(只有第二步不一样): Step1. 安装 同步插件"Settings Sync" Step2. 进入github ...
- jquery事件绑定方式总结(补充)
总结 : 1.简单事件绑定方式:事件名() 如:click() 2.高级事件绑定方式:bind(事件名,数据参数,function) 3.动态生成元素事件绑定方式:live(事件名,数据参数, ...
- JDBC1
---恢复内容开始--- create table `account` ( `id` ), `name` ), `balance` ) ); insert into `account` (`id`, ...
- 前端框架:Angular React 和 Vue的比较
前端这几年的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES6&7,coffeescript,typescript等: 2.开发框架,如Angular,React, ...
- springboot(2)-阶段篇
web开发 spring boot web开发非常的简单,其中包括常用的json输出.filters.property.log等 json 接口开发 在以前的spring 开发的时候需要我们提供jso ...
- web攻击日志分析之新手指南
0x00 前言 现实中可能会经常出现web日志当中出现一些被攻击的迹象,比如针对你的一个站点的URL进行SQL注入测试等等,这时候需要你从日志当中分析到底是个什么情况,如果非常严重的话,可能需要调查取 ...