按照聲音的不同,通常分為音樂和音效兩個部分,音樂可以用來做背景音樂,處於對效能的考慮,較長的音樂如果儲存在記憶體中會造成資源緊張,一般的音效就需要android.media.SoundPool實現。以下是使用的步驟
1.構造方法SoundPool(int maxStreams, int streamType, int srcQuality)
- maxStream 該參數用於設定可以同時播放多少音效,如果設定為4,那麼可以同時播放四首音效
- streamType 該參數用於設定音訊類型,預設為STREAM_MUSIC
- srcQuality 該參數用於設定音頻品質,0是預設值
2.載入音頻檔案public int load(Context context, int resId, int priority)
resid 是資源id
priority 是優先順序
3.播放音效public final int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
soundID:播放音樂的id
leftVolume:左聲道的音量
rightVolume右聲道的音量
priority優先順序
loop迴圈次數,0為不迴圈,-1為無限迴圈
rate回放速度,該值在0.5-2.0之間,1為正常速度
範例如下,布局就不貼了,四個按鈕。
package com.example.demogame;import java.util.HashMap;import android.app.Activity;import android.media.AudioManager;import android.media.SoundPool;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button button1;private Button button2;private Button button3;private Button button4;private SoundPool sp;private HashMap<Integer, Integer> spMap;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);super.setContentView(R.layout.activity_main);this.initSoundPool();button1.setOnClickListener(new OnClickListener() {public void onClick(View v) {playSound(1, 1);}});button2.setOnClickListener(new OnClickListener() {public void onClick(View v) {sp.pause(spMap.get(1));}});button3.setOnClickListener(new OnClickListener() {public void onClick(View v) {playSound(2, 1);}});button4.setOnClickListener(new OnClickListener() {public void onClick(View v) {sp.pause(spMap.get(2));}});}private void initSoundPool() {button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);button3 = (Button) findViewById(R.id.button3);button4 = (Button) findViewById(R.id.button4);sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);spMap = new HashMap<Integer, Integer>();spMap.put(1, sp.load(this, R.raw.qiang00, 1));spMap.put(1, sp.load(this, R.raw.qiang01, 2));}/** * @param sound * 音樂id * @param number * 迴圈次數 */private void playSound(int sound, int number) {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(sound), volumnRatio, volumnRatio, 1, number, 1);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
文章開頭語:給讀者的話:
從今天開始,我準備仔細學習android遊戲開發,如果有哪篇文章幫了大家,希望留個言,讓我知道我還有志同道合的人。當然,哪裡寫的不好,也希望大家不吝賜教,由於最近才開始接觸android遊戲開發,如果覺得品質不好,請多多包涵,我一定會堅持不懈的寫下去的。還有轉載的話,不用註明出處,我自認為幫了大家是我的榮幸。呵呵呵,希望和android遊戲高手成為朋友。