Руководство для начинающих по JFugue, часть II: аккорды и последовательности аккордов

Введение В этом руководстве мы узнаем, как создавать и управлять аккордами и последовательностями аккордов, как использовать методы setKey (), distribute () и allChordsAs () класса ChordProgression, а также как воспроизводить различные паттерны одновременно с использованием голосов в JFugue. . Это вторая часть серии учебных пособий, состоящей из трех частей, в которой мы пытаемся воссоздать вступление джазовой версии Sunday Morning by Maroon 5 [https://www.youtube.com/watch?v=lpt_Y5uLm6Q ]. Но шаги, указанные в

Вступление

В этом руководстве мы узнаем, как создавать и управлять аккордами и последовательностями аккордов, как использовать setKey() , distribute() и allChordsAs() ChordProgression и как воспроизводить различные паттерны одновременно с использованием голосов в JFugue.

Это вторая часть учебной серии из трех частей, в которой мы пытаемся воссоздать вступление джазовой версии Sunday Morning by Maroon 5 . Но шаги, описанные в статьях, легко применимы и к любому другому процессу создания песни.

В предыдущей части серии мы рассмотрели основы библиотеки JFugue, научившись использовать ноты, октавы, длительность, темп, инструменты и паттерны. В конце первой статьи мы создали вступительный вокал без каких-либо аккордов. К концу этого урока в нашей песне будут готовые аккорды, которые будут играть вместе с вокалом.

В заключительной части нашей серии руководств мы узнаем о ритмах в JFugue. Это позволит нам строить и воспроизводить ритмы поверх предыдущих частей. Мы также рассмотрим, как сохранить нашу музыку в файл MIDI с помощью JFugue, а также как читать музыку из файла MIDI с помощью библиотеки JFugue.

Если вы хотите ознакомиться с другими частями серии, вот ссылки:

Аккорды и аккордовые последовательности в JFugue

Что касается аккордов, JFugue предлагает несколько способов их создания. Во-первых, давайте посмотрим, как создавать свои собственные аккорды, комбинируя ноты одну за другой.

Мы создадим аккорд D-Minor7 , который также будет первым аккордом нашей песни. Этот аккорд состоит из четырех (4) нот, которые мы можем комбинировать и играть одновременно:

 player.play("D+F+A+C"); 

Пока это работает хорошо, но создание каждого аккорда по ноте может стать очень утомительной работой. В этой песне у нас есть три (3) аккорда (Dm, G, C) с 3 инверсиями (DMin9, GMaj13, CMaj9) .

Нам не обязательно создавать все аккорды вручную. Вы можете создавать свои аккорды с помощью ChordProgression если вы знакомы с теорией музыки. Для этого мы импортируем и ChordProgression экземпляр класса ChordProgression с последовательностями аккордов наших аккордов:

 import org.jfugue.theory.ChordProgression; 
 
 ChordProgression cp = new ChordProgression("ii VI"); 

Мы также можем установить тональность аккордовой последовательности, привязав к ней метод setKey()

 ChordProgression cp = new ChordProgression("ii VI") 
 .setKey("C"); 

Мы можем играть аккорды так же, как и с паттернами:

 player.play(cp); 

ChordProgression реализует PatternProducer , который, как следует из названия, создает шаблоны. И когда мы передаем ChordProgression в метод Player.play() , метод запрашивает шаблон у ChordProgression и воспроизводит его так же, как и с шаблонами.

Еще один эффективный метод ChordProgression - distribute() . Этот метод позволяет нам распространять музыкальную функцию вместе с аккордами внутри объекта ChordProgression

На данный момент наши аккорды в cp - это Dm , G и C.

Давайте изменим все аккорды на 7-е с помощью distribute() :

 ChordProgression cp = new ChordProgression("ii VI") 
 .setKey("C") 
 .distribute("7"); 
 player.play(cp); 

Еще одно существенное изменение - установить длительность каждого аккорда и добавить паузу между аккордами. Используя allChordsAs() , мы можем выбрать каждый аккорд в cp , набрав $ с порядковым номером аккорда:

 ChordProgression cp = new ChordProgression("ii VI") 
 .setKey("C") 
 .distribute("7") 
 .allChordsAs("$0hqit Ri $1hqi Ri $2wh Rht"); 

Мы можем рассматривать $0 , $1 и $2 как заполнители, которые относятся к ii , V и I соответственно. Любые модификации, которые мы применяем к ним, применяются к аккордам в cp . Играйте, чтобы увидеть разницу.

Еще одна интересная особенность ChordProgression заключается в том, что мы можем легко преобразовать его в Pattern и использовать специальные методы Pattern для его дальнейшего изменения:

 Pattern cpPattern = cp.getPattern(); 
 System.out.print(cpPattern); 
 player.play(cpPattern.setTempo(180).setInstrument("DRAWBAR_ORGAN").repeat(4)); 

С помощью getPattern() мы преобразуем cp в Pattern , затем печатаем текущие аккорды в cp чтобы мы могли видеть заполняемые аккорды. Наконец, мы устанавливаем темп, инструмент и значение повтора. .

Аккорды, которые играет JFugue, выглядят так:

 D4MIN7hqit Ri G4MAJ7hqi Ri C4MAJ7wh Rht 

ChordProgression предоставляет ряд возможностей, но, как упоминалось ранее, для этого требуются некоторые знания теории музыки. Если вы плохо разбираетесь в теории музыки, но имеете базовые знания об аккордах, вы можете удобно использовать аккорды внутри паттернов.

Чтобы полностью раскрыть потенциал стаккато, которое гордится своей удобочитаемостью, мы запишем аккорды прямо в паттерн:

 Pattern mainChords = new Pattern("T180 D4Min9hqit Ri G4Maj13hqi Ri C4Maj9wh Rht"); 

Давайте разберемся с D4Min9hqit . «D» - это название аккорда, за которым следует «4» , обозначающее октаву, за которым следует «Min9», обозначающее «Minor 9th» , и за которым следует «hqit», которые представляют собой измерения длительности.

Мы можем воспользоваться преимуществом Pattern и добавить к нему еще несколько аккордов, связав метод .add()

 mainChords.add("D4Minhqit Ri 4Majhqi Ri C4Majwh Rht"); 

Обратите внимание, что мы не указали темп во второй части паттерна, поскольку однократной установки темпа достаточно, чтобы применить его ко всем следующим музыкальным событиям.

В реальном мире не каждый инструмент в песне играет в последовательном порядке. Теперь, когда наши аккорды воспроизводятся правильно, мы хотели бы добавить некоторые другие паттерны, чтобы играть вместе с ними, а не добавлять непосредственно к ним, как мы это делали с add() .

JFugue предоставляет специальный токен под названием «Голос» . Большинство песен состоит из слоев узоров. Например, фортепиано продолжает играть аккорды, в то время как продолжается барабанная дробь и вокал поет им. В JFugue жетон «Голос» представляет каждого из этих отдельных исполнителей / певцов, что позволяет им играть вместе, играть одновременно.

Мы можем использовать до 16 различных голосов, что является суммой стандартных MIDI-каналов. V15 могут варьироваться от V0 до V15. Мы можем заполнить голоса любыми инструментами, которые захотим. Кроме 10-го канала или V9 . Этот специальный голосовой слой по умолчанию зарезервирован для перкуссии и может иметь различные наборы ударных инструментов и слоев в V9 (подробнее об этом позже).

Давайте попробуем воссоздать вступление к ' Sunday Morning' (джазовая версия) , добавив новые голоса к нашим текущим mainChords :

 Pattern mainChords = new Pattern("T180 V0 D4Min9hqit Ri G3Maj13hqi Ri C4Maj9wh Rh"); 
 mainChords.add("D4Minhqit Ri G4Majhqi Ri C4Majwh Rht"); 
 
 Pattern pianoTouch = new Pattern("T180 V1 Rw | Rw | Rhi | G4qi G3s A3is CMajis ri"); 
 pianoTouch.add("Rw | Rw | Rhi | G4s C5wa100d0"); 
 
 player.play(mainChords, pianoTouch); 

mainChords такой же, как и раньше. Мы добавили новый паттерн pianoTouch и установили его на второй голосовой канал V1 . Поскольку эти ноты появлялись в конце каждой петли аккордов, нам приходилось удерживать их с помощью Rw чтобы играть точно в нужное время. Возможно, вы заметили, что последняя нота pianoTouch имеет этот странный токен a100d0 приклеенный ко всей ноте до . Этот жетон представляет скорость атаки и скорость затухания ноты.

Мы установили значение атаки на 100 , чтобы наша нота звучала немного громче, чем другие, и установили значение затухания на 0 , что привело к очень быстрому уменьшению громкости нашей ноты до нуля. Вы можете установить любой из них и ни один из них по своему усмотрению на любое значение от 0 до 127 .

Партия, которую мы сочинили для pianoTouch играет в оригинальной песне только один раз. Итак, мы хотим убедиться, что пока mainChords воспроизводится с повторением, pianoTouch не повторяется.

Мы можем создать новый паттерн introOnce чтобы сгруппировать другие наши паттерны. Таким образом, мы можем организовать, что играть один раз, а что повторять. Замените строку, которая вызывает play() этими двумя строками:

 Pattern introOnce = new Pattern(mainChords, pianoTouch); 
 player.play(introOnce, mainChords.repeat(2)); 

Это должно сыграть на pianoTouch один раз, а затем повторить mainChords 2 раза.

Наша песня идет отлично! Пришло время помочь танцорам, мы воспользуемся Rhythm », чтобы направлять их в следующей части серии!

Заключение

В этом руководстве мы узнали, как использовать аккорды и последовательности аккордов в библиотеке JFugue. Мы также рассмотрели setKey() , distribute() и allChordsAs() ChordProgression , как воспроизводить разные паттерны одновременно с использованием голосов и как применять свойства атаки / затухания к нотам или аккордам.

В следующей и заключительной части серии статей мы узнаем, как создавать и использовать ритмы в JFugue. Таким образом мы сможем завершить нашу песню. Мы также расскажем, как сохранить нашу песню в формате MIDI-файла с помощью JFugue, а также как импортировать MIDI-файл и прочитать содержимое в формате Staccato.

Вы можете продолжить чтение следующей части: Руководство для начинающих JFugue Часть III: Ритмы, чтение и запись в MIDI .

Или, если вам нужны более подробные сведения об основах JFugue, вы можете ознакомиться с первой статьей, чтобы освежить свои знания: Руководство для начинающих по JFugue, часть I: примечания, продолжительность, шаблоны .

comments powered by Disqus