Web midi API и несколько одновременных заметок - PullRequest
0 голосов
/ 25 сентября 2018

Я сейчас открываю веб-интерфейс midi API с подключенным USB-пианино.Следуя данному руководству (и читая документацию ), я понимаю, что вы можете назначить функцию событию "onmidimessage".

Моя проблема в том, что эта функция вызываетсядля каждой нажатой / выпущенной отдельной ноты, так как я должен иметь дело с несколькими одновременно нажимаемыми нотами, чтобы сыграть аккорд?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Для аккордов API отправляет заметки одну за другой с нулевой задержкой.

Просто запустите звук без задержек.Смотрите пример на https://surikov.github.io/webaudiofont/examples/midikey.html

0 голосов
/ 25 сентября 2018

Вам нужно будет взглянуть на атрибут MIDIMessageEvent receivedTime и сгруппировать события в зависимости от степени детализации, подходящей для вашего приложения, чтобы выяснить, что составляет аккорд.Кроме того, вы получите MIDI-события для выпускаемых клавиш.

Причина, по которой я говорю «какая бы гранулярность не подходила для вашего приложения», заключается в следующем:

Рассмотрим, как игрок клавиатуры нажимаетаккорд;это может выглядеть следующим образом.

    time -------------------->

C   #-----------------------#
E    #---------------------#
G   #-------------------------#

В то время как гитарист, играющий аккорд (при условии, что они также ослабляют струны), может выглядеть как

    time -------------------->

C   #-----------------------#
E        #-----------------#
G               #-----------#

в том же масштабе времени.

...