SoundPool類-遊戲中即時音效的簡介

SoundPool爲即時音效,一般用於遊戲裏面的短暫的音效,與Android系統自帶的MediaPlay而言不會佔用大量的系統資源,並且播放是不需要緩衝,延遲較小,一般的文件大小爲<=7秒的小音頻文件。
SoundPool類的構造器和方法如下圖:

本demo的運行結果如下圖:

源碼連接:

xml文件非常的簡單 就兩個button 的擺放所以 你們自己寫,非常的簡單
下面給出主要的.java文件的代碼:

package com.xyliwp.soundpooldeom;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.HashMap;

/*
      需求:本dome主要爲了熟悉解釋  soundpool
      soundpool 主要用於  小於等於7秒的即時音樂的播放
      即爲既時音樂。的簡介,它相比較Android提供的MediaPlay而言 播放時並需要緩存 並且不會
      佔用大量的系統資源。
 */
public class MainActivity extends AppCompatActivity {
    /**
     * 生命soundpool的引用
     */
    private SoundPool soundPool;
    //聲明hashmap用來存放聲音文件
    private HashMap<Integer,Integer> hashMap;
    //當前正在播放的streamid
    private int currStreamId;
    //對播放和暫停兩個按鈕的定義
    private Button button_bofang;
    private Button button_zanting;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化  soundpool
        initSoundPool();
        //控件id的綁定
        initId();
        //控件點擊事件的設置
        idOnClick();
    }

    /**
     * id綁定
     */
    private void initId(){
        button_bofang = (Button)findViewById(R.id.bofang);
        button_zanting = (Button)findViewById(R.id.zanting);
    }

    /**
     * 點擊事件的設置
     */
    private void idOnClick() {
        button_zanting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //停止當前音效的播放
                soundPool.stop(currStreamId);
                Toast.makeText(getApplicationContext(),"暫停即時音效",Toast.LENGTH_SHORT).show();
            }
        });
        button_bofang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //播放1號資源  並且播放一次
                playSound(1,0);
                Toast.makeText(getApplicationContext(),"播放即時音效",Toast.LENGTH_SHORT).show();
            }
        });
    }
    /**
     * 初始化  聲音池
     */
    private void initSoundPool(){
        //創建soundpool對象
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
        hashMap = new HashMap<Integer, Integer>();
        //加載 zhandou音效 並這隻爲1號
        hashMap.put(1,soundPool.load(this,R.raw.qiangsheng,1));
    }

    /**
     * 播放即時音效
     * @param sound
     * @param loop
     */
    private void playSound(int sound,int loop){
        //AudioManager引用
        AudioManager audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
        //獲取當前系統音量
        float qian = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        //獲取系統最大音量
        float max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        //計算得到播放音量
        float bofang = qian/max;
        /**
         * 設置播放文件的音量
         * hashMap.get(sound)  播放的id
         * bofang,bofang  左右升到的音量
         * loop   循環次數,0不循環,-1永遠循環
         * 1  參數的優先級 0爲最低
         * 1.0f  回放的速度
         */
        currStreamId = soundPool.play(hashMap.get(sound),bofang,bofang,1,loop,1.0f);
    }
}
發佈了61 篇原創文章 · 獲贊 43 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章