6

これらのコードを見てください。

private SoundPool soundPool;
private int soundID;

soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundID = soundPool.load(this, R.raw.batimanbailedosenxutos, 1);

ボタンを押すと:

soundPool.play(soundID, volume, volume, 1, 0, 1f);

このボタンを同時に2回押すと、サウンドが一緒に再生されます。ユーザーが再生中にボタンを押すと、サウンドを停止してもう一度再生したいと思います。

入れてみました

soundPool.stop(soundID); 

soundPool.playの前ですが、なぜ曲が1回だけ再生されるのかわかりませんが、なぜこれが1回だけ機能するのか、アイデアはありますか?どうすればこれを解決できますか?ありがとう

4

3 に答える 3

19

このメソッドstop()は、読み込んだサウンド ID ではなく、現在再生中のストリームのストリーム ID を取ります。だから、このようなもの:

int streamId = soundPool.play(soundID, volume, volume, 1, 0, 1f);

soudPool.stop(streamId);
streamId = soundPool.play(soundID, volume, volume, 1, 0, 1f);

現在再生中のトラックを停止し、別のトラックを開始します。2 番目のオプションは、SoundPool許可するストリームの数を制限することです。値 1 でインスタンス化するSoundPoolと、maxStreams別のサウンドを開始しようとすると、現在再生中のサウンドが停止します。これにより、目的の動作がよりクリーンに実装される可能性があります。

于 2012-07-27T19:11:06.837 に答える
0

コードを見ることができます

public static void clear() {
        if (mSoundManager != null) {
            mSoundManager.mSoundPool = null;
            mSoundManager.mAudioManager = null;
            mSoundManager.mSoundPoolMap = null;
        }
        mSoundManager = null;
    }
于 2014-10-27T15:37:58.410 に答える