歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中MediaPlayer和SoundPool的聲音管理

Android中MediaPlayer和SoundPool的聲音管理,直接看代碼
  1. import java.util.HashMap;  
  2.   
  3. import yoyo.activity.CrazyActivity;  
  4. import yoyo.activity.R;  
  5. import android.content.Context;  
  6. import android.media.AudioManager;  
  7. import android.media.MediaPlayer;  
  8. import android.media.SoundPool;  
  9.   
  10. /*** 
  11.  * @time 2011-10-16 12:03:15 
  12.  * @author YangWenwei 
  13.  * @聲音播放管理器 
  14.  */  
  15. public class MediaManager {  
  16.   
  17.     /** 
  18.      * 聲音開關 背景音樂 
  19.      */  
  20.     private boolean blnOpenBgSound;   
  21.       
  22.     /** 
  23.      * 聲音開關 特效音樂 
  24.      */  
  25.     private boolean blnOpenEffectSound;   
  26.       
  27.     /** 
  28.      * media 背景音樂 
  29.      */  
  30.     public static final int STATIC_MEDIA_TYPE_BGSOUND = 0;  
  31.       
  32.     public static final int STATIC_MEDIA_TYPE_COUNT = STATIC_MEDIA_TYPE_BGSOUND + 1;  
  33.       
  34.     private int[] mediaListID = {  
  35.             R.raw.backsound  
  36.     };  
  37.       
  38.     /** 
  39.      * sound 
  40.      */  
  41.     public static final int STATIC_SOUND_TYPE_DINGDONG = 0;  
  42.       
  43.     public static final int STATIC_SOUND_TYPE_COUNT = STATIC_SOUND_TYPE_DINGDONG + 1;  
  44.       
  45.     private int[] soundListID = {  
  46.             R.raw.dingdong  
  47.     };  
  48.       
  49.       
  50.     private final int maxStreams = 10//streamType音頻池的最大音頻流數目為10    
  51.     private final int srcQuality = 100;  
  52.     private final int soundPriority = 1;  
  53.     private final float soundSpeed = 1f;//播放速度 0.5 -2 之間   
  54.       
  55.     /** 
  56.      * 游戲音效 
  57.      */  
  58.     private SoundPool soundPool;  
  59.     private HashMap <Integer, Integer> soundPoolMap;  
  60.     private HashMap <Integer, MediaPlayer> mediaMap;  
  61.       
  62.     private static MediaManager mediaManager;  
  63.       
  64.     private MediaManager(){  
  65.         initMediaPlayer();  
  66.         initSoundPool();  
  67.     }  
  68.       
  69.     /*** 
  70.      * 實例MediaManager 
  71.      * @return 
  72.      */  
  73.     public static MediaManager getInstance(){  
  74.           
  75.           
  76.           
  77.         if(mediaManager == null){  
  78.             mediaManager = new MediaManager();  
  79.         }  
  80.         return mediaManager;  
  81.     }  
  82.       
  83.     /*** 
  84.      * 是否開啟背景音樂 
  85.      */  
  86.     public void setOpenBgState(boolean bgSound){  
  87.         blnOpenBgSound = bgSound;  
  88.         if(!bgSound && mediaMap != null){  
  89.             for (int i = 0; i < mediaMap.size(); i++) {  
  90.                 mediaMap.get(i).pause();  
  91.             }  
  92.         }  
  93.     }  
  94.     /*** 
  95.      * 是否開啟特效音樂 
  96.      */  
  97.     public void setOpenEffectState(boolean effectSound){  
  98.         blnOpenEffectSound = effectSound;  
  99.         if(!effectSound && soundPoolMap != null){  
  100.             for (int i = 0; i < soundPoolMap.size(); i++) {  
  101.                 soundPool.pause(soundPoolMap.get(i));  
  102.             }  
  103.         }  
  104.     }  
  105.       
  106.       
  107.     private void initMediaPlayer(){  
  108.         mediaMap = new HashMap<Integer, MediaPlayer>();  
  109.         for (int i = 0; i < STATIC_SOUND_TYPE_COUNT; i++) {  
  110.             MediaPlayer mediaPlayer = MediaPlayer.create(CrazyActivity.getInstence(), mediaListID[i]);  
  111.             mediaMap.put(i, mediaPlayer);  
  112.         }  
  113.     }  
  114.       
  115.     private void initSoundPool(){  
  116.         soundPool = new SoundPool(maxStreams, AudioManager.STREAM_MUSIC, srcQuality);  
  117.         soundPoolMap = new HashMap<Integer, Integer>();  
  118.         for (int i = 0; i < STATIC_SOUND_TYPE_COUNT; i++) {  
  119.             soundPoolMap.put(i, soundPool.load(CrazyActivity.getInstence(), soundListID[i], soundPriority));  
  120.         }  
  121.     }  
  122.       
  123.     /** 
  124.      * 播放MediaPlayer音樂 
  125.      */  
  126.     public void playMedia(int mediaType){  
  127.         if(!blnOpenBgSound){  
  128.             return;  
  129.         }  
  130.         MediaPlayer mediaPlayer = mediaMap.get(mediaType);  
  131.         if(!mediaPlayer.isPlaying()){  
  132.             mediaPlayer.start();  
  133.         }  
  134.     }  
  135.       
  136.     /** 
  137.      * 暫停MediaPlayer音樂 
  138.      */  
  139.     public void pauseMedia(int mediaType){  
  140.         MediaPlayer mediaPlayer = mediaMap.get(mediaType);  
  141.         if(mediaPlayer.isPlaying()){  
  142.             mediaPlayer.pause();  
  143.         }  
  144.     }  
  145.       
  146.     /** 
  147.      * 播放soundPlayer音樂 
  148.      */  
  149.     public void playSound(int soundID, int loop){  
  150.         if(!blnOpenEffectSound){  
  151.             return;  
  152.         }  
  153.         AudioManager audioManager = (AudioManager)CrazyActivity.getInstence().getSystemService(Context.AUDIO_SERVICE);  
  154.         float streamVolumeCurrent = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);  
  155.         float streamVolumeMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
  156.         float volume = streamVolumeCurrent / streamVolumeMax;  
  157.         soundPool.play(soundPoolMap.get(soundID), volume, volume, soundPriority, loop, soundSpeed);  
  158.     }  
  159.       
  160.     /** 
  161.      * 播放soundPlayer音樂 
  162.      */  
  163.     public void pauseSound(int soundID){  
  164.         soundPool.pause(soundPoolMap.get(soundID));  
  165.     }  
  166. }  

在使用過程中給出用法

  1. //初始化游戲聲音   
  2. MediaManager.getInstance();  //可以做為初始化   
  3.   
  4. //播放MediaPlayer音頻   
  5.   
  6. MediaManager.getInstance().playMedia(MediaManager.STATIC_MEDIA_TYPE_BGSOUND);  
  7.   
  8. //播放soundPool音頻   
  9.   
  10. MediaManager.getInstance().playSound(MediaManager.STATIC_SOUND_TYPE_DINGDONG);  
Copyright © Linux教程網 All Rights Reserved