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

}


你可能感兴趣的:(多媒体,android应用)