2012-10-22 3 views
1

처음 버튼을 누르면 사운드가 중지됩니다. 그러나 그 후에 그것을 누르면 아무런 효과가 없습니다.SoundPool이 한 번만 중지합니다

public class App extends MultiTouchActivity { 

SoundPool sp; 
    int dub1s; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
    dub1s = sp.load(this, R.raw.dub1, 1); 


} 

public void dubstep1(View view) { 

    sp.stop(dub1s); 
    sp.play(dub1s, 1, 1, 1, 0, 1f); 
} 

답변

2

SoundPool.stop()이 (play에서 반환 값)를 스트림 ID 소요 아닌 사운드 아이디 (load의 리턴 값) : 이것은 내 자바 코드입니다.

그들은 같은 것이 아닙니다.

public class App extends MultiTouchActivity { 

    SoundPool sp; 
    int mSoundId; 
    int mStreamId = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
    mSoundId = sp.load(this, R.raw.dub1, 1); 
} 

public void dubstep1(View view) { 
    if(mStreamId != 0) { 
     sp.stop(mStreamId); 
    } 
    mStreamId = sp.play(mSoundId, 1, 1, 1, 0, 1f); 
} 
+0

예를 들어 주시겠습니까? 반환 값을 넣으면 dub1s = sp.load (this, R.raw.dub1, 1); 그것은 작동하지 않습니다 ... 그것은 public void onCreate를 public int OnCreate로 변경합니다. –

+0

@KristijanZrno 업데이트되었습니다. 'onCreate'에서 값을 반환하기를 원하지 않는다면,'play' 함수로부터 리턴 된 스트림 id를 저장하고 그것을 사용하여 사운드를 멈추고 싶을 것입니다. – Tim

+0

고마워요 :) 멋진 작품! –