【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/资源文件夹下的。
作者:风倾清凌
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号