package com.xunao.effectdemo.utils; import android.app.Activity; import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; /** * author : 程中强 * e-mail : 740479946@qq.com * date : 2022/9/1617:28 * desc : 语音播放工具类 * version: 1.0 */ public class SoundPoolUtil { private volatile static SoundPoolUtil client; private SoundPool mSoundPool; private AudioManager mAudioManager; /*允许同时播放的音频数(为1时会立即结束上一个音频播放当前的音频)*/ private static final int MAX_STREAMS = 1; // Stream type. private static final int streamType = AudioManager.STREAM_MUSIC; private int mSoundId; private int mResId; private Context mainContext; public static SoundPoolUtil getInstance(Context context) { if (client == null) synchronized (SoundPoolUtil.class) { if (client == null) { client = new SoundPoolUtil(context); } } return client; } private SoundPoolUtil(Context context) { this.mainContext = context; mAudioManager = (AudioManager) this.mainContext.getSystemService(Context.AUDIO_SERVICE); ((Activity) this.mainContext).setVolumeControlStream(streamType); this.mSoundPool = new SoundPool(MAX_STREAMS, streamType, 0); } /** * 播放音频 * @param resId 本地音频资源 */ public void playSoundWithRedId(int resId) { this.mResId = resId; this.mSoundId = this.mSoundPool.load(this.mainContext, this.mResId, 1); this.mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { playSound(); } }); } /** * 播放音频,但是当前有音频这正播放中时不响应该次音频播放 * @param resId 本地音频资源 */ public synchronized void playSoundUnfinished(int resId) { if ( isFmActive()) return; this.mResId = resId; this.mSoundId = this.mSoundPool.load(this.mainContext, this.mResId, 1); mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { playSound(); } }); } /** * 播放音频文件 */ private void playSound() { mSoundPool.play(this.mSoundId, 1.0f, 1.0f, 0, 0, 1f); } /** * 判断当前设备是否正在播放音频 */ private boolean isFmActive() { if (mAudioManager == null) { return false; } return mAudioManager.isMusicActive(); } }