android遊戲開發—01—音效SoundPool

來源:互聯網
上載者:User

按照聲音的不同,通常分為音樂和音效兩個部分,音樂可以用來做背景音樂,處於對效能的考慮,較長的音樂如果儲存在記憶體中會造成資源緊張,一般的音效就需要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遊戲高手成為朋友。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.