Віртуальні інструменти, ч. 2: Барабани

pic

Фото Matthijs Smit на Unsplash

Для цього віртуального інструмента я захотів створити барабан, який можна було б грати, просто рухаючи руками. Як і в моєму останньому пості, я використав MediaPipe, щоб аналізувати дані рухів, а також кілька інших бібліотек для маніпулювання веб-камерою та MIDI інформацією.

Що таке барабан насправді?

Коли я починав працювати з цим інструментом, я зрозумів, що мені потрібна чітка, спрощена модель того, як грається його фізичний аналог. Отже, щоб грати на барабані, потрібно здійснити вниз рух, який контактує з мембраною. І після того, як ви вдарили по ньому, потрібно знову підняти руку, щоб вдарити по барабану знову.

У реальному світі ці речі очевидні. Але коли кодиш поведінку віртуальних інструментів, це потрібно враховувати детально. Після кількох спроб вирішення, які були занадто складними, я зупинився на поведінках, які імітують цей простий механізм:

def process_wrist(self, wrist, wrist_tracker):  
 if wrist and wrist_is_visible(wrist.visibility):  
 if wrist_tracker.set and wrist.y >= STRIKE_LEVEL:  
 note = self.get_midi_note(wrist.x, wrist_tracker.current_note)  
 self.play_note(note, wrist_tracker)  
 wrist_tracker.current_note = note  
 wrist_tracker.reset_counters()  
 elif wrist.y < STRIKE_LEVEL:  
 wrist_tracker.set = True #Reset the wrist if it goes above the drum

Тут можна побачити, що для того, щоб нота була зіграна, зап'ястя має бути "налаштоване", а позиція зап'ястя по осі Y повинна бути на рівні або вище STRIKE_LEVEL. (У цьому випадку значення Y інвертовані).

Обмеження

Знову ж таки, як і в моїй вертикальній клавіатурі, є певна затримка у тригерінгу. Я використовував електронні барабани, які зазвичай не потребують великої зміни в обсязі для хорошого звучання. Але якщо я хочу змінювати гучність, мені доведеться додати відслідковування швидкості та нормалізацію.

Нарешті, грати на барабані, навіть на ручному барабані, не так просто, як відслідковувати рухи зап'ястя. На барабанній установці палички діють як важелі, перетворюючи невеликі рухи барабанів на більші рухи в паличках. А гра на ручному барабані залежить від руху, ну, руки! А не тільки зап'ястя. Тому, щоб справді імітувати відчуття гри на таких барабанах, нам потрібно відслідковувати більше частин руки.

Кінцевий продукт

Ви можете ознайомитись з репозиторієм GitHub. Або просто насолоджуйтесь цією чудовою демонстрацією!

Перекладено з: Virtual Instruments, Pt. 2: Drums

Leave a Reply

Your email address will not be published. Required fields are marked *