【问题标题】:Android sound plays noisy and is cracklingAndroid 声音播放嘈杂且噼啪作响
【发布时间】:2013-12-13 08:06:31
【问题描述】:

我在使用 SoundPool 在 android 上播放声音时遇到问题,这与 MediaPlayer 类配合得很好。为什么我不能使用 MediaPlayer 类是因为它不支持音高或速度的变化。

用例:声音在后台播放,它会根据用户输入而改变。

当前问题:无法正确播放声音并冻结应用程序。

问题:处理这种情况的正确方法是什么,是否应该在单独的线程中播放背景声音和改变音量的通信应该使用 Handler 和消息来完成?

@Override
public void surfaceCreated(SurfaceHolder holder) {

    soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
    RAIN_SOUND_ID =  soundPool.load(getContext(), R.raw.rain, 1);

    new Thread(new Runnable() {
        @Override
        public void run() {


            soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

                @Override
                public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                    if (sampleId == RAIN_SOUND_ID) {
                        soundPool.play(RAIN_SOUND_ID, 1f, 1f, 10, -1, 1);
                    }
                }
            });
        }
    }).start();
 }

【问题讨论】:

    标签: java android audio


    【解决方案1】:

    SoundPool 类实际上在幕后创建和管理它自己的线程池,用于播放它的声音。因此,您可以简化代码以消除潜在问题的额外线程。

    【讨论】:

    • 不错,我稍后再试试,如果 soundpool 有自己的线程,那么在 UI 线程中更改音量是安全的。
    • 你说得对,soundpool 有单独的线程,在 UI 线程中修改音量是安全的。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多