2012-12-31 1 views
1

J'essaie de créer un métronome pour Android, et j'ai écrit ce code pour jouer un bip à 300BPM en utilisant un SoundPool, mais il a tendance à sauter des battements parfois et crée des lag. J'ai fait des recherches, et toutes les réponses que j'ai trouvées ne résolvent pas mon problème. Cela arrive surtout lorsque j'essaie d'accélérer le nombre de bpm ou d'utiliser des croches au lieu du quart (double temps). Quelqu'un peut-il me guider dans la bonne direction pour rendre cela aussi précis que possible? Le délai/saut de battement est non admis. Merci!!minuterie haute résolution dans android pour le métronome

 final SoundPool sndPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); 
    final int sndHigh = sndPool.load(this, R.raw.high, 1); 
    setVolumeControlStream(AudioManager.STREAM_MUSIC); 
    Thread th = new Thread(new Runnable(){ 
      public void run() { 
      while(true){ 
       sndPool.play(sndHigh, 1f, 1f, 1, 0, 1f); 
       //Log.d("asd", "beep"); 
       LockSupport.parkNanos(((240000/300)/4)*1000000); //300bpm 
      } 
      } 
    }); 
    th.setPriority(Thread.MAX_PRIORITY); 
    th.start(); 
+1

300 BPM? Êtes-vous sûr que c'est ce dont vous avez vraiment besoin? – Squonk

+1

yup. mais pensez 150BPM à croches. Cela équivaudrait à 300. Il faut donc aller beaucoup plus vite. jusqu'à sixtuplets. –

+0

Vous avez mentionné "métronome" dans la question. En tant que musicien (dont le père était professeur de musique), on m'a enseigné qu'un métronome est «habituellement» destiné à mesurer la note de quart (bien que cela puisse varier légèrement selon la composition). En réalité, à 150 bpm pour quelque chose comme D'n'B, le batteur peut effectivement frapper la batterie 300 fois par minute, mais il ne devrait pas avoir besoin d'entendre 300 bips par minute d'un métronome. En réalité, un bon batteur devrait être capable d'écouter un métronome de 75 bpm (par exemple) et de toujours coordonner 300 battements de tambour par minute. – Squonk

Répondre

1

La solution est de ne pas utiliser une minuterie ou SOUNDPOOL du tout. Au lieu de cela, utilisez un AudioTrack de bas niveau que vous gérez en continu. Vous devrez synthétiser le bip ou le clic ou n'importe quoi en insérant les échantillons appropriés dans l'AudioTrack au point approprié dans le tampon. Juste Google AudioTrack et recherchez des exemples sur la façon dont il est utilisé.