Не перестаю получать кайф от программирования midi синтезатора на своем компьюетере c с помощью java midi api. В прошлых постах раз я писал о том, что учу сольфеджио путем кодирования новых знаний в коде (тынц, пумц, бамц). А недавно я попал на видео 4 chords и решил закодить их. Родился новый класс, который я назвал Арпеджиатор. Сейчас там два паттерна по проще и один - как компиляция двух предыдущих.
public class FourChords { public static void main(String[] args) { Синтезатор синтезатор = new Синтезатор(new RealMidiChannelFactory()); Шаблон r = Арпеджиатор.get3(E5, H4, Cis5, A4); // Шаблон r = Арпеджиатор.get3(G5, D5, E5, C5); синтезатор.звучать(r.повтор(10)); } }Прикольно, что не все комбинации аккордов звучат (большинство режет слух). А вот описание шаблонов
public class Арпеджиатор { public static Шаблон get(List<Нота> ноты) { Нота n1 = ноты.get(0); Нота n2 = ноты.get(1); Нота n3 = ноты.get(2); Звук звук1 = Доля.четверть(n2, n3); Шаблон l1 = Шаблон.подряд(звук1, звук1, звук1, звук1); Звук звук2 = Доля.четверть(n1); Шаблон l2 = Шаблон.подряд(Пауза.восьмая(), звук2, звук2, звук2, звук2); Шаблон l3 = l1.вместе(l2); return l3.частьДо(1/l3.длинна()); } public static Шаблон get2(Нота нота) { Нота нота2 = нота.ниже(Интервал.ЧистаяОктава); Звук звук1 = Доля.половина(нота, нота2); return Шаблон.подряд(звук1, Пауза.четверть(), звук1.увеличить(0.5)); } public static Шаблон get2_2(Нота нота) { Нота нота2 = нота.ниже(Интервал.ЧистаяОктава); Звук звук1 = Доля.восьмая(нота); Шаблон s1 = Шаблон.подряд(звук1, звук1, Пауза.восьмая(), звук1, звук1, звук1); Звук звук2 = Доля.восьмая(нота2).увеличить(3); Звук звук3 = Доля.восьмая(нота2).увеличить(5); Шаблон s2 = Шаблон.подряд(звук2, звук3); return s1.вместе(s2); } public static Шаблон get3(Нота n1, Нота n2, Нота n3, Нота n4) { Шаблон l1 = Арпеджиатор.get(Трезвучие.Мажорное.get(n1)); Шаблон l2 = Арпеджиатор.get(Трезвучие.Мажорное.get(n2)); Шаблон l3 = Арпеджиатор.get(Трезвучие.Минорное.get(n3)); Шаблон l4 = Арпеджиатор.get(Трезвучие.Мажорное.get(n4)); Шаблон s1 = l1.потом(l2, l3, l4); Шаблон r1 = Арпеджиатор.get2(n1.ниже(Интервал.ЧистаяОктава)); Шаблон r2 = Арпеджиатор.get2(n2.ниже(Интервал.ЧистаяОктава)); Шаблон r3 = Арпеджиатор.get2(n3.ниже(Интервал.ЧистаяОктава)); Шаблон r4 = Арпеджиатор.get2(n4.ниже(Интервал.ЧистаяОктава)); Шаблон s2 = r1.потом(r2, r3, r4); return s1.вместе(s2); } }Как-то так. Вот исходники. Проект Maven.
сасаiте лалкi
ОтветитьУдалитьазаза
ОтветитьУдалить