JFugue
JFugue är ett programmeringsbibliotek med öppen källkod som låter en programmera musik i programmeringsspråket Java utan komplexiteten med MIDI . Den släpptes första gången 2002 av David Koelle. Version 2 släpptes under en egen licens. Versioner 3 och 4 släpptes under licensen LGPL-2.1 eller senare . Den nuvarande versionen, JFugue 5.0, släpptes i mars 2015, under Apache-2.0- licensen. Brian Eubanks har beskrivit JFugue som "användbar för applikationer som behöver ett snabbt och enkelt sätt att spela musik eller att generera MIDI-filer."
Exempel
Här är ett exempel på Java-program som kommer att spela C-dur skalan i JFugue.
importera org.jfugue.player.Player ; public class HelloWorld { public static void main ( String [] args ) { Player player = new Player (); spelare . spela ( "CDEFGA B" ); } }
Strängen som skickas till JFugue innehåller en serie musikinstruktioner som JFugue analyserar och förvandlar till musikhändelser, som som standard renderas i MIDI. Det här formatet, som kallas "Staccato", kan representera alla musikaliska funktioner i MIDI och är speciellt utformat för att vara lätt för människor att läsa och skriva. Medan standardanvändningsfallet för JFugue är att konvertera Staccato till MIDI, tillåter arkitekturen att den kan läsa och skriva musikinformation från och till en mängd olika format (t.ex. MIDI till MusicXML, Staccato till LilyPond). Nedan är ett exempel på att konvertera en MIDI-fil till Staccato-formatet.
MidiParser parser = ny MidiParser (); StaccatoParserListener = ny StaccatoParserListener () ; parser . addParserListener ( lyssnare ); parser . parse ( MidiSystem . getSequence ( ny fil ( " YourMidiFile.mid " ) )); // Ändra till namnet på en MIDI-fil som du äger rättigheterna till Pattern staccatoPattern = listener . getPattern (); System . ut . println ( staccatoPattern );
JFugue 5.0 innehåller en uppsättning klasser som representerar idéer inom musikteori, inklusive intervaller, skalor, ackord och ackordförlopp.
Begreppet mönster är en integrerad del av JFugue. Mönster används för att representera musikfraser som kan kombineras, upprepas och ändras med hjälp av verktyg som är medvetna om det musikaliska innehållet i mönstret.
Mönster mönster1 = nytt mönster ( "AB C" ) ; Mönster mönster2 = nytt mönster ( "GF E" ) ; mönster 1 . lägg till ( mönster2 ). upprepa ( 3 ); Spelare spelare = ny spelare (); spelare . spela ( mönster1 );
JFugue 5.0 använder sig i stor utsträckning av flytande gränssnitt , även känd som metodkedja , som låter utvecklare skriva korta, uttrycksfulla kodbitar som följande:
Ackord [] ackord = ny ChordProgression ( "I IV V" ). setRoot ( "C" ). getChords ();
Avancerade funktioner
JFugue kan producera mikrotonal musik genom att använda ett Staccato-element som består av bokstaven 'm' följt av frekvensen i Hertz för den önskade tonen. Liksom andra toner i JFugue kan denna ton följas av en varaktighet (som "w" för en hel not eller "q" för en kvartsnot) och notdynamik (t.ex. "not på" och "not av"-hastigheter) . JFugue konverterar mikrotonfrekvensen till en sekvens av MIDI Pitch Wheel och Note-händelser för att uppnå önskad ton.
Spelare spelare = ny spelare (); spelare . play ( "m440.0q A4q" ) ; // Dessa låter samma spelare . play ( "m568.7w" ); // Hela varaktigheten på 568,7 Hertz
JFugue tillhandahåller ett intuitivt programmeringsgränssnitt för att skapa beats och rytmer. Tecknen i strängarna under var och en motsvarar en slagton som spelas på den perkussiva MIDI-kanalen (den tionde kanalen); standardinställningar tillhandahålls för vanliga ljud (t.ex. "O" för "[BASS_DRUM]q"), även om vilken Java-karta eller tecken till sträng som helst kan skickas till Rhythm-konstruktorn.
Rytm rytm = ny rytm () . addLayer ( "O..oO...O..oOO.." ) . addLayer ( "..S...S...S...S." ) . addLayer ( "``````````````````" ) . addLayer ( "...............+" ); ny spelare (). spela ( rytm . getPattern (). upprepa ( 2 ));
Förutom att låta musik konverteras från ett musikformat till ett annat, kan JFugues arkitektur användas för att skapa programmatiska verktyg som både kan utföra beräkningar på inkommande musik (från vilket format som helst) och ändra inkommande musik. Exemplet nedan är ett enkelt verktyg som håller reda på alla instrument som används i ett musikstycke.
public class InstrumentToolDemo { public static void main ( String [] args ) kastar InvalidMidiDataException , IOException { MidiParser parser = new MidiParser (); // Kom ihåg att du kan använda vilken parser som helst! InstrumentTool instrumentTool = nytt InstrumentTool (); parser . addParserListener ( instrumentverktyg ); parser . parse ( MidiSystem . getSequence ( ny fil ( " YourMidiFile.mid " ) )); // Ändra till ett riktigt filnamn Lista < String > instrumentNames = instrumentTool . getInstrumentNames (); för ( Strängnamn : instrumentnamn ) { System . _ ut . println ( namn ); } } } class InstrumentTool utökar 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 . få ( instrument ); if ( ! instrumentNames . contains ( instrumentName )) { instrumentNames . add ( instrumentnamn ); } } public List < String > getInstrumentNames () { returnera detta . instrumentnamn ; } }
JFugue tillhandahåller funktionalitet utöver Javas MIDI-sändare- och mottagareklasser för att minska mängden kod som en utvecklare skulle behöva skriva för att ansluta till externa MIDI-enheter.
Används i andra applikationer
JFugue har använts i ett antal applikationer, inklusive programvaruprojekt och konstnärliga installationer.
- TransProse, som förvandlar klassiska romaner till musik, använder JFugue
- JFugue Music NotePad tillhandahåller ett användargränssnitt för att komponera musik
- JFrets är en applikation för undervisning och träning av gitarrtabulatur
- Log4JFugue är ett verktyg för att konvertera loggfiler skapade av log4j till musikmönster; detta gör att man kan lyssna efter ändringar i en loggfil, vilket ger en mycket annorlunda upplevelse än att läsa igenom filen rad för rad.
- Audovia är en databasapplikation för att skapa musik med JFugue MusicStrings
JFugue har använts för att spela musik när en mjukvarubyggnad misslyckas eller lyckas.
JFugue är ett av få Java-bibliotek som låter en göra något intressant på så lite som en eller två rader kod. Denna utmärkelse gav JFugue en plats i boken "Groovy in Action"
externa länkar
- JFugue.org — Officiell JFugue-webbplats