使用SoundPool的Android声音延迟

时间:2015-10-29 14:23:20

标签: android audio latency

public class AndroidSound implements Sound {
int soundId;
SoundPool soundPool;

public AndroidSound(SoundPool soundPool, int soundId) {
    this.soundId = soundId;
    this.soundPool = soundPool;
}

@Override
public void play(float volume) {
    soundPool.play(soundId, volume, volume, 0, 0, 1);
}

@Override
public void dispose() {
    soundPool.unload(soundId);
}}





public class Assets{

public Music theme;
public static Sound sound;

public static void load(Game game) {
        theme = game.getAudio().createMusic("theme.mp3");
        theme.setLooping(true);
        theme.setVolume(0.85f);
        theme.play();

        sound = game.getAudio().createSound("death.wav");
    }
}

然后我通过调用play()来播放不同类别的声音,但它播放的时间非常长,大约500ms。这是为什么?我试图寻找解决方案,但有很多人遇到这个问题,我没有找到任何实际有效的答案。大多数主题都有点老了,也许有一个简单的解决方案,依靠你的帮助。

public class AndroidAudio implements Audio {
    AssetManager assets;
    SoundPool soundPool;

    public AndroidAudio(Activity activity) {
        activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        this.assets = activity.getAssets();
        this.soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
    }

    @Override
    public Sound createSound(String filename) {
        try {
            AssetFileDescriptor assetDescriptor = assets.openFd(filename);
            int soundId = soundPool.load(assetDescriptor, 0);
            return new AndroidSound(soundPool, soundId);
        } catch (IOException e) {
            throw new RuntimeException("Couldn't load sound '" + filename + "'");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不知道这现在是否有用,但也会回答。

使用SoundPool

1)首先在应用程序初始化开始时根据需要加载音频。假设你需要在关卡中加入5个声音,并保持声音ID的方便。

2)现在在任何事件中只需使用soundID调用play。

3)当我从SoundPool播放调试到HAL层时,播放的延迟非常小。在我的设备中大约10-15毫秒。

有关SoundPool实现的更多信息,请关注我的github线程: https://github.com/sauravpradhan/Basic-Audio-Routing