3

1~4種類の音から選んで同時に鳴らすアプリを作っています。サウンドを停止するまで、すべて正常に動作します。停止機能は、同時に 1 つのサウンドに対してのみ機能します。コードは次のとおりです (サウンドプールのみ)。

sound = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        s1 = sound.load(Main.this, R.raw.mosq1, 1);
        s2 = sound.load(Main.this, R.raw.mosq2, 1);
        s3 = sound.load(Main.this, R.raw.mosq3, 1);
        s4 = sound.load(Main.this, R.raw.mosq4, 1);
.
.
.
.
        case R.id.play:
            if (l1==true){sound.play(s1, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);}
            if (l2==true){sound.play(s2, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(6500);}
            if (l3==true){sound.play(s3, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(2500);}
            if (l4==true){sound.play(s4, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);}
            break;
        case R.id.stop:
            sound.stop(s1);
            sound.stop(s2);
            sound.stop(s3);
            sound.stop(s4);
            wibracja.cancel();
            break;

停止機能の正しい使い方は?手伝ってくれてありがとう

4

1 に答える 1

9

これは、soundpool を初めて使用する場合によくある問題です。サウンドプールのドキュメントを注意深く見ると、play はパラメーター「soundID」を使用し、stop はパラメーター「streamID」を使用します。これを見落として、コードのように load 関数から返された soundID を両方のコマンドに使用するのは簡単です。Androidチュートリアルの例でこれが間違っているのを見たことさえあります。代わりに次のコマンドを使用します。

s1 = sound.load(Main.this, R.raw.mosq1, 1);  
if (l1==true){p1=sound.play(s1, 1, 1, 0, rep, 1);     
sound.stop(p1);// NOT s1
于 2012-10-30T20:21:06.013 に答える