Engee documentation

Garibaldi’s Deuces "leg + arm"

Consider the following simple rudiment with a fraction of twos:

dragadiddle

This rhythm can be played either with single beats, for example Pp L P L with repetition, or as a standard dragaddle: Pp L P L L L L L.

David Garibaldi uses and teaches an interesting technique in which the fraction of twos is replaced by a combination of kicks and punches. In this case, the scheme can be any of the above, but a double kick consists of a kick and a kick of the "barrel". It looks like this:

dragadiddle_garibalid

To study this technique, a code was created that allowed us to develop the exercises necessary for this. Among other things, it uses a relatively new feature. random_notes_sequence, which assigns probability weights to various schemes so that they appear more often or less frequently.

Exercises

Before delving into the random sequences of this new type of rhythm, let’s create a few simple exercises in which this rhythm is used in different places of the beat. Single strokes are accepted as the game scheme, so that there are variants of exercises with two kicks and an arm one after the other.

First, let’s define the main variables needed for this code. Before reading this material, be sure to read the section Drum notation to understand why it is better to record notes for percussion instruments in MuseScore.

using MusicVisualizations # повторно экспортируем MusicManipulations

bass = "Acoustic Bass Drum"
snare = "Acoustic Snare"
tom = "Low-Mid Tom"
tpq = 960 # длительность четвертной ноты в импульсах
sixt = 960 ÷ 4 # длительность шестнадцатой ноты в импульсах
240

Please note that only two different "motifs" are needed to create rhythms: one with a double "leg + arm" beat and another with a single beat. Then, with the help of elegant code, you can build all possible combinations.

motif0 = [DrumNote(snare, 0, sixt)]

motif1 = [DrumNote(bass, 0, sixt÷2), DrumNote(tom, sixt÷2, sixt÷2)]
2-element Vector{Note}:
 Note B1  | vel = 100 | pos = 0, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 120, dur = 120 | channel 9

First, you need to create a series of basic exercises in which this double kick and arm strike will occur in various positions within the quarter note. There are four such options in total. Next, we will store them in one container exercises, and each exercise will have a length of bars of bars.

bars = 2
exercises = Note[]

for j in 1:4 # создаем 4 возможных варианта

    # Создаем одну четвертную ноту для вариантов
    exercise = [translate(motif0, k*sixt) for k in 0:3]
    exercise[j] = translate(motif1, (j-1)*sixt)
    exercise = vcat(exercise...)
    ex0 = copy(exercise)

    # Повторяем, чтобы заполнить один такт вариантами. 1 четвертная нота = 4 шестнадцатых
    for k in 1:3; append!(exercise, translate(ex0, 4k*sixt)); end
    ex0 = copy(exercise)

    # Повторяем столько тактов, сколько необходимо. 1 такт = 16 шестнадцатых
    for b in 0:bars-1; append!(exercise, translate(ex0, 16b*sixt)); end

    # Добавим результат в упражнения (с преобразованием с учетом тактов)
    append!(exercises, translate(exercise, (j-1)*bars*16*sixt))
end

Then we create a second type of exercise, in which one quarter note will contain two twos "leg + arm". There are two ways to do this (it is assumed that the twos should not be next to each other).

for j in 5:6
    exercise = [translate(motif0, k*sixt) for k in 0:7] # повторяем 8 раз
    for m in (j, j+2)
        exercise[m] = translate(motif1, (m-1)*sixt)
    end
    exercise = vcat(exercise...)
    ex0 = copy(exercise)

    # Повторяем, чтобы заполнить один такт вариантами. 1 четвертная нота = 4 шестнадцатых
    # Обратите внимание, что это ритм не из 2 четвертных
    for k in 1:1; append!(exercise, translate(ex0, 8k*sixt)); end
    ex0 = copy(exercise)

    # Повторяем столько тактов, сколько необходимо. 1 такт = 16 шестнадцатых
    for b in 0:bars-1; append!(exercise, translate(ex0, 16b*sixt)); end

    # Добавим результат в упражнения (с преобразованием с учетом тактов)
    append!(exercises, translate(exercise, (j-1)*bars*16*sixt))
