Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中SoundPool的使用

Android中SoundPool的使用

編輯:關於Android編程

大家知道MediaPlayer占用的資源比較多,且不可以同時支持播放多個音頻,所以我們有一種叫做SoundPool,比如我們常見的按鍵音或者是手機提示音,還比如我們在游戲的開發中會有大量的音效效果等,下邊介紹一下她的用法:

步驟如下:

1.創建SoundPool對象

源碼如下

 /**
     *SoundPool源碼中的構造方法方法體
     *
     * @param maxStreams 最多可以容納多少個音頻
     * @param streamType 指定的聲音類型,通過AudioManager類提供的常量進行指定
     * @param srcQuality 指定音頻的質量,默認為0
     * @return a SoundPool object, or null if creation failed
     */
    public SoundPool(int maxStreams, int streamType, int srcQuality)

2.加載所需要播放的音頻:

/**
     * @param context the application context
     * @param resId the resource ID
     * @param priority the priority of the sound. Currently has no effect. Use
     *                 a value of 1 for future compatibility.
     * @return a sound ID. This value can be used to play or unload the sound.
     */
 public int load(Context context, int resId, int priority);

3.播放音頻

 /**
     * Play a sound from a sound ID.
     * @param soundID  通過load方法返回的音頻
     * @param leftVolume  左聲道的音量
     * @param rightVolume 右聲道的音量 
     * @param priority  優先級,值越大,優先級越高
     * @param loop  循環的次數:0為不循環,-1為循環
     * @param rate  指定速率,正常位1,為地位0.5,最高位2
     * @return non-zero streamID if successful, zero if failed
     */
    public final int play(int soundID, float leftVolume, float rightVolume,
            int priority, int loop, float rate);

4.案例如下:

(1)布局文件:


(2)MainActivity.java文件

package com.mingrisoft;

import java.util.HashMap;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    private SoundPool soundpool;    //聲明一個SoundPool對象
    //使用HashMap管理各種音頻
    private HashMap soundmap = new HashMap();   //創建一個HashMap對象

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button chimes = (Button) findViewById(R.id.button1);    //獲取“風鈴聲”按鈕
        Button enter = (Button) findViewById(R.id.button2);     //獲取“布谷鳥叫聲”按鈕
        Button notify = (Button) findViewById(R.id.button3);    //獲取“門鈴聲”按鈕
        Button ringout = (Button) findViewById(R.id.button4);   //獲取“電話聲”按鈕

        soundpool = new SoundPool(5,
                AudioManager.STREAM_SYSTEM, 0); //創建一個SoundPool對象,該對象可以容納5個音頻流

        //將要播放的音頻流保存到HashMap對象中
        soundmap.put(1, soundpool.load(this, R.raw.chimes, 1));
        soundmap.put(2, soundpool.load(this, R.raw.enter, 1));
        soundmap.put(3, soundpool.load(this, R.raw.notify, 1));
        soundmap.put(4, soundpool.load(this, R.raw.ringout, 1));
        soundmap.put(5, soundpool.load(this, R.raw.ding, 1));
        //為各按鈕添加單擊事件監聽器
        chimes.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                soundpool.play(soundmap.get(1), 1, 1, 0, 0, 1); //播放指定的音頻
            }
        });
        enter.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                soundpool.play(soundmap.get(2), 1, 1, 0, 0, 1);//播放指定的音頻

            }
        });
        notify.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                soundpool.play(soundmap.get(3), 1, 1, 0, 0, 1);//播放指定的音頻

            }
        });
        ringout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                soundpool.play(soundmap.get(4), 1, 1, 0, 0, 1);//播放指定的音頻
                soundpool.play(soundpool.load(MainActivity.this, R.raw.notify, 1), 1, 1, 0, 0, 1);
            }
        });

    }
    //重寫鍵被按下的事件
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        soundpool.play(soundmap.get(5), 1, 1, 0, 0, 1);     //播放按鍵音
        return true;
    }
}

另外在資源文件中的raw文件中有幾個小的鈴聲,這裡不再顯示。

 

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