Garibaldi’s Deuces "leg + arm"
Consider the following simple rudiment with a fraction of twos:
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:
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))
