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  .  (  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