0

私は問題があります。Soundpool を使用してサウンドを再生しようとすると、各再生の間に小さな一時停止があります。たとえば、ボタンが押されたときに再生したい 2 秒のサウンドがあります。同じ音で2つのスレッドを開始しようとしました。2 番目は最初の 0.5 秒後に開始されました。しかし、何の役にも立たない。

    AudioManager  mAudioManager;
    SoundPool mSoundPool;
    Runnable thr1;
    Runnable thr2;

    public void playLoopedSound(int soundId) {
        mSoundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
        mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
        int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)*2; 
        thr1 = new Runnable() {
            public void run() {
                mSoundPool.play(soundId, 0, streamVolume, 1, -1, 1f); //0 = no loop, -1 = loop forever
            }
        };


   thr2 = new Runnable() {
        public void run() {
            mSoundPool.play(soundId, 0, streamVolume, 1, -1, 1f); 
        }
    };
    thr1.run();
    try {
        Thread.sleep(400);
    } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
        thr2.run();
    }

4

1 に答える 1

0

デバッグなしで知るのは難しいですが、サウンドをロードするときのサウンドプールのパフォーマンスが原因で、同様の問題が発生しました。これを回避するために、SoundPool.onLoadCompleteListener を実装して、サウンドプールが完全にロードされるまでサウンドの再生を試みないようにしました。

これは API8 以降でのみ使用できることに注意してください。素敵な実装については、この回答を参照してください。

Android 1.6/2.0/2.1 で SoundPool を使用したサウンドのロードが成功したかどうかを知る

于 2012-05-26T12:03:10.723 に答える