关于SoundPool播放失败提示 sample 4 not READY

1、最近使用Android的SoundPool进行多个语音提示的播放时遇到问题,最开始使用wav格式的声音,有的机器上可以播放有的不行,原因是该控件对于ogg,MP3,wav格式支持不是很好,后来换用mp3并且进行提前加载测试没有问题

2、首先可以使用迅捷文字转换语音工具得到短语音,格式wav和MP3。然后在Application进行工具类的装在语音保证装在完成,然后在onLoadComplete中进行对应的语音使用map进行对应存储,使用时使用map播放对应的语音id。并实现播放当前语音时停止播放前一个语音,防止声音重叠。下面是部分代码

 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);  // 创建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);
            }
        });

关键代码和步骤已经贴出,如果有帮助可以点个赞,如果还不会可以找我要源码。并欢迎指正,讨论

你可能感兴趣的:(关于SoundPool播放失败提示 sample 4 not READY)