Jump to content

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]

  1. ^ «Лицензионное соглашение — JFugue — Java API для программирования музыки» . Архивировано из оригинала 10 февраля 2004 г.
  2. ^ «Загрузить JFugue — JFugue — Java API для программирования музыки» . Архивировано из оригинала 10 мая 2007 г.
  3. ^ «Загрузить JFugue — JFugue — Java API для программирования музыки» . Архивировано из оригинала 18 февраля 2015 г.
  4. ^ «Загрузить JFugue» . Архивировано из оригинала 02 апреля 2015 г.
  5. ^ Юбэнкс, Брайан Д. (2005), « Злая крутая Java ». стр. 154–156.
  6. ^ «Полное руководство по JFugue», Глава 2, « http://www.jfugue.org/4/jfugue-chapter2.pdf. Архивировано 4 марта 2016 г. в Wayback Machine »
  7. ^ "slideshare.net/dmkoelle/4130-musical-programs"
  8. ^ Recordare LLC, " http://www.recordare.com/xml/software.html
  9. ^ О TransProse, « http://www.musicfromtext.com/about.html. Архивировано 4 апреля 2015 г. на archive.today ».
  10. ^ Проект JFugue Music NotePad, https://java.net/projects/nbjfuguesupport "
  11. ^ Проект JFrets, https://jfrets.dev.java.net/. Архивировано 28 июля 2007 г. в Wayback Machine .
  12. ^ Log4JFugue, " http://log4jfugue.org/ "
  13. ^ Журнал PragPub, выпуск 3, сентябрь 2009 г., « http://www.pragprog.com/magazines/download/3.pdf »
  14. ^ Аудовия https://songbase.github.io/ ,
  15. ^ Кениг, Дирк и др. (2007)
[ редактировать ]
  • JFugue.org — Официальный сайт JFugue.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 76cf0e1d94f09c5fef3d30c500a7fe04__1690025160
URL1:https://arc.ask3.ru/arc/aa/76/04/76cf0e1d94f09c5fef3d30c500a7fe04.html
Заголовок, (Title) документа по адресу, URL1:
JFugue - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)