2

私はサウンドクラスを持っています:

  package dubpad.brendan;

  import android.media.SoundPool;

    public class Sound {
   SoundPool soundPool;
    int soundID;

    public Sound(SoundPool soundPool, int soundID) {
        this.soundPool = soundPool;
        this.soundID = soundID;
    }

    public void play(float volume) {
        soundPool.play(soundID, volume, volume, 0, -1, 1);
    }

    public void stop(int soundID){
        soundPool.stop(soundID);
    }


    public void dispose() {
        soundPool.unload(soundID);
    }


    }

ボタンを拡張するアクティビティがあります:

package dubpad.brendan;

import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.AttributeSet;

import android.view.MotionEvent;
import android.widget.Button;

public class TestButton extends Button {
SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
int soundID = soundPool.load(getContext(), R.raw.dub1, 0);
Sound sound = new Sound(soundPool, soundID);


public TestButton(final Context context, final AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}



@Override
public boolean onTouchEvent(final MotionEvent event) {
  if(event.getAction()==MotionEvent.ACTION_DOWN){
sound.play(1);


 } 




if(event.getAction()==MotionEvent.ACTION_UP){
sound.stop(soundID);
}


    return super.onTouchEvent(event);
}

 }

最初のアクションでサウンドが再生され、最初のアクションでサウンドが一時停止します。ただし、最初のアクションの後に実行されるすべてのアクションは、サウンドを一時停止しません。簡単に言うと、一時停止は1回だけ機能します。

4

1 に答える 1

5

===編集===(私の元の答えは間違っていたと思います、それを変更します)

プレイからstreamIdを返すには、Soundクラスを変更する必要があります。

public int play(float volume) {
  return soundPool.play(soundID, volume, volume, 0, -1, 1);
}

そして、この値をTestButton内に保存できます。

if(event.getAction()==MotionEvent.ACTION_DOWN){
  mStreamId = sound.play(1);
} 

次に、mStreamIdを使用してサウンドを停止します。

if(event.getAction()==MotionEvent.ACTION_UP){
   sound.stop(mStreamId);
}

ここで重要なのはstopstreamIdではなく、を呼び出したいということですsoundId。soundIdは特定のサウンドリソースを参照しますが、streamIdは再生中のサウンドの単一のインスタンスを参照します。したがって、同じサウンドを3回再生すると、1つのsoundIdと3つのstreamIdがあります。

于 2012-10-17T14:34:25.197 に答える