2016-09-28 86 views
0

這是我的代碼:的Soundpool PUSE只能一次

int SC5; 
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
    SC5 = sp.load(this, R.raw.c5, 1); 

    C5.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 
        // PRESSED 
        sp.play(SC5, 1, 1, 0, 0, 1); 
        return true; 


       case MotionEvent.ACTION_UP: 
        // RELEASED 
        sp.pause(SC5); 

        return true; 
      } 
      return false; 
     } 
    }); 

我想,當我釋放按鈕我的Soundpool停止播放,此代碼的工作,但只有一次。當我按下按鈕,第二次,我不能停止的聲音 並在此的Soundpool我不能使用autoPause();,因爲我有其他文件

請幫

回答

0

SOLUTION

int streamId = -1; 
C5.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       // PRESSED 
       streamId = sp.play(SC5, 1, 1, 0, 0, 1); 
       return true; 


      case MotionEvent.ACTION_UP: 
       // RELEASED 
       sp.pause(streamId); 

       return true; 
     } 
     return false; 
    } 
}); 

說明

您不能使用SC5暫停聲音,因爲SC5是一個soundId。

欲瞭解更多信息,你應該檢查的Soundpool的文檔,注意你用來播放(soundId)或暫停(流ID)健全的ID。

/** 
* Play a sound from a sound ID. 
* 
* Play the sound specified by the soundID. This is the value 
* returned by the load() function. Returns a non-zero streamID 
* if successful, zero if it fails. The streamID can be used to 
* further control playback. Note that calling play() may cause 
* another sound to stop playing if the maximum number of active 
* streams is exceeded. A loop value of -1 means loop forever, 
* a value of 0 means don't loop, other values indicate the 
* number of repeats, e.g. a value of 1 plays the audio twice. 
* The playback rate allows the application to vary the playback 
* rate (pitch) of the sound. A value of 1.0 means play back at 
* the original frequency. A value of 2.0 means play back twice 
* as fast, and a value of 0.5 means playback at half speed. 
* 
* @param soundID a soundID returned by the load() function 
* @param leftVolume left volume value (range = 0.0 to 1.0) 
* @param rightVolume right volume value (range = 0.0 to 1.0) 
* @param priority stream priority (0 = lowest priority) 
* @param loop loop mode (0 = no loop, -1 = loop forever) 
* @param rate playback rate (1.0 = normal playback, range 0.5 to 2.0) 
* @return non-zero streamID if successful, zero if failed 
*/ 
public final int play(int soundID, float leftVolume, float rightVolume, 
     int priority, int loop, float rate); 

/** 
* Pause a playback stream. 
* 
* Pause the stream specified by the streamID. This is the 
* value returned by the play() function. If the stream is 
* playing, it will be paused. If the stream is not playing 
* (e.g. is stopped or was previously paused), calling this 
* function will have no effect. 
* 
* @param streamID a streamID returned by the play() function 
*/ 
public final void pause(int streamID); 
+0

對不起,我編輯我的文章。現在你可以看到更好。我唯一的問題是我暫停工作一次,當我再次玩,我不能暫停,但其他事情正常工作 – gabriel

+0

我知道,就像我說的,你使用soundId來暫停你的聲音,這是不正確的!使用streamId暫停工作正常。 – Bennyhuo

+0

感謝的人,我試過但沒有工作:( – gabriel