【Android】SoundPool初步探究

    今天查看播放音频文件时,发现音频文件的播放,可以使用MediaPlayer或者SoundPool。但是SoundPool概念是使用音效池的概念来管理多个短促的音效,SoundPool的优势在于CPU占用量低以及反应延迟小。

    直接上相关代码吧:

package com.amanda;

import java.util.HashMap;

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

public class MainActivity extends Activity {
	private final int INDEX_GUZHANG = 1;	//the key of sound guzhang.mp3
	private final int INDEX_HUOCHE = 2;	//the key of sound huoche.mp3
	
	private Button button1;
	private Button button2;
	
	private HashMap<Integer,Integer> spMap;
	private SoundPool sp;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button1 = (Button)this.findViewById(R.id.sound1);
        button2 = (Button)this.findViewById(R.id.sound2);
        
        button1.setOnClickListener(clicklistener1);
        button2.setOnClickListener(clicklistener2);
        
        sp = new SoundPool(1,AudioManager.STREAM_MUSIC,0);
        
        spMap = new HashMap<Integer, Integer>();
        spMap.put(INDEX_GUZHANG,sp.load(this, R.raw.guzhang,1));
        spMap.put(INDEX_HUOCHE,sp.load(this, R.raw.huoche,1));
    }
    
    private Button.OnClickListener clicklistener1 = new Button.OnClickListener(){
    	@Override
    	public void onClick(View view){
    		pauseSounds(INDEX_HUOCHE);
    		playSounds(INDEX_GUZHANG,0);
    	}
    };
    
    private Button.OnClickListener clicklistener2 = new Button.OnClickListener(){
    	@Override
    	public void onClick(View view){
    		pauseSounds(INDEX_GUZHANG);
    		playSounds(INDEX_HUOCHE,0);
    	}
    };
    
    /**
     * play the sound using soundpool
     * @param key_sound, the key of sound
     * @param times, the times want to play
     */
    private void playSounds(int key_sound, int times){
        AudioManager am = (AudioManager)this.getSystemService(this.AUDIO_SERVICE);
        float audioMaxVolumn = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        float audioCurrentVolumn = am.getStreamVolume(AudioManager.STREAM_MUSIC);
        float volumnRatio = audioCurrentVolumn/audioMaxVolumn;
        
        sp.play(spMap.get(key_sound), volumnRatio, volumnRatio, 1, times, 1);
    }
    
    /**
     * pause the sound 
     * @param key_sound,the key of sound
     */
    private void pauseSounds(int key_sound){
    	sp.pause(spMap.get(key_sound));
    }
}

 

其中,文件guzhang.mp3以及huoche.mp3都是房子啊res/raw/资源文件夹下的。

posted @ 2012-08-27 20:38  风倾清凌  阅读(891)  评论(0编辑  收藏  举报