Partage
  • Partager sur Facebook
  • Partager sur Twitter

Coder un compteur qui tourne régulièrement.

Objectif : créer un métronome régulier.

    6 septembre 2021 à 17:03:03

    Bonjour à toutes et tous,

    J'ai peu d'expérience en programmation, autodidacte, je développe des applis simples pour un usage personnel ou pour mon travail. Je me décide à poser ma première question sur un forum, ne trouvant pas de solution. Le langage utilisé est Kotlin.

    Je me heurte actuellement à un problème pour développer un métronome : comment créer un compteur qui soit parfaitement régulier, quelle que soit l'utilisation du matériel ?

    J'ai essayé :

    lateinit var metro_mecanique: MediaPlayer
    var handRunSimple = Handler(Looper.myLooper()!!)
    lateinit var metronomRunSimple: Runnable

    fun metronomeRunSimple() {
    metronomRunSimple = object : Runnable {
    override fun run() {
    metro_mecanique.start()
    handRunSimple.postDelayed(metronomRunSimple, 250)
    }
    }
    handRunSimple.post(metronomRunSimple)
    }
    et :
    lateinit var monTimer: Timer
    lateinit var maTache: TimerTask

    fun metronomTimerTask(){
    maTache = object : TimerTask(){
    override fun run() {
    metro_mecanique.start()
    }
    }
    monTimer = Timer()
    monTimer.scheduleAtFixedRate(maTache, 0, 250)
    }
    et aussi :
    lateinit var unThread : Thread
    var handTM2 = Handler(Looper.myLooper()!!)
    lateinit var metronomRun2: Runnable

    fun demarrerThread(){
    unThread = Thread(Runnable{
    run{
    runOnUiThread(metronomRun2)
    }
    })
    unThread.start()

    metronomRun2 = object : Runnable {
    override fun run() {
    metro_mecanique.start()
    handTM2.postDelayed(metronomRun2, 300)
    }
    }
    handTM2.post(metronomRun2)
    }

     et puis :

    class RepetAction(var classeMainActivity: MainActivity) {
    lateinit var t: Timer
    lateinit var metro_mecanique: MediaPlayer

    fun demarerTimerClasse() {
    metro_mecanique = MediaPlayer.create(classeMainActivity, R.raw.metronome_mecanique)
    metro_mecanique.setVolume(2000F, 2000F)

    t = Timer()
    t.schedule(MonAction(), 0, 250)
    }

    fun arreter(){
    t.cancel()
    }

    internal inner class MonAction : TimerTask() {
    override fun run() {
    metro_mecanique.start()
    }
    }

    }

     ou encore de mettre tout cela dans un service de premier plan mais rien n'y a fait !

    Sur certains matériels tout va bien, sur d'autre (même très récents), dès que je touche l'écran, le métronome n'est plus régulier.

    J'ai déjà utilisé des applis qui avaient le même problème mais j'ai aussi un métronome parfaitement régulier, c'est donc possible. Mes compétences étant limitées, je n'ai pas trouvé de solution.

    Si vous en avez une, je serais heureux de la connaitre !

    Merci d'avance à celles et ceux qui prendront le temps de se pencher sur mon problème et d'y répondre !

    Thierry

    • Partager sur Facebook
    • Partager sur Twitter
      8 septembre 2021 à 15:38:42

      Merci beaucoup !

      Je vais étudier le code du lien !

      Bonne fin de journée !

      Thierry

      • Partager sur Facebook
      • Partager sur Twitter

      Coder un compteur qui tourne régulièrement.

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown