Подсчет нот во время игры метронома - PullRequest
0 голосов
/ 04 февраля 2019

Следующее аудио воспроизводится со скоростью 100 Ударов в минуту и ​​Подпись времени 4/4.

Количество регистрируемых секунд и тиков постоянно увеличивается.Как я могу определить:

  • Когда первая мера завершена?то есть во второй раз 1 происходит .. обычно музыка считается 1, 2, 3, 4, 1, 2, 3, 4
  • Как я могу определить, когда происходит каждая четвертная нота?

(function() {
  var isPlaying = false;

  document.getElementById('togglePlayback').addEventListener('click', function() {
    isPlaying = !isPlaying;
    Tone.Transport.bpm.value = 100;
    Tone.Transport.timeSignature = "4/4";
    console.log('Start playing');
    console.log(Tone.Transport.bpm.value);
    console.log(Tone.Transport.timeSignature);

    if(isPlaying) {
      Tone.Transport.scheduleRepeat(function(time){
        console.log('Seconds: ' + Tone.Transport.getSecondsAtTime(time));
        console.log('Ticks: ' + Tone.Transport.getTicksAtTime(time));
      }, "4n");
      Tone.Transport.start();
    }
  });
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tone/13.7.1/Tone.js"></script>
<div>
  <button id="togglePlayback">Start</button>
</div>
<div id="results"></div>

1 Ответ

0 голосов
/ 04 февраля 2019

Поскольку квартальная нота составляет 192 тика, вы можете использовать ее для определения времени других событий и условий:

(function() {
  Tone.Transport.bpm.value = 100;
  Tone.Transport.timeSignature = "4/4";

  Tone.Transport.scheduleRepeat(function(time){
    console.log('Quarter Notes:', Tone.Transport.getTicksAtTime(time) / 192);
  }, "4n");

  var isPlaying = false;

  document.getElementById('togglePlayback').addEventListener('click', function() {
    if (isPlaying) {
      Tone.Transport.pause();
    } else {
      Tone.Transport.start();
    }

    isPlaying = !isPlaying;
  });
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tone/13.7.1/Tone.js"></script>
<div>
  <button id="togglePlayback">Start</button>
</div>
<div id="results"></div>

Я также изменил вашу логику для воспроизведения / паузы вместо того, чтобы планировать новые повторы и начинать с начала воспроизведения при каждом нажатии второй кнопки.

...