歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中MediaPlayer和SoundPool的聲音管理

Android中MediaPlayer和SoundPool的聲音管理

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

在使用過程中給出用法

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