首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SoundPool play()块渲染

SoundPool play()块渲染
EN

Stack Overflow用户
提问于 2016-11-12 02:54:53
回答 1查看 67关注 0票数 0

我正在使用SoundPool在我创建的一个街机游戏中播放声音。然而,playPassSound()从开始到结束大约需要40毫秒。我只构造了1x SoundPlayer,它只加载所有的声音一次。我在我的游戏线程中调用playPassSound(),它也处理渲染调用。

这就是我的SoundPlayer类的样子(只是与声音相关的所有东西的封装):

代码语言:javascript
复制
public class SoundPlayer {

private AudioAttributes audioAttributes;
private final int SOUND_POOL_MAX = 2;
private AudioManager audioManager;
private SoundPool soundPool;
private int soundIdPass;
private float volume;
private boolean passLoaded;

public SoundPlayer(Context context){

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

        audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_GAME)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .build();
        soundPool = new SoundPool.Builder()
                .setAudioAttributes(audioAttributes)
                .setMaxStreams(SOUND_POOL_MAX)
                .build();

    }else {
        //SoundPool is deprecated as of API Level 21 (Lollipop)
        soundPool = new SoundPool(SOUND_POOL_MAX, AudioManager.STREAM_MUSIC, 0);
    }

    audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

    soundIdPass = soundPool.load(context, R.raw.pass, 1);

    soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {

            if(sampleId == soundIdPass){
                passLoaded = true;
        }
    });
}

public void playPassSound(){
    controlVolume();
    soundPool.play(soundIdPass, volume, volume, 1, 0, 1f);
}
 public void controlVolume(){
    float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
    float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    volume = actualVolume / maxVolume;
}

}

为什么playPassSound()需要这么长时间?我怎样才能把它从我的游戏/渲染线程中解耦出来,使游戏不受它的影响呢?

EN

回答 1

Stack Overflow用户

发布于 2016-11-12 07:46:09

只需使用Mediaplayer就可以了。不要费心调试这个。对于这个问题,似乎没有任何真正的解决方案。只有this hack。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40554422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档