마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

soundpool 오류에 관한것입니다...toast 찍어보니 이상하게 출력이 됩니다...

0 추천
public static int musicStreamId = 0;
private static final int BASE = 1;
private static final int SPEED_1 = 2;
private static final int SPEED_2 = 3;
private static final int SPEED_3 = 4;
private static final int SPEED_4 = 5;
private static final int SPEED_5 = 6;

public void setSound(int id) {

  switch (id) {
  case BASE:
   sound.addSound(BASE, R.raw.lamboghini_v10_base_sound);
   break;
  case SPEED_1:
   sound.addSound(SPEED_1, R.raw.lamboghini_v10_speed_1);
   break;
  case SPEED_2:
   sound.addSound(SPEED_2, R.raw.lamboghini_v10_speed_2);
   break;
  case SPEED_3:
   sound.addSound(SPEED_3, R.raw.lamboghini_v10_speed_3);
   break;
  case SPEED_4:
   sound.addSound(SPEED_4, R.raw.lamboghini_v10_speed_4);
   break;
  case SPEED_5:
   sound.addSound(SPEED_5, R.raw.lamboghini_v10_speed_5);
   break;
  }

  musicStreamId = sound.playerLoopSound(id);

 }
private final Handler mHandler = new Handler() {

...........

if (RPM_value > 900 && RPM_value < 1900) {
       if (musicStreamId != SPEED_1) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(SPEED_1);
        Toast.makeText(SoundRacerActivity.this, String.valueOf(musicStreamId),Toast.LENGTH_LONG).show();


       }else{
               }
      } else if (RPM_value >= 1900 && RPM_value < 2900) {
       if (musicStreamId != SPEED_2) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(SPEED_2);

       }

      } else if (RPM_value >= 2900 && RPM_value < 3900) {
       if (musicStreamId != SPEED_3) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(SPEED_3);

       }

      } else if (RPM_value >= 3900 && RPM_value < 4900) {
       if (musicStreamId != SPEED_4) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(SPEED_4);

       }

      } else if (RPM_value >= 4900) {

       if (musicStreamId != SPEED_5) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(SPEED_5);

       }
      }

      else {

       if (musicStreamId != BASE) {

        SoundRacerActivity.this.sound
          .stopSound(musicStreamId);
        SoundRacerActivity.this.setSound(BASE);

       }
      }




현재 각 구간에 따라 다른 소리를 내려고 하는데 계속 생성으로 인한 틱틱 소리가 나길래 왜 그런가 하고 musicStreamId 부분에 대하여 토스트를 사용해서 출력을 해보았습니다. 그런데 처음에는 제대로 진행이 되다가 점점 다시 내려 오면 토스트 출력이 2 라고 출력을 하지 않고 12, 13, 14.... 계속 숫자가 증가하는 값을 출력을 하는 것입니다...도대체 무슨 문제 점인지를 모르겠습니다.. ㅜㅜ musicStreamId를 전역으로 하고 static 하고 지역변수로도 변환해보고 해보았지만 계속 같은 현상이 일어납니다....

안왕초보 (1,390 포인트) 님이 2014년 3월 16일 질문

1개의 답변

0 추천
public void setSound(int id) {
 
  switch (id) {
  case BASE:
   sound.addSound(BASE, R.raw.lamboghini_v10_base_sound);
   break;
  case SPEED_1:
   sound.addSound(SPEED_1, R.raw.lamboghini_v10_speed_1);
   break;
  case SPEED_2:
   sound.addSound(SPEED_2, R.raw.lamboghini_v10_speed_2);
   break;
  case SPEED_3:
   sound.addSound(SPEED_3, R.raw.lamboghini_v10_speed_3);
   break;
  case SPEED_4:
   sound.addSound(SPEED_4, R.raw.lamboghini_v10_speed_4);
   break;
  case SPEED_5:
   sound.addSound(SPEED_5, R.raw.lamboghini_v10_speed_5);
   break;
  }
 
  musicStreamId = sound.playerLoopSound(id);
 
 }
 
★ 토스트에 값이 이상하게 나오는 이유는 저기 보이는 musicStreamId 에
다음와 같이 id 를 넣으셔야 musicStreamId = id; 원하시는 값이 나올거구요.
 
근데.... 안왕님이 원하시는 건 setSound(id) 를 했을 때
해당 아이디의 사운드가 플레이되는걸 바라시는거죠? 그렇다면,
아래와 같이해주셔야할듯
sound.playerLoopSound(id);
초보개발자ㅠ (33,870 포인트) 님이 2014년 3월 16일 답변
플레이되는 것과 플레이 상태 두가지를 원라고 있는 것입니다 ㅠㅠ 그래서 현재 사용되는 사운드를 리턴 값을 통래서 받을려고 하는 것이구여 ㅠㅠ
저는 제목대로 토스트가 이상하게 찍히는 것에 대한 답을
해드렸는데 원하시는 걸 분명히 해주세요

플레이 되는 것과 플레이 상태 두가지를 원하고 있으시면
playerLoopSound 부분 소스를 올려주세요

참고 사이트랑 같게 가시는 것도 아닌것 같은데..
함수 이름도 다르고 ㅎㅎ 현 정보만으로 알수없지요
게다가 setSound 로 add 를 하시니 문제가 생길 여지가 있는듯
어차피 리소스가 고정인것 같은데
참고사이트처럼 처음에 add 다 해놓고 인덱스별로 사용하는게
쉽고 문제가 없을듯.
if (RPM_value > 900 && RPM_value < 1900) {
                            if (speed_1 == false) {

                                SoundRacerActivity.this.sound
                                        .stopSound(musicStreamId);
                                SoundRacerActivity.this.setSound(SPEED_1);
                               
                                base = false;
                                speed_1 = true;
                                speed_2 = false;

                            }
                        } else if (RPM_value >= 1900 && RPM_value < 2900) {
                            if (speed_2 == false) {

                                SoundRacerActivity.this.sound
                                        .stopSound(musicStreamId);
                                SoundRacerActivity.this.setSound(SPEED_2);
                               
                                speed_1 = false;
                                speed_2 = true;
                                speed_3 = false;

                            }

                        } else if (RPM_value >= 2900 && RPM_value < 3900) {
                            if (speed_3 == false) {

                                SoundRacerActivity.this.sound
                                        .stopSound(musicStreamId);
                                SoundRacerActivity.this.setSound(SPEED_3);
                                speed_2 = false;
                                speed_3 = true;
                                speed_4 = false;

                            }

이런식으로 해결 봤습니다 ㅜㅜ
...