SoundPoolUtil封装

SoundPool更适合一些小的音频,在Application中初始化,后面随调随用,比较简单。
Android 开发文档地址

package com.tencent.codemouse.util;

import android.media.AudioManager;
import android.media.SoundPool;
import com.tencent.abcmouse.R;
import com.tencent.abcmouse.util.GlobalContext;
import java.util.HashMap;
import java.util.Map;

/**
 *
 *      封装一个适用全局的音频播放工具类
 *
 * 创建人:linmutang
 * 创建时间:9/15/21
 */
public class SoundPoolUtil {

    private static SoundPool sSoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

    private static Map<String,Sound> sMap = new HashMap<>();


    /**
     *      所有的音频资源都在这里加载
     */
    public static void init() {

        addSound(R.raw.music_parent_lock);
        addSound(R.raw.music_setting_bg);
        addSound(R.raw.music_setting_sound);
    }

    /**
     *      添加新的音频
     *
     * @param resId
     */
    private static void addSound(int resId) {
        Sound sound = new Sound();
        String id = String.valueOf(resId);
        sound.soundId = sSoundPool.load(GlobalContext.getContext(), resId, 0);
        sMap.put(id, sound);
    }


    /**
     *      播放歌曲
     * @param resId     R.raw.  资源
     * @param volume    音量 0-1
     * @param loop      循环次数  -1为无限循环、1为循环一次即播放两次
     */
    public static void loadAndPlay(int resId, float volume, int loop) {
        String id = String.valueOf(resId);
        if (!sMap.containsKey(id)) {
            return;
        }
        Sound sound = sMap.get(id);
        sound.streamId = sSoundPool.play(sound.soundId, volume, volume, 0, loop, 1);
        sound.volume = volume;
        sound.loop = loop;
    }

    /**
     *      设置音量
     * @param resId     R.raw.  资源
     * @param volume    音量 0-1
     */
    public static void setVolume(int resId, float volume) {
        String id = String.valueOf(resId);
        Sound sound = sMap.get(id);
        if (sound == null || sound.streamId == -1) {
            return;
        }
        sSoundPool.setVolume(sound.streamId, volume, volume);
        sound.volume = volume;
    }


    /**
     *      停止
     * @param resId
     */
    public static void setStop(int resId) {
        String id = String.valueOf(resId);
        Sound sound = sMap.get(id);
        if (sound == null || sound.streamId == -1) {
            return;
        }
        sSoundPool.stop(sound.streamId);
    }

    /**
     *      设置循环次数
     * @param resId     R.raw.  资源
     * @param loop      音量 0-1
     */
    public static void setLoop(int resId, int loop) {
        String id = String.valueOf(resId);
        Sound sound = sMap.get(id);
        if (sound == null || sound.streamId == -1) {
            return;
        }
        sSoundPool.pause(sound.streamId);
        sSoundPool.setLoop(sound.streamId, loop);
        sSoundPool.resume(sound.streamId);
    }


    /**
     *      释放资源
     */
    public static void releaseAll() {
        sMap.clear();
        if (sSoundPool == null) {
            return;
        }
        sSoundPool.release();
    }

    static class Sound{
        public int soundId = -1;
        public int streamId = -1;
        public int loop = 0;
        public float volume = 1f;
    }



}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值