android 小音频频繁播放

android中多媒体文件(音乐和视频)的播放是用MediaPlayer方式是大家比较熟悉的,但是现在要来说一下另外一种音乐文件播放的方式SoundPool,相比较而言,用MediaPlayer来播放音乐的话,占用的系统资源是很多的,加载资源也需要时间,所以它不适合用来频繁播放小音频文件,比如控件焦点、点击时需要播放小音频文件,这个时候用SoundPool来播放音频文件,比用MediaPlayer来播放效率要高很多。这里也来说说,如果用MediaPlayer来播放小音频文件的话,会出现延时,点击了之后等会儿才出现声音。所以,SoundPool比MediaPlayer更轻量级,适合用于频繁播放的小音频文件。

下面就来说说它的用法:

第一步:放置目标音频文件

将音频文件放在res/raw目录下,这样就可以通过R来引用它了。如果想放在Assert目录下也是可以的,这里先放在raw下。

第二步:编写音频播放的类

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

第三步:调用接口,播放音频

// 在界面上需要这样调用
// 初始化
mMusic = MusicPlayer.getInstance(MainActivity.this) ;
// 在onClick中播放click时的声音
mMusic.play(MusicPlayer.Type.MUSIC_CLICK) ;
// 在onFocusChange中聚焦状态播放聚焦的声音
mMusic.play(MusicPlayer.Type.MUSIC_FOCUSED) ;

如果想放在Assert中的话,要注意在引用音频文件时要用AssetFileDescriptor,具体方式如下:

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时要记住释放资源!在两个回调接口中实现。

时间: 2024-10-23 00:30:46

android 小音频频繁播放的相关文章

android webview 通过html5播放在线视频 切换大屏

1.添加网络访问权限 <uses-permission android:name="android.permission.INTERNET" /> 2.webview添加全屏支持 developer官方文档关于html5支持视频播放描述如下:In order to support inline HTML5 video in your application, you need to have hardware acceleration turned on, and set

xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView.frame=(CGRect){{50,50},{230,230}}; /** 创建图片 */ UIImage * image=[[UIImage alloc]init]; /** 获取图片 */ image=[UIImage imageNamed:@"图片名称"]; /** 把图片给容器

iOS 9音频应用播放音频之ios9音频基本功能

iOS 9音频应用播放音频之ios9音频基本功能 在iOS 9音频应用开发中最为简单和常用的就是AVFoundation框架中的AVAudioPlayer类.虽然AVAudioPlayer类不能播放网络上的音频文件,但是它可以播放本地音频文件,以及缓冲区的文件.本章将讲解最为基础的音频播放--本地音频文件的播放. iOS 9音频应用开发基本功能 实现音频的播放需要使用到AVAudioPlayer类.AVAudioPlayer是AVFoundation.framework框架里面最基本的一个音频播

android MediaCodec 音频编解码的实现——转码

原文地址:http://blog.csdn.net/tinsanmr/article/details/51049179 从今天开始 每周不定期更新博客,把这一周在工作与学习中遇到的问题做个总结.俗话说:好记性不如写博客,善于总结的人才能走的更远.写博客这种利人利己的好处我就不一 一列举了,总之,谁做谁知道,哈哈.在文章中如果有什么问题或者错误,欢迎各位的讨论和指正.好了,步入正题,来看看我们今天要讲的MediaCodec 一.概述 由于项目的需要,需要将mp3文件转码为aac音频文件,起初打算移

android基础----&gt;音频和视频的使用

Android 在播放音频和视频方面也是做了相当不错的支持,它提供了一套较为完整的API,使得开发者可以很轻松地编写出一个简易的音频或视频播放器.今天我们开始android中音频和视频使用的学习. 目录导航 音频的播放 视频的播放 友情链接 音频的播放 项目结构如下:一个简单的读取sd卡上的音频或者视频资源的应用 在Android 中播放音频文件一般都是使用MediaPlayer 类来实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使得播放音乐的工作变得十分简单. 一. 初始化音频的

windows环境下音频文件播放

最近一个小项目要用到音乐播放模块,于是翻了一下资料,发现windows环境下播放音频文件有MCI.DirectShow等几种方式,当然也可以使用底层的api WaveOut播放.其中第一种方式最为简单,程序仅需通过发送MCI命令即可控制媒体设备,实现音频文件播放.暂停.停止等操作.其他两种方式就比较繁琐了,首先搭建DirectShow开发环境就比较周折,而使用WaveOut播放音频,需要先解码音频以获取pcm数据,然后才能播放.对于不涉及音频数据处理.仅需播放音频的简单使用场景,推荐使用MCI方

Android实现音频录制的两种方式

在移动APP开发中,每逢APP应用设计到多媒体开发的时候,都会让很多的程序员头疼不已,而且项目的开发进度会放慢.项目 的难度也会加大蛮多,同时APP的测试也会增加.Android中的多媒体开发,有音频的播放.音频的录制.视频的播放.视频的录制 等,虽然Android的SDK中提供了一些基础的开发API类,如音频的录制就提供了两种方式:AudioRecord录制音频和MediaRecorder录 制音频.AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也

Android 实现简单音乐播放器(二)

在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我将解析MusicPlayer的功能实现,就讲一些主要的点和有趣的细节,结合MainActivity.java代码进行说明(写出来可能有点碎……一向不太会总结^·^). 一.功能菜单 在MusicPlayer中,我添加了三个菜单: search(搜索手机中的音乐文件,更新播放列表). clear(清除播放列表……这个功能是最初加进去的,后来改进之后,已经没什么实际意义). exit(退出). menu

Android Mediaplayer本地音乐播放器(绑定服务)

本文章介绍MediaPlayer本地音乐播放器,而当应用程序不再位于前台且没有正在使用它的活动时,为了确保音频继续播放,我们需要建立一个服务Service. Activity与绑定服务Service之间的交互是本文章的重点(这里需要说明一点的是,Activity不能直接访问服务对象中的方法,所以才有了我们一下的介绍,这也是为服务的安全等方面的考虑). 直接上代码: 布局文件:activity_main: <LinearLayout xmlns:android="http://schemas