2014-03-03 2 views
3

현재 SoundPool API를 사용하여 Android 앱에서 사운드를 재생하려고합니다. 소리를내는 것은 문제가 아닙니다. 이제 나는 소리를 멈추고 나중에 다시 시작하고 싶습니다. 하지만 stop 함수를 호출 한 다음 play()를 호출하면 사운드가 재생되지 않습니다.Android SoundPool : 중지 된 사운드 다시 재생

부하 소리 :

streamId = soundPool.play(soundId, 1.0f, 1.0f, 1, -1, 1); 

사운드를 중지 :

soundId = soundPool.load(context, fileId, 1); 

가 사운드를 재생

soundPool.stop(streamId); 

가 나는 또한 다시 사운드를로드하려고 여기에 몇 가지 코드 두 번째로 연주하기 전에,하지만 그건 고쳐지지 않았습니다.

일시 중지/다시 시작을 사용하면 소리가 정지 된 위치에서 재생됩니다 (하지만 항상 처음부터 원합니다). 이상한

난 그냥 알아 낸 뭔가 :

어떤 도움을

편집을 감상 할 수있다. soundpool.stop()을 사용하면 soundpool.play()를 호출 할 때마다 다시 작동합니다. 그래서 play()의 첫 번째 호출은 사운드를, 두 번째는 아닌, 3, 5, 7 번째 ... 호출은 사운드를 재생합니다. soundpool.pause()를 사용한 다음 play()를 사용하면 매 3 회 작동합니다. 그래서 1, 4, 7 번째 ... play()의 호출은 사운드를 시작합니다.

버그입니까? 아니면 잘못 사용하고 있습니까?

답변

1

나는 사운드를 시작하고 중지 한 다음 다시 재생할 간단한 프로젝트를 만들었습니다. 당신은 그 다음 문제는 다른 곳에있을 수 있습니다 같은 일을하고 있다면 여기, 내가 내 경우에는 제대로 작동 코드

Button b1, b2; 
private int streamId; 
private int soundID; 
private SoundPool sp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b1 = (Button) findViewById(R.id.b1); 
    b2 = (Button) findViewById(R.id.b2); 
    sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
    soundID = sp.load(this, R.raw.middle, 1); 
    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    switch (v.getId()) { 
    case R.id.b1: 
     streamId = sp.play(soundID, 1, 1, 1, 0, 1f); 
     break; 
    case R.id.b2: 
     sp.stop(streamId); 

     break; 
    } 
} 

입니다. 좀 더 자세한 정보를 제공 할 수 있다면 문제가 무엇인지 파악할 수있을 것입니다.

+0

감사합니다. 나는 당신의 코드를 사용할 때 아무 것도 듣지 못한다. SoundPool 객체 "AudioManager.STREAM_MUSIC"의 시작에서 "AudioManager.STREAM_RING"으로 변경하면 (예 : 내 앱에서 사용하는 것처럼) 매회마다 소리가 들립니다. STREAM_MUSIC에 대한 추가 허가가 필요합니까? STREAM_RING에서 동일한 문제가 발생하면 테스트 해주세요. – user3266343

+0

내 코드를 두 번 확인했는데 AudioManager.STREAM_MUSIC 및 AudioManager.STREAM_RING에 대해 제대로 작동하는지 확인했습니다. 샘플 프로젝트를 만들고 현재 프로젝트에서 원하는 모든 가능성을 테스트하거나 soundPool의 정확한 구현을 제공하는 것이 좋습니다. –

0

재생 :

nowPlaying= soundPool.play(soundId, 1.0f, 1.0f, 1, -1, 1); 

soundPool.stop(nowPlaying); 

이제 다시로드 : 답장을

soundId = soundPool.load(this, R.raw.yoursound, 0);