看代碼,使用SoundPool
加載tab_click_sound.mp4
播放沒(méi)有聲音
SoundPool soundPool = new SoundPool.Builder().build();
int soundID = soundPool.load(context, R.raw.tab_click_sound, 1);
soundPool.play(
soundID,
1, //左耳道音量【0~1】
1, //右耳道音量【0~1】
0, //播放優(yōu)先級(jí)【0表示最低優(yōu)先級(jí)】
0, //循環(huán)模式【0表示循環(huán)一次,-1表示一直循環(huán)垒迂,其他表示數(shù)字+1表示當(dāng)前數(shù)字對(duì)應(yīng)的循環(huán)次數(shù)】
1 //播放速度【1是正常挥萌,范圍從0~2】
);
原因:SoundPool
用的其他線程加載資源,這個(gè)時(shí)候播放資源還沒(méi)有加載完全凰慈,所以沒(méi)有聲音,我們需要提前加載
比如1:放到onCreate曹抬,再比如Application中提前加載好溉瓶,使用的時(shí)候只需要soundPool.play
就可以了
上代碼急鳄,懶得寫的直接復(fù)制用吧
下面是我正在用的,在Application中initSound
初始化資源堰酿,全app都可以用playSound
播放
public class SoundUtil {
private static SoundPool soundPool = null;
private static int soundID;
/**
* 需要提前初始化疾宏,初始化需要一點(diǎn)時(shí)間,這個(gè)時(shí)候play是沒(méi)有聲音的
* @param context
*/
public static void initSound(Context context) {
if (soundPool == null) {
soundPool = new SoundPool.Builder().build();
soundID = soundPool.load(context, R.raw.tab_click_sound, 1);
}
}
public static void playSound() {
if (soundPool != null) {
soundPool.play(
soundID,
1, //左耳道音量【0~1】
1, //右耳道音量【0~1】
0, //播放優(yōu)先級(jí)【0表示最低優(yōu)先級(jí)】
0, //循環(huán)模式【0循環(huán)一次触创,-1一直循環(huán)坎藐,其他表示數(shù)字+1表示當(dāng)前數(shù)字對(duì)應(yīng)的循環(huán)次數(shù)】
1 //播放速度【1正常,范圍0~2】
);
}
}
}