JFugue

JFugue to biblioteka programistyczna typu open source , która umożliwia programowanie muzyki w języku programowania Java bez złożoności MIDI . Po raz pierwszy został wydany w 2002 roku przez Davida Koelle. Wersja 2 została wydana na licencji zastrzeżonej. Wersje 3 i 4 zostały wydane na LGPL-2.1-lub nowszej . Obecna wersja, JFugue 5.0, została wydana w marcu 2015 roku pod Apache-2.0 licencja. Brian Eubanks opisał JFugue jako „przydatny w aplikacjach, które wymagają szybkiego i łatwego sposobu odtwarzania muzyki lub generowania plików MIDI”.

Przykład

Oto przykładowy program Java, który będzie odtwarzał skalę C-dur w JFugue.

 

   
       
        
    
  
 import  org.jfugue.player.Player  ;  public  class  HelloWorld  {  public  static  void  main  (  String  []  args  )  {  Player  player  =  new  Player  ();  gracz  .  odtwórz  (  "CDEFGA B"  );  }  } 

Ciąg przekazany do JFugue zawiera serię muzycznych instrukcji, które JFugue analizuje i przekształca w zdarzenia muzyczne, które domyślnie są renderowane w formacie MIDI. Ten format, nazwany „Staccato”, może reprezentować wszystkie muzyczne cechy MIDI i został specjalnie zaprojektowany, aby był łatwy do czytania i pisania. Chociaż domyślnym przypadkiem użycia JFugue jest konwersja Staccato na MIDI, architektura pozwala na odczyt i zapis informacji muzycznych zi do różnych formatów (np. MIDI do MusicXML, Staccato do LilyPond). Poniżej znajduje się przykład konwersji pliku MIDI do formatu Staccato.

    
    

  
  Parser  MidiParser  =  nowy  MidiParser  ();  Słuchacz  StaccatoParserListener  =  nowy  StaccatoParserListener  ();  parser  .  addParserListener  (  słuchacz  );  parser  .  parse  (  MidiSystem  .  getSequence  (  nowy  plik  (  "YourMidiFile.mid"  )));  // Zmień nazwę pliku MIDI, do którego masz prawa  Pattern  staccatoPattern   
 =  słuchacz  .  pobierz wzór  ();  systemu  .  na  zewnątrz  println  (  staccatoPattern  ); 

JFugue 5.0 zawiera zestaw klas reprezentujących idee w teorii muzyki, w tym interwały, skale, akordy i progresje akordów.

Pojęcie wzorców jest integralną częścią JFugue. Wzory są używane do reprezentowania fraz muzycznych, które można łączyć, powtarzać i zmieniać za pomocą narzędzi, które są świadome muzycznej zawartości wzorca.

    
    

    
 Wzór  wzór1  =  nowy  wzór  (  "AB C"  );  Pattern  pattern2  =  new  Pattern  (  "GF E"  );  wzór1  .  dodaj  (  wzór2  ).  powtórz  (  3  );  Gracz  gracz  =  nowy  gracz  ();  gracz  .  zagraj  (  wzór1  ); 

JFugue 5.0 szeroko wykorzystuje płynne interfejsy , znane również jako łączenie metod , które pozwalają programistom pisać krótkie, wyraziste fragmenty kodu, takie jak:

     Chord  []  akordy  =  nowy  ChordProgression  (  "I IV V"  ).  setRoot  (  "C"  ).  pobierz akordy  (); 

Zaawansowane funkcje

JFugue jest w stanie tworzyć muzykę mikrotonową przy użyciu elementu Staccato składającego się z litery „m”, po której następuje częstotliwość w hercach żądanego tonu. Podobnie jak inne nuty w JFugue, po tym tonie może następować czas trwania (taki jak „w” dla całej nuty lub „q” dla ćwierćnuty) i dynamika nuty (np. „nuta włączona” i „nuta wyłączona”). . JFugue konwertuje częstotliwość mikrotonów na sekwencję zdarzeń MIDI Pitch Wheel i Note, aby uzyskać żądany ton.

    
 
      Gracz  gracz  =  nowy  gracz  ();  gracz  .  odtwórz  (  "m440.0q A4q"  );  // To brzmi jak ten sam  odtwarzacz  .  odtwórz  (  "m568.7w"  );  // Nuta o całym czasie trwania przy 568,7 Hz 

