adnroid SoundPool短提示音播放

一、SoundPool相對於MediaPlayer的優點

1.SoundPool適合 短且對反應速度比較高 的情況(遊戲音效或按鍵聲等),文件大小一般控制在幾十K到幾百K,最好不超過1M,

2.SoundPool  可以與MediaPlayer同時播放,SoundPool也可以同時播放多個聲音;

3.SoundPool 最終編解碼實現與MediaPlayer相同;

4.MediaPlayer只能同時播放一個聲音,加載文件有一定的時間,適合文件比較大,響應時間要是那種不是非常高的場景

 

注意:使用SoundPool播放的聲音文件格式最好使用ogg

 

二、下面是我封裝的工具類

package com.jy.toolcar.util;

import android.media.AudioManager;

import android.media.SoundPool;

import com.jy.toolcar.R;

import com.jy.toolcar.base.MyApplication;

import java.util.HashMap;

import static android.content.Context.AUDIO_SERVICE;

/**

* Created by cc

* On 2019/7/22.

* 聲音播放工具類

*/

public class SoundUtils {

private volatile static SoundUtilssingleton;

    private SoundUtils() {

}

public static SoundUtilsgetSingleton() {

if (singleton ==null) {

synchronized (SoundUtils.class) {

if (singleton ==null) {

singleton =new SoundUtils();

                }

}

}

return singleton;

    }

HashMapsoundMap =new HashMap();

    private SoundPoolsoundPool;

    private float volumnRatio;

    private AudioManageram;

    public void initSound() {

soundPool =new SoundPool(10, AudioManager.STREAM_MUSIC, 5);

        soundMap.put(1, soundPool.load(MyApplication.getAppContext(), R.raw.warn1, 1));//聲音文件

        soundMap.put(2, soundPool.load(MyApplication.getAppContext(), R.raw.warn2, 1));

        am = (AudioManager) MyApplication.getAppContext().getSystemService(AUDIO_SERVICE);// 實例化AudioManager對象

    }

/**

    * 播放提示音

    *

    * @param id 成功1,失敗2

*/

    public void playSound(int id) {

float audioMaxVolumn =am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); // 返回當前AudioManager對象的最大音量值

        float audioCurrentVolumn =am.getStreamVolume(AudioManager.STREAM_MUSIC);// 返回當前AudioManager對象的音量值

        volumnRatio = audioCurrentVolumn / audioMaxVolumn;

        try {

soundPool.play(soundMap.get(id), volumnRatio, // 左聲道音量

                    volumnRatio, // 右聲道音量

                    1, // 優先級,0爲最低

                    0, // 循環次數,0無不循環,-1無永遠循環

                    1 // 回放速度 ,該值在0.5-2.0之間,1爲正常速度

            );

        }catch (Exception e) {

e.printStackTrace();

        }

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章