SoundPool概率性无声问题

public class SoundManager {
    private static SoundManager instance;

    private SoundPool mSoundPool;
    private float cur_engine_volume = 0.7f;
    private int mSoundCount = 3;
    private int mLockOn;
    private int mLockOff;

    protected SoundManager() {
        mSoundPool = new SoundPool(mSoundCount, AudioManager.STREAM_MUSIC, 0);
        mLockOn = mSoundPool.load(MainApplication.getInstance(), R.raw.lock_on, 1);
        mLockOff = mSoundPool.load(MainApplication.getInstance(), R.raw.lock_off, 1);
    }

    public static SoundManager getInstance() {
        if (instance == null) {
            synchronized (SoundManager.class) {
                if (instance == null) {
                    instance = new SoundManager();
                }
            }
        }
        return instance;
    }

    public void lockOn() {
        mSoundPool.play(mLockOn, cur_engine_volume , cur_engine_volume , 1, 0, 1);
    }

    public void lockOff() {
        mSoundPool.play(mLockOff, cur_engine_volume , cur_engine_volume , 1, 0, 1);
    }



}

上面是一个短音频加载类,前辈的,不知道那整的。类没有问题,只要你不一气呵成 SoundManager.getInstance().lockOff() 。


 SoundPool 

第一个参数代表能够同时播放的最大音效数。这里切忌合理使用,写的太大后会报错。
第二个参数为声音的类型。如上为播放音乐的音频,其他还有电话铃声的音频,通知的音频,报警的音频等等。
第三个参数为采样率转换器质量,目前没有效果。使用0作为默认值。


 SoundPool.load 使用了独立的线程,不会阻塞UI主线程的操作。但是这里如果音效文件没有载入完成,我们调用play方法时可能。。。

第一个参数为上下文
第二个参数为音频文件
第三个参数为声音的优先级。目前没有效果。使用值1表示将来的兼容性。

 

 SoundPool.play 

第一个参数为流中第几个文件,为load方法的返回值。和load方法配合使用
第二个参数为左音量,值为0~1。
第三个参数为右音量,值为0~1。
第四个参数为优先级(0=最低优先级)
第五个参数为是否循环。0表示不循环,1以上表示循环次数,-1一直循环。
第六个参数为播放速率。0.5-2之间。0.5表示减慢50%,2表示加速播放。

 

posted @ 2021-07-23 17:59  勤奋的小铁  阅读(148)  评论(0编辑  收藏  举报