• 【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/资源文件夹下的。

  • 相关阅读:
    BZOJ3123: [Sdoi2013]森林(启发式合并&主席树)
    BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)
    BZOJ3211: 花神游历各国(线段树)
    BZOJ3207: 花神的嘲讽计划Ⅰ(hash)
    BZOJ3033: 太鼓达人(欧拉回路)
    「LibreOJ NOIP Round #1」旅游路线
    bzoj 2818: Gcd
    bzoj 2006: [NOI2010]超级钢琴
    bzoj 1485: [HNOI2009]有趣的数列
    bzoj 1045: [HAOI2008] 糖果传递
  • 原文地址:https://www.cnblogs.com/Amandaliu/p/2659118.html
Copyright © 2020-2023  润新知