0

SoundPool および .OGG ファイルを使用してループ サウンドを再生すると問題が発生します。名前に関連付けられたサウンドを見つけて再生/停止するために、この HashMap をセットアップしました

    public void playLoopSound(String soundName){

        currentSound = (Integer) soundMap.get(soundName);

        if(currentSound != -1){
            try{
                Logger.log("Playing Loop Sound: " + currentSound);
                loopingSound = soundPool.play(currentSound, 1, 1, 0, -1, 1);
            } catch (Exception e) {
                Logger.log("Sound Playing Error: " + e.getMessage());
            }
        } else {
            Logger.log("Sound Not Found");
        }
    }

    public void stopLoopSound(){
        soundPool.stop(loopingSound);
        loopingSound = 0;
    }

この設定は問題なく機能します。キャラクターが歩き始めたらループを開始し、歩くのをやめたらループを停止します。

ただし、サウンドはランダムに再生されなくなります。通常、使用後 (オンとオフを切り替えると) 1 分ほどかかります...

他の誰かが、SoundPool とループ サウンドで同様の問題に遭遇しましたか?

4

1 に答える 1

3

Soundpool のドキュメントを読むと、多くのことが明確になります。

-ロードされたサウンドを参照するintを渡すサウンドを再生します。このメソッド (およびサウンドの再生を開始する他のメソッド) である soundpool.play(int) は、現在サウンドが再生されているスレッド ID を参照する int を返します。

- サウンド (またはループ サウンド) を停止したい場合は、サウンド自体の int ではなく、サウンドの再生を開始したときに返されたスレッド ID の int を使用する必要があります。

次に、soundpool クラス内で、プライベート int threadIDInt = mSoundPool.play/setloop/whatever(int soundtobeplayed, int/float volumeleft, int/float volumeright, float speed, int loopornot); を設定します。[注: 引数は少し構成されています。調べてください]

その後、サウンドを停止 (または一時停止、またはループするかどうかを設定) するには、mSoundPool.stop(threadIDINT); を渡します。

TLDR: サウンドを示す int と、現在のサウンドが再生されているストリームを示すためにサウンドプールが使用する内部 int には違いがあります。

于 2012-04-09T11:39:07.767 に答える