JFugue - это библиотека программирования с открытым исходным кодом, которая позволяет программировать музыку на языке программирования Java без сложностей MIDI . Впервые он был выпущен в 2002 году Дэвидом Келле. Текущая версия, JFugue 5.0, была выпущена в марте 2015 года. Брайан Юбэнкс описал JFugue как «полезный для приложений, которым нужен быстрый и простой способ воспроизведения музыки или создания файлов MIDI». [1] JFugue - бесплатное программное обеспечение, выпущенное под лицензией Apache . [2]
Пример [ править ]
Вот пример Java-программы, которая будет воспроизводить до-мажорную гамму в JFugue.
import org.jfugue.player.Player ;публичный класс HelloWorld { публичный статический void main ( String [] args ) { Player player = new Player (); игрок . играть ( "CDEFGA B" ); } }
Строка, переданная JFugue, содержит серию музыкальных инструкций, которые JFugue анализирует и превращает в музыкальные события, которые по умолчанию отображаются в MIDI. Этот формат, называемый «стаккато», может представлять все музыкальные особенности MIDI [3] и специально разработан, чтобы люди могли легко читать и писать. [4] Хотя по умолчанию JFugue используется для преобразования Staccato в MIDI, архитектура позволяет ему читать и записывать музыкальную информацию из различных форматов (например, MIDI в MusicXML, [5] Staccato в LilyPond). Ниже приведен пример преобразования файла MIDI в формат Staccato.
Парсер MidiParser = новый MidiParser (); StaccatoParserListener listener = новый StaccatoParserListener (); парсер . addParserListener ( слушатель ); парсер . parse ( MidiSystem . getSequence ( новый файл ( "YourMidiFile.mid" ))); // Измените имя MIDI-файла, права на который у вас есть на Pattern staccatoPattern = listener . getPattern (); Система . из. println ( staccatoPattern );
JFugue 5.0 содержит набор классов, которые представляют идеи теории музыки, включая интервалы, гаммы, аккорды и последовательности аккордов.
Понятие паттернов является неотъемлемой частью JFugue. Паттерны используются для представления музыкальных фраз, которые можно комбинировать, повторять и изменять с помощью инструментов, которые осведомлены о музыкальном содержании паттерна.
Паттерн pattern1 = новый паттерн ( «AB C» ); Шаблон pattern2 = новый шаблон ( "GF E" ); шаблон1 . добавить ( шаблон2 ). повторить ( 3 ); Player player = новый игрок (); игрок . играть ( шаблон1 );
JFugue 5.0 широко использует плавные интерфейсы , также известные как цепочки методов , которые позволяют разработчикам писать короткие выразительные фрагменты кода, подобные следующему:
Хорда [] аккорды = новый ChordProgression ( "I IV V" ). setRoot ( "C" ). getChords ();
Расширенные функции [ править ]
JFugue может воспроизводить микротональную музыку , используя элемент стаккато, состоящий из буквы «м», за которой следует частота желаемого тона в герцах. Как и другие ноты в JFugue, за этим тоном может следовать длительность (например, 'w' для всей ноты или 'q' для четвертой ноты) и динамика ноты (например, скорости нажатия «note on» и «note off») . JFugue преобразует частоту микротона в последовательность событий MIDI Pitch Wheel и Note для достижения желаемого тона.
Player player = новый игрок (); игрок . play ( "m440.0q A4q" ); // Звучит один и тот же игрок . play ( "m568.7w" ); // Нота всей продолжительности на 568,7 Гц
JFugue предоставляет интуитивно понятный интерфейс программирования для создания битов и ритмов. Символы в нижних струнах соответствуют ноте перкуссии, которая воспроизводится на перкуссионном MIDI-канале (десятый канал); для обычных звуков предусмотрены настройки по умолчанию (например, «O» вместо «[BASS_DRUM] q»), хотя в конструктор Rhythm можно передать любую карту Java или символ в строку.
Ритм- ритм = новый ритм () . addLayer ( "O..oO ... O..oOO .." ) . addLayer ( "..S ... S ... S ... S." ) . addLayer ( "` `` `` `` `` `` `` `" ) . addLayer ( "............... +" ); новый игрок (). играть ( ритм . getPattern (). repeat ( 2 ));
Помимо возможности преобразования музыки из одного музыкального формата в другой, архитектура JFugue может использоваться для создания программных инструментов, способных как выполнять вычисления с входящей музыкой (из любого формата), так и изменять входящую музыку. Пример ниже представляет собой простой инструмент, который отслеживает все инструменты, используемые в музыкальном произведении.
открытый класс InstrumentToolDemo { public static void main ( String [] args ) выбрасывает InvalidMidiDataException , IOException { MidiParser parser = new MidiParser (); // Помните, вы можете использовать любой парсер! InstrumentTool instrumentTool = новый InstrumentTool (); парсер . addParserListener ( instrumentTool ); парсер . синтаксический анализ ( MidiSystem .getSequence ( новый файл ( "YourMidiFile.mid" ))); // Меняем на настоящее имя файла Список < String > instrumentNames = instrumentTool . getInstrumentNames (); for ( Строковое имя : instrumentNames ) { System . из . println ( имя ); } } }class InstrumentTool расширяет ParserListenerAdapter { частный список < String > instrumentNames ; общедоступный Инструмент Инструмент () { супер (); instrumentNames = новый ArrayList < String > (); } @Override public void onInstrumentParsed ( байтовый инструмент ) { String instrumentName = MidiDictionary . INSTRUMENT_BYTE_TO_STRING . получить ( инструмент ); if ( ! instrumentNames . содержит (имя инструмента )) {имя инструмента . добавить (имя инструмента ); } } public List < String > getInstrumentNames () { вернуть это . instrumentNames ; } }
JFugue предоставляет функциональные возможности поверх классов Java Transmitter и Receiver, чтобы уменьшить объем кода, который разработчику потребуется написать для подключения к внешним MIDI-устройствам.
Использование в других приложениях [ править ]
JFugue использовался во многих приложениях, включая программные проекты и художественные инсталляции.
- TransProse, превращающая классические романы в музыку, использует JFugue [6]
- JFugue Music NotePad предоставляет пользовательский интерфейс для создания музыки [7]
- JFrets - приложение для обучения игре на гитаре табулатуре [8]
- Log4JFugue - это утилита для преобразования файлов журнала, созданных log4j, в музыкальные паттерны; это позволяет отслеживать изменения в файле журнала, что обеспечивает совершенно иной опыт, чем построчное чтение файла. [9] [10]
- Audovia - это приложение базы данных для создания музыки с использованием JFugue MusicStrings [11]
JFugue использовался для воспроизведения музыки в случае сбоя или успеха сборки программного обеспечения.
JFugue - одна из немногих библиотек Java, которая позволяет делать что-то интересное, используя всего одну или две строчки кода. Эта награда принесла JFugue место в книге "Groovy in Action" [12].
Ссылки [ править ]
- ^ Юбэнкс, Brian D. (2005), " Злая Прохладный Java ". С. 154–156.
- ^ http://www.jfugue.org/download.html
- ^ "Полное руководство по 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 "
- ^ Audovia, " https://songbase.github.io/ "
- ^ Кениг, Дирк и др. (2007)
Внешние ссылки [ править ]
- JFugue.org - официальный веб-сайт JFugue.