Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 游戲開發之MediaPlayer、SoundPool以及AudioManager

Android 游戲開發之MediaPlayer、SoundPool以及AudioManager

編輯:關於Android編程

一、MediaPlayer
1.獲取MediaPlayer實例
[java] 
MediaPlayer.create(Context context,int resId);  //參數一:上下文對象,參數二:音樂資源ID,一般放在raw文件夾下。如果沒有raw就自己創建一個 

2.MediaPlayer常用的函數
[java]
prepare();//為播放音樂文件做准備工作 
 
start();//播放音樂 
 
pause();//暫停音樂播放 
 
stop();//停止音樂播放 
注:pause()和stop(),主要的區別在於:暫停播放後可以調用start()繼續播放,停止音樂播放後,需要調用prepare()再調用start()進行播放音樂。
 
3.MediaPlayer其它常用函數
[java] 
setLooping(boolean looping);//設置音樂是否循環播放,true為循環播放 
 
seekTo(int msec);//將音樂播放跳轉到某一時間點,以毫秒為單位 
 
getDuration();//獲取播放的音樂文件總時間長度 
 
getCurrentPosition();//獲取當前播放音樂時間點 
 
二、AudioManager(音樂管理類,可以獲取當前音樂大小以及最大音量)
1.獲取AudioManager實例
[java] 
AudioManager am = new AudioManager(); 
2.AudioManager常用函數
[java] 
setStreamVolume(imt streamType,int index,int flags) ;//設置音量大小,參數一:音樂類型(AudioManager.STREAM_MUSIC),參數二:音量大小,參數三:設置一個或者多個標志 
 
getStreamVolume(int streamType);//獲取當前音量大小,參數 獲取音量大小類型 
 
getStreamMaxVolume(int streamType);// 獲取當前音量最大值,參數獲取音量大小的類型 
注:操作手機音樂播放需要使用函數:Activity.setVolumeControlStream(int streamType) 設置控制音量類型,參數:音量類型(AudioManager.STREAM_MUSIC)
三、SoundPool
1.獲取SoundPool實例
[java] 
new  SoundPool(int maxStreams,int streamType,int srcQuality);   //參數一:允許同時播放的聲音最大值,參數二:聲音類型,參數三:聲音品質 
2.SoundPool常用函數
[java] 
int load(Context context,int resId,int priority);  //加載音樂文件,返回音樂ID(音樂流文件數據) 參數一:Context實例,參數二:音樂文件ID,參數三:標志優先考慮的聲音。目前使用沒有任何效果,只是具備兼容性價值。一般寫個1就可以。 
 
int play(int soundId,float leftVolume,float rightVolume,int proority,int loop,float rate);   //音樂播放,播放失敗返回0,正常則返回非0值,參數一:加載後得到的音樂文件,參數二:音量的左聲道 范圍0.0~1.0  參數三:音量的右聲道,范圍 0.0~1.0  參數四:音樂流的優先級,0為最低優先級,參數五:音樂播放次數,-1表示無限循環,0表示正常一次,大於0則表示循環次數,參數六:播放速率,取值范圍:0.5~2.0,1.0表示正常播放。 
 
pause(int streamID);  //暫停音樂播放  ,參數:音樂文件加載後的流ID 
 
stop(int streamID) ; //結束音樂播放 參數:音樂文件加載後的流ID 
 
release();  //釋放SoundPool的資源 
 
setLoop(int streamID,int loop);  //設置循環次數 參數一:音樂文件加載後的流ID,參數二:循環次數 
 
setReat(int streamID);  //設置播放速率 
 
setVolume(int streamID,float leftVolume,float rightVolume);   //設置音量大小,參數二:左聲道音量,參數三:右聲道音量 
 
setPriority(int streamID,int priority);   //設置流的優先級,參數二:優先級值。 
 
四、MediaPlayer與SoundPool分析
1.MediaPlayer的優缺點:
缺點:資源占用量較高、延遲時間較長、不支持多個音頻同時播放等。在快速連續播放聲音(連續猛點按鈕)時,會出現1~3秒左右的延遲;當然此問題可以使用MediaPlayer.seekTo()這個方法解決。
優點:支持恨大的音樂文件播放,而且不會同SoundPool一樣需要加載准備一段時間,MediaPlayer能及時播放音樂。
2.使用SoundPool的優缺點:
缺點:最大只能申請1M的內存空間,意味著用戶只能使用一些很短的聲音片段,而不能用它來播放歌曲或游戲背景音樂。SoundPool提供了Pause和stop方法,但建議最好不要輕易使用這些方法,因為使用它們會導致程序莫名其妙的終止。使用SoundPool播放音頻格式建議使用OGG格式。如果使用WAV格式的音頻文件,在播放的情況下有時會出現異常關閉的情況。在使用SoundPool播放音樂文件的時候,如果在構造中就調用播放函數進行播放音樂,其效果則是沒有聲音!不是因為函數沒有執行,而是SoundPool需要加載准備時間!當然這個准備時間很短,不會影響使用,只是程序一運行播放剛開始沒有聲音罷了。
優點:
支持多個音樂文件同時播放。
 
通過以上分析,在Android游戲開發中,游戲背景音樂使用MediaPlayer肯定比使用SoundPool要合適;而游戲音效的播放采用SoundPool則更好。
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved