2012-02-02 3 views
0

SoundPool 및 .OGG 파일을 사용하여 루핑 사운드를 재생하는 데 문제가 있습니다. 나는이 작품을 잘 설정이Android Soundpool - 반복 재생 이상

public void playLoopSound(String soundName){ 

     currentSound = (Integer) soundMap.get(soundName); 

     if(currentSound != -1){ 
      try{ 
       Logger.log("Playing Loop Sound: " + currentSound); 
       loopingSound = soundPool.play(currentSound, 1, 1, 0, -1, 1); 
      } catch (Exception e) { 
       Logger.log("Sound Playing Error: " + e.getMessage()); 
      } 
     } else { 
      Logger.log("Sound Not Found"); 
     } 
    } 

    public void stopLoopSound(){ 
     soundPool.stop(loopingSound); 
     loopingSound = 0; 
    } 

정지/이름에 관련된 소리를 발견하고 그것을 재생하기위한 설정이 HashMap에 있고, 나는 캐릭터가 걷기 시작할 때 루프를 시작하고 걷고 중지 할 때 중지합니다.

소리는 그러나

은 다른 사람이 SoundPool와 비슷한 문제가 발생하여 소리를 반복했습니다 ... (켜고 끌되는 등)에 사용 된 후, 무작위 재생 보통 분 정도 막을 것인가? 당신이로드 된 사운드를 참조 int를 통과 소리를 -playing

: Soundpool에 설명서를 읽기

+0

동일한 문제가 있습니다. 나는 또한 soundpool을 사용하고 있으며 무작위로 재생을 멈 춥니 다. –

+0

@PsyCoder 루핑 사운드의 정수를 저장하고 재생을 멈추고 싶을 때 '정지'대신 'SoundPool.pause'를 사용하여이 문제를 해결했습니다. 문제가 발생하지 않았습니다. – Alex

답변

3

을 많이 웁니다. 이 메소드 (및 사운드 재생을 개시하는 다른 메소드) soundpool.play (int)는, 사운드가 현재 재생 중의 threadID를 참조하는 int를 돌려줍니다.

- 사운드 (또는 루핑 사운드)를 멈추고 자 할 때 사운드를 재생하기 시작할 때 방금 얻은 threadID의 int를 사용해야합니다. 사운드 자체가 아닌 int입니다!

soundpool 클래스 내에서 private int를 설정합니다. threadIDInt = mSoundPool.play/setloop/whatever (int soundtobeplayed, int/float volumeleft, int/float volumeright, float speed, int loopornot); [주의 : 인수는 약간 구성되어 있습니다; look up '위로]

mSoundPool.stop (threadIDINT)를 전달하려면 소리를 멈추거나 (일시 중지하거나 반복하도록 설정하십시오.);

TLDR : 사운드를 나타내는 int와 사운드 풀이 현재 사운드가 재생되는 스트림을 나타내는 데 사용되는 내부 int 사이에는 차이가 있습니다.