JFugue
JFugue — это библиотека программирования с открытым исходным кодом , которая позволяет программировать музыку на языке программирования Java без сложностей MIDI . Впервые он был выпущен в 2002 году Дэвидом Келле. Версия 2 была выпущена под частной лицензией. [1] Версии 3 и 4 были выпущены под лицензией LGPL-2.1 или более поздней версии . [2] [3] Текущая версия JFugue 5.0 была выпущена в марте 2015 года под лицензией Apache-2.0 . [4] Брайан Юбэнкс охарактеризовал JFugue как «полезный для приложений, которым нужен быстрый и простой способ воспроизведения музыки или создания MIDI-файлов». [5]
Пример
[ редактировать ]Вот пример Java-программы, которая будет воспроизводить гамму до мажор в JFugue.
import org.jfugue.player.Player;
public class HelloWorld {
public static void main(String[] args) {
Player player = new Player();
player.play("C D E F G A B");
}
}
Строка, передаваемая в JFugue, содержит серию музыкальных инструкций, которые JFugue анализирует и превращает в музыкальные события, которые по умолчанию визуализируются в MIDI. Этот формат, называемый «Staccato», может отображать все музыкальные особенности MIDI. [6] и специально разработан для того, чтобы людям было легко читать и писать. [7] Хотя стандартным вариантом использования JFugue является преобразование Staccato в MIDI, архитектура позволяет ему считывать и записывать музыкальную информацию из различных форматов (например, MIDI в MusicXML, [8] Стаккато к LilyPond). Ниже приведен пример преобразования MIDI-файла в формат Staccato.
MidiParser parser = new MidiParser();
StaccatoParserListener listener = new StaccatoParserListener();
parser.addParserListener(listener);
parser.parse(MidiSystem.getSequence(new File("YourMidiFile.mid"))); // Change to the name of a MIDI file that you own the rights to
Pattern staccatoPattern = listener.getPattern();
System.out.println(staccatoPattern);
JFugue 5.0 содержит набор классов, которые представляют идеи теории музыки, включая интервалы, гаммы, аккорды и последовательности аккордов.
Понятие шаблонов является неотъемлемой частью JFugue. Паттерны используются для представления музыкальных фраз, которые можно комбинировать, повторять и изменять с помощью инструментов, учитывающих музыкальное содержание паттерна.
Pattern pattern1 = new Pattern("A B C");
Pattern pattern2 = new Pattern("G F E");
pattern1.add(pattern2).repeat(3);
Player player = new Player();
player.play(pattern1);
JFugue 5.0 широко использует гибкие интерфейсы , также известные как цепочки методов , которые позволяют разработчикам писать короткие, выразительные фрагменты кода, подобные следующим:
Chord[] chords = new ChordProgression("I IV V").setRoot("C").getChords();
Расширенные функции
[ редактировать ]JFugue способен создавать микротональную музыку , используя элемент Staccato, состоящий из буквы «m», за которой следует частота желаемого тона в герцах. Как и другие ноты в JFugue, за этим тоном может следовать длительность (например, «w» для целой ноты или «q» для четвертной ноты) и динамика ноты (например, скорость «включения ноты» и «выключения ноты»). . JFugue преобразует частоту микротона в последовательность событий MIDI Pitch Wheel и Note для достижения желаемого тона.
Player player = new Player();
player.play("m440.0q A4q"); // These sound the same
player.play("m568.7w"); // Whole duration note at 568.7 Hertz
JFugue предоставляет интуитивно понятный интерфейс программирования для создания битов и ритмов. Символы в строках ниже соответствуют перкуссионной ноте, воспроизводимой на перкуссионном MIDI-канале (десятый канал); настройки по умолчанию предоставляются для общих звуков (например, «O» для «[BASS_DRUM]q»), хотя любая карта Java или символ в строку могут быть переданы конструктору Rhythm.
Rhythm rhythm = new Rhythm()
.addLayer("O..oO...O..oOO..")
.addLayer("..S...S...S...S.")
.addLayer("````````````````")
.addLayer("...............+");
new Player().play(rhythm.getPattern().repeat(2));
Помимо возможности конвертировать музыку из одного музыкального формата в другой, архитектура JFugue может использоваться для создания программных инструментов, способных как выполнять вычисления над входящей музыкой (из любого формата), так и изменять входящую музыку. Пример ниже представляет собой простой инструмент, который отслеживает все инструменты, используемые в музыкальном произведении.
public class InstrumentToolDemo {
public static void main(String[] args) throws InvalidMidiDataException, IOException {
MidiParser parser = new MidiParser(); // Remember, you can use any Parser!
InstrumentTool instrumentTool = new InstrumentTool();
parser.addParserListener(instrumentTool);
parser.parse(MidiSystem.getSequence(new File("YourMidiFile.mid"))); // Change to a real filename
List<String> instrumentNames = instrumentTool.getInstrumentNames();
for (String name : instrumentNames) {
System.out.println(name);
}
}
}
class InstrumentTool extends ParserListenerAdapter {
private List<String> instrumentNames;
public InstrumentTool() {
super();
instrumentNames = new ArrayList<String>();
}
@Override
public void onInstrumentParsed(byte instrument) {
String instrumentName = MidiDictionary.INSTRUMENT_BYTE_TO_STRING.get(instrument);
if (!instrumentNames.contains(instrumentName)) {
instrumentNames.add(instrumentName);
}
}
public List<String> getInstrumentNames() {
return this.instrumentNames;
}
}
JFugue предоставляет функциональные возможности поверх классов Java MIDI Transmitter и Receiver, чтобы уменьшить объем кода, который разработчику необходимо будет написать для подключения к внешним MIDI-устройствам.
Использование в других приложениях
[ редактировать ]JFugue использовался во многих приложениях, включая программные проекты и художественные инсталляции.
- TransProse, превращающая классические романы в музыку, использует JFugue. [9]
- JFugue Music NotePad предоставляет пользовательский интерфейс для создания музыки. [10]
- JFrets - приложение для обучения и тренировки табулатуры на гитаре. [11]
- Log4JFugue — утилита для преобразования файлов журналов, созданных log4j, в музыкальные паттерны; это позволяет прослушивать изменения в файле журнала, что существенно отличается от чтения файла построчно. [12] [13]
- Audovia — это приложение базы данных для создания музыки с использованием JFugue MusicStrings. [14]
JFugue использовался для воспроизведения музыки в случае сбоя или успеха сборки программного обеспечения.
JFugue — одна из немногих библиотек Java, которая позволяет сделать что-то интересное всего за одну-две строки кода. Эта награда принесла JFugue место в книге «Groovy in Action». [15]
Ссылки
[ редактировать ]- ^ «Лицензионное соглашение — JFugue — Java API для программирования музыки» . Архивировано из оригинала 10 февраля 2004 г.
- ^ «Загрузить JFugue — JFugue — Java API для программирования музыки» . Архивировано из оригинала 10 мая 2007 г.
- ^ «Загрузить JFugue — JFugue — Java API для программирования музыки» . Архивировано из оригинала 18 февраля 2015 г.
- ^ «Загрузить JFugue» . Архивировано из оригинала 02 апреля 2015 г.
- ^ Юбэнкс, Брайан Д. (2005), « Злая крутая Java ». стр. 154–156.
- ^ «Полное руководство по JFugue», Глава 2, « http://www.jfugue.org/4/jfugue-chapter2.pdf. Архивировано 4 марта 2016 г. в Wayback Machine »
- ^ "slideshare.net/dmkoelle/4130-musical-programs"
- ^ Recordare LLC, " http://www.recordare.com/xml/software.html
- ^ О TransProse, « http://www.musicfromtext.com/about.html. Архивировано 4 апреля 2015 г. на archive.today ».
- ^ Проект JFugue Music NotePad, https://java.net/projects/nbjfuguesupport "
- ^ Проект JFrets, https://jfrets.dev.java.net/. Архивировано 28 июля 2007 г. в Wayback Machine .
- ^ Log4JFugue, " http://log4jfugue.org/ "
- ^ Журнал PragPub, выпуск 3, сентябрь 2009 г., « http://www.pragprog.com/magazines/download/3.pdf »
- ^ Аудовия https://songbase.github.io/ ,
- ^ Кениг, Дирк и др. (2007)
Внешние ссылки
[ редактировать ]- JFugue.org — Официальный сайт JFugue.