JFugue zapewnia intuicyjny interfejs programowania do tworzenia bitów i rytmów. Znaki w poniższych ciągach odpowiadają nutom perkusyjnym, które są odtwarzane na perkusyjnym kanale MIDI (kanał dziesiąty); domyślne ustawienia są dostępne dla typowych dźwięków (np. „O” dla „[BASS_DRUM]q”), chociaż do konstruktora Rhythm można przekazać dowolną mapę Java lub znak na ciąg znaków.

    
  
  
  
  
  Rytm  Rytm  =  nowy  Rytm  ()  .  addLayer  (  "O..oO...O..oOO.."  )  .  addLayer  (  "..S...S...S...S."  )  .  addLayer  (  "````````````````"  )  .  addLayer  (  "............+"  );  nowy  gracz  ().  graj  (  rytm  .  getPattern  ().  powtórz  (  2  )); 

Oprócz umożliwienia konwersji muzyki z jednego formatu muzycznego na inny, architektura JFugue może służyć do tworzenia narzędzi programistycznych, które są w stanie zarówno wykonywać obliczenia na przychodzącej muzyce (z dowolnego formatu), jak i zmieniać przychodzącą muzykę. Poniższy przykład to proste narzędzie, które śledzi wszystkie instrumenty użyte w utworze muzycznym.

   
            
             
            
         Public  class  InstrumentToolDemo  {  public  static  void  main  (  String  []  args  )  rzuca  InvalidMidiDataException  ,  IOException  {  MidiParser  parser  =  nowy  MidiParser  ();  // Pamiętaj, możesz użyć dowolnego parsera!  InstrumentNarzędzie  InstrumentNarzędzie  =  nowy  InstrumentNarzędzie  ();  parser  .  addParserListener  (  instrumentTool 
          
    
           
             
             );  parser  .  parse  (  MidiSystem  .  getSequence  (  nowy  plik  (  "YourMidiFile.mid"  )));  // Zmiana na rzeczywistą nazwę pliku  List  <  String  >  instrumentNames  =  instrumentTool  .  getInstrumentNames  ();  for  (  Nazwa  ciągu  :  instrumentNames  )  {  System  .  na  zewnątrz  println  ( 
        
    


    
      
    
      
        
           
    
    
    
       imię  );  }  }  }  class  InstrumentTool  extends  ParserListenerAdapter  {  private  List  <String>  instrumentNames  ;  _  _  publiczne  narzędzie instrumentu  ()  {  super  ();  instrumentNames  =  new  ArrayList  <  String  >  ();  }  @Override  public  void  onInstrumentParsed  (  instrument  bajtowy   
           
          
            
        
    
    
       
         )  {  String  nazwa instrumentu  =  MidiDictionary  .  INSTRUMENT_BYTE_TO_STRING  .  dostać  (  instrument  );  if  (  !  instrumentNames  .  zawiera  (  instrumentName  ))  {  instrumentNames  .  dodaj  (  nazwa instrumentu  );  }  }  lista  publiczna  <  String  >  getInstrumentNames  ()  {  return  
    
 to  .  nazwy instrumentów  ;  }  } 

JFugue zapewnia funkcjonalność oprócz klas Java Transmitter i Receiver MIDI, aby zmniejszyć ilość kodu, który programista musiałby napisać, aby połączyć się z zewnętrznymi urządzeniami MIDI.

Zastosowania w innych zastosowaniach

JFugue był używany w wielu aplikacjach, w tym w projektach oprogramowania i instalacjach artystycznych.

  • TransProse, która zamienia klasyczne powieści w muzykę, używa JFugue
  • JFugue Music NotePad zapewnia interfejs użytkownika do komponowania muzyki
  • JFrets to aplikacja do nauczania i treningu tabulatury gitarowej
  • Log4JFugue to narzędzie do konwersji plików dziennika utworzonych przez log4j na wzorce muzyczne; pozwala to na nasłuchiwanie zmian w pliku dziennika, co zapewnia znacznie inne wrażenia niż czytanie pliku wiersz po wierszu.
  • Audovia to aplikacja bazodanowa do tworzenia muzyki przy użyciu JFugue MusicStrings

JFugue był używany do odtwarzania muzyki, gdy kompilacja oprogramowania kończy się niepowodzeniem lub sukcesem.

JFugue jest jedną z nielicznych bibliotek Java, która pozwala zrobić coś interesującego w zaledwie jednej lub dwóch liniach kodu. To wyróżnienie zapewniło JFugue miejsce w książce „Groovy in Action”

Linki zewnętrzne