2011-03-12 8 views
0

화면에 타이머가 표시됩니다.타이머에서 사운드 파일 재생

타이머 지속 시간이 5 초 남았을 때마다 1 초마다 사운드를 재생해야합니다. & 마침내 0 (끝)에 도달하면 다른 소리를 재생해야합니다.

나는 다음과 같은 코드를 사용하고 다음 각 비프 음 지속 시간이 1 초 미만이더라도

public void onTick(long millisUntilFinished) { 

    long timeLeft = secondsRemaining // I am getting the seconds left here 

    if (timeLeft <= 5) { 
       playAlertSound(R.raw.beep); 
      } 
      else if(timeLeft == 0){ 
       playAlertSound(R.raw.beep1); 
      } 


    public void playAlertSound(int sound) { 

     MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound); 
     mp.start(); 
     mp.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mp.release(); 
      } 
     }); 

나는 위의 코드를 사용하여 직면하고 문제는, 나는 소리의 연속을 얻고있다. 0 초에 도달 할 때까지 남은 5 초에서 시작하여 매초마다 별도의 경고음 소리를 내고 싶습니다.

또한 소리의 볼륨이 너무 낮습니다.

다른 로직을 따라야하는지 여부에 관계없이 입력을 적절하게 제공 하시겠습니까?

미리 감사드립니다.

따뜻한 안부,

CB

답변

0

당신은 확실히 루프를해야한다는 setLooping 기능을 사용하지 않도록하고 볼륨 문제에 대한, 당신은 사용하여 재생 볼륨 설정할 수 있습니다 다음 setVolume 기능을.

그러나 application의 경우 MediaPlayer 대신 SoundPool 클래스를 사용하는 것이 좋습니다. 동일한 짧은 사운드를 두 번 이상 재생하려는 경우에 적합하기 때문입니다.

MediaPlayer mp = MediaPlayer.create(getBaseContext(), sound); 
    // move the mp.start() from here..   
    mp.setOnCompletionListener(new OnCompletionListener() { 
      // your handler logic here.. 
    }); 
    // and add the setLooping and setVolume calls here.. 
    mp.setLooping(false); 
    mp.setVolume(1.0, 1.0); 
    mp.start(); // to here.. 
0

내가 OnCompletionListener없이이 코드를 시도하고 더 루프와 함께 잘 작동 : 샘플 코드와

는 또한 다음과 같이하여 onCompleteListener을 설정하고 재생을 시작의 순서를 반대로 것인가? 나는 네 문제를 이해하지 못하는 것 같아. 또한 ... setVolume(1.0,1.0)이 정확하지 않습니다. (float, float) double이 아닙니다.