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