Android Soundpool学习

          在开发的时候,可能会用到播放一些短暂声音。播放多媒体,最先想到的可能是MediaPlay这个类。

MediaPlay其实比较适合播放那些比较长的音乐资源,比如说播放歌曲什么的。对于那些即时播放即时响应的情况,MediaPlay就不怎么适用了。而且MediaPlay特别占用系统资源。

       Soundpool的加载最好是放在程序初始化的时候,如果在用的时候才去加载的话,调用play的时候是会抛异常的。

下面是一个简单的DEMO:

package com.psw.soundpooltest;

import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{
	private Button btn1;
	private Button btn2;
	private Button btn3;
	
	private SoundPool sp; //声音池
	private Map<Integer, Integer> mapSRC;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		initView();
		initSoundPool();
	}
	
	private void initView(){
		btn1 = (Button) findViewById(R.id.button1);
		btn2 = (Button) findViewById(R.id.button2);
		btn3 = (Button) findViewById(R.id.button3);
		
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
		btn3.setOnClickListener(this);

	}
	
	//初始化声音池
	private void initSoundPool(){
		sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
		mapSRC = new HashMap<Integer, Integer>();
		mapSRC.put(1, sp.load(this, R.raw.error, 0));
		mapSRC.put(2, sp.load(this, R.raw.welcome, 0));
		mapSRC.put(3, sp.load(this, R.raw.msg, 0));
	}
	
	/**
	 * 播放声音池的声音
	 * @param sound
	 * @param number
	 */
	private void play(int sound, int number){
		sp.play(mapSRC.get(sound),//播放的声音资源
				1.0f,//左声道,范围为0--1.0
				1.0f,//右声道,范围为0--1.0
				0, //优先级,0为最低优先级
				number,//循环次数,0为不循环
				0);//播放速率,0为正常速率
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		if(sp != null){
			sp.release();
		}
		super.onDestroy();
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			play(1, 0);
			break;
		case R.id.button2:
			play(2, 0);
			break;
		case R.id.button3:
			play(3, 0);
			break;

		default:
			break;
		}
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值