1、最近使用Android的SoundPool進(jìn)行多個語音提示的播放時遇到問題,最開始使用wav格式的聲音,有的機(jī)器上可以播放有的不行,原因是該控件對于ogg,MP3,wav格式支持不是很好,后來換用mp3并且進(jìn)行提前加載測試沒有問題
2、首先可以使用迅捷文字轉(zhuǎn)換語音工具得到短語音,格式wav和MP3。然后在Application進(jìn)行工具類的裝在語音保證裝在完成,然后在onLoadComplete中進(jìn)行對應(yīng)的語音使用map進(jìn)行對應(yīng)存儲,使用時使用map播放對應(yīng)的語音id。并實現(xiàn)播放當(dāng)前語音時停止播放前一個語音,防止聲音重疊。下面是部分代碼
if (soundsPool == null) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = null;
audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
soundsPool = new SoundPool.Builder()
.setMaxStreams(16)
.setAudioAttributes(audioAttributes)
.build();
} else { // 5.0 以前
soundsPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 0); // 創(chuàng)建SoundPool
}
}
soundsPool.load(context.getApplicationContext(), R.raw.raw_start, 1);
soundsPool.load(context.getApplicationContext(), R.raw.special_sound, 1);
soundsPool.load(context.getApplicationContext(), R.raw.raw_last_ten, 1);
soundsPool.load(context.getApplicationContext(), R.raw.order_end, 1);
soundsPool.setOnLoadCompleteListener((soundPool, sampleId, status) -> {
Log.e(TAG, "onLoadComplete: " + sampleId + "..sttus:" + status);
// soundPool.play(sampleId, 1, 1, 0, 0, 1);
if (sampleId == 1) {
soundMap.put(START, sampleId);
} else if (sampleId == 2) {
soundMap.put(SPECIAL, sampleId);
} else if (sampleId == 3) {
soundMap.put(LAST_TEN, sampleId);
} else if (sampleId == 4) {
soundMap.put(END, sampleId);
}
if (myOnLoadComplete != null) {
myOnLoadComplete.onLoadComplete(soundPool, sampleId, status);
}
});
關(guān)鍵代碼和步驟已經(jīng)貼出,如果有幫助可以點個贊,如果還不會可以找我要源碼。并歡迎指正,討論