2016-09-25 25 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:TimerTaskのうち

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

(このような):

私はこのラインを移動

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ミリ秒までもOKです。周期時間が400秒または300ミリ秒に減少すると、2つのログごとに1つの音が鳴ります。

正常に動作するこのコードを修復する方法。

+0

あなたのビープ音はあなたの時間間隔よりも長くなるかもしれません。 – user1506104

+0

いいえ、ビープ音は約50 ms、間隔は300です。 – Tavousi

答えて

1

SoundPoolは、メモリから読み込まれた短い音を再生するのに適しています。私はまた、MediaPlayerの実装で問題が発生しました。SoundPoolは、はるかに簡単でレイテンシーの短い経験でした。

.setMaxStreams()を1以上の数に設定すると、ミュートされたサウンドが得られません。試して試してみてください。

関連する問題