end

Finally, the last exercise consists of repeating the "leg + arm" twos every three sixteenth notes.

motif001 = [
DrumNote(bass, 0, sixt÷2),
DrumNote(tom, sixt÷2, sixt÷2),
DrumNote(snare, sixt, sixt),
DrumNote(snare,2sixt, sixt),
]

j = 7
exercise = [translate(motif001, 3k*sixt) for k in 0:7] # повторяем 10 раз
exercise = vcat(exercise...)
append!(exercises, translate(exercise, (j-1)*bars*16*sixt))
exercises
392-element Vector{Note}:
 Note B1  | vel = 100 | pos = 0, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 120, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 240, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 480, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 720, dur = 240 | channel 9
 Note B1  | vel = 100 | pos = 960, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 1080, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 1200, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 1440, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 1680, dur = 240 | channel 9
 ⋮
 Note D2  | vel = 100 | pos = 50160, dur = 240 | channel 9
 Note B1  | vel = 100 | pos = 50400, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 50520, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 50640, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 50880, dur = 240 | channel 9
 Note B1  | vel = 100 | pos = 51120, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 51240, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 51360, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 51600, dur = 240 | channel 9

Now we use musescore to create an exercise sheet:

musescore("garibaldi_draga_exercise.png", Notes(exercises, tpq))
упражнения

Random exercises

Now we want to add random sequences with double kicks "foot + hand" in random places. This can be easily done using random_notes_sequence. However, you need to be sure that a double blow will never be followed by another double blow. To do this, define the following object:

motif2 = [
DrumNote(bass, 0, sixt÷2),
DrumNote(tom, sixt÷2, sixt÷2),
DrumNote(snare, sixt, sixt),
]
3-element Vector{Note}:
 Note B1  | vel = 100 | pos = 0, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 120, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 240, dur = 240 | channel 9

Recall that motif0 is a normal single hit. Therefore, you need to randomly combine motif0 and motif2:

motifs = Notes.([motif0, motif2], tpq)
2-element Vector{Notes{Note}}:
 Notes{Note} with 1 notes
 Notes{Note} with 3 notes

In order for the exercise not to be too difficult, it is necessary that the double stroke does not occur too often. To do this, it is enough to adjust the value of the named weight argument.:

rseq, = random_notes_sequence(motifs, 16sixt*16; weights = [4, 1])
rseq
301 Notes with tpq=960
 Note D2  | vel = 100 | pos = 0, dur = 240 | channel 9
 Note B1  | vel = 100 | pos = 240, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 360, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 480, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 720, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 960, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 1200, dur = 240 | channel 9
  ⋮
 Note D2  | vel = 100 | pos = 60000, dur = 240 | channel 9
 Note B1  | vel = 100 | pos = 60240, dur = 120 | channel 9
 Note B2  | vel = 100 | pos = 60360, dur = 120 | channel 9
 Note D2  | vel = 100 | pos = 60480, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 60720, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 60960, dur = 240 | channel 9
 Note D2  | vel = 100 | pos = 61200, dur = 240 | channel 9

And again we export the result to the score.:

musescore("garibaldi_draga_sequence_easy.png", Notes(exercises, tpq))
упражнения

Finally, let’s create another exercise in which the two "leg + arm" occurs a little more often.

rseq, = random_notes_sequence(motifs, 16sixt*16; weights = [2, 1])
(Notes{Note} with 321 notes, [1, 1, 2, 2, 1, 2, 2, 1, 1, 1  …  1, 1, 2, 1, 2, 1, 1, 2, 2, 1])
musescore("garibaldi_draga_sequence_hard.png", Notes(exercises, tpq))
упражнения