52700.fb2
Далее следуют сообщения из проигрывателя timidity и долгожданный звук. Мы слышим ноту до, сыг-
ранную на рояле. Наберём какую-нибудь мелодию:
*Main> let x = line [c, hn e, hn e, low b, c]
*Main> out x
Сыграем в два раза быстрее, на другом инструменте:
*Main> out $ instr 15 $ hn x
Сыграем канон. Канон это когда одна и та же мелодия ведётся в разных голосах с запаздыванием. Сыграем
двухголосный канон:
*Main> out $ instr 80 (loop 3 x) =:= delay 2 (instr 65 $ low $ loop 3 x)
Номера инструментов можно посмотреть по справке к протоколу General Midi. Это дополнение к прото-
колу midi определяет какие номера каким инструментам должны соответствовать. Звучит ужасно, но звучит!
21.5 Пример
Опираясь на примитивы композиции, которые мы определил в модуле Score, мы можем написать мело-
дию. Ниже приведён небольшой пример. Инструменты:
closedHiHat = drum 42;
rideCymbal = drum 59;
cabasa = drum 69;
maracas
= drum 70;
tom
= drum 45;
flute
= instr 73;
piano
= instr 0;
Ударная секция:
b1 = bam 100
b0 = bam 84
drums1 = loop 80 $ chord [
tom
$ line [qn b1, qn b0, hnr],
maracas $ line [hnr, hn b0]
]
drums2 = quieter 20 $ cabasa $ loop 120 $ en $ line [b1, b0, b0, b0, b0]
drums3 = closedHiHat $ loop 50 $ en (line [b1, loop 12 wnr])
drums = drums1 =:= drums2 =:= drums3
Уже сейчас мы можем загрузить эту партию в интерпретатор и послушать, вызвав out drums. Аккорды к
мелодии:
c7
= chord [c, e, b]
gs7 = chord [low af, c, g]
g7
= chord [low g, low bf, f]
harmony = piano $ loop 12 $ lower 1 $ bn $ line [bn c7, gs7, g7]
Мелодия:
ac = louder 5
mel1 = bn $ line [bnr, subMel, ac $ stretch (1+1/8) e, c,
subMel, enr]
where subMel = line [g, stretch 1.5 $ qn g, qn f, qn g]