2016-09-25 1 views
1

메트로놈과 같은 Android 애플리케이션을 만들었습니다. 실제로 n 밀리 초마다 삐 소리를 내고 싶습니다. 나는 이것을 위해 MediaPlayer과 타이머를 사용합니다.Android 재생 비프 음, 매 n 밀리 초

내 코드는 다음과 같다 :

Soloution 1 :이 코드를 실행하면

start_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Timer timer = new Timer("MetronomeTimer", true); 
      TimerTask tone = new TimerTask() { 
       @Override 
       public void run() { 
        //Log 
        DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss:SS"); 
        Date date = new Date(); 
        j++; 
        Log.i("Beep", df.format(date) + "_____" + j); 
        //Play sound 
        music = MediaPlayer.create(MainActivity.this, R.raw.beep); 
        music.start(); 
       } 
      }; 
      timer.scheduleAtFixedRate(tone, 500, 500); // every 500 ms 
     } 
    }); 

, 모든 것이 OK입니다. 그러나 15 번 루프가 지나면 로그 라인은 정상적으로 작동하지만 사운드는 소거됩니다. 그리고 때로는 매 15 또는 20 개의 로그, 사운드 재생 및 정지가 있습니다.

해결 방법 2 :

music = MediaPlayer.create(MainActivity.this, R.raw.beep); 

(이 같은) TimerTask 중 :

start_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      music = MediaPlayer.create(MainActivity.this, R.raw.beep); 

      Timer timer = new Timer("MetronomeTimer", true); 
      TimerTask tone = new TimerTask() { 
       @Override 
       public void run() { 
        //Log 
        DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss:SS"); 
        Date date = new Date(); 
        j++; 
        Log.i("Beep", df.format(date) + "_____" + j); 
        //Play sound 
        music.start(); 
       } 
      }; 
      timer.scheduleAtFixedRate(tone, 500, 500); // every 500 ms 
     } 
    }); 

이 코드는 반복에 대한 확인도 500까지 밀리

나는이 라인을 이동 . 주기 시간이 400 또는 300ms로 감소 할 때마다 2Log마다 하나의 사운드가 울립니다.

잘 작동하는이 코드를 복구하는 방법.

+0

삐 소리가 귀하의 시간 간격보다 길 수도 있습니다. – user1506104

+0

아니요. 내 경고음은 약 50ms이고 간격은 300입니다. – Tavousi

답변

1

SoundPool은 메모리에서로드 된 짧은 사운드를 재생할 때 더 좋습니다. 또한 MediaPlayer, SoundPool을 구현하는 데 문제가있어 훨씬 쉽고 대기 시간이 짧습니다.

.setMaxStreams()을 1 이상의 숫자로 설정하면 음소거 된 소리가 들리지 않습니다. 시도하고 실험 해보십시오.