1461:
688:
In addition to allowing music to be converted from one music format to another, the architecture of JFugue can be used to create programmatic tools that are capable of both performing computations on incoming music (from any format) and changing incoming music. The example below is a simple tool that
155:
The string passed to JFugue contains a series of musical instructions that JFugue parses and turns into musical events, which by default are rendered in MIDI. This format, called "Staccato," can represent all of the musical features of MIDI and is specifically designed to be easy for people to read
563:
JFugue provides an intuitive programming interface for creating beats and rhythms. The characters in the strings below each correspond to a percussion note that is played on the percussive MIDI Channel (the tenth channel); default settings are provided for common sounds (e.g., "O" for "q"), although
495:
by using a
Staccato element consisting of the letter 'm' followed by the frequency in Hertz of the desired tone. Like other notes in JFugue, this tone may be followed by a duration (such as 'w' for a whole note or 'q' for a quarter note) and note dynamics (e.g., "note on" and "note off" velocities).
156:
and write. While the default use case for JFugue is to convert
Staccato to MIDI, the architecture allows it to read and write musical information from and to a variety of formats (e.g., MIDI to MusicXML, Staccato to LilyPond). Below is an example converting a MIDI file to the Staccato format.
1194:
Log4JFugue is a utility for converting log files created by log4j into musical patterns; this allows one to listen for changes in a log file, which provides a much different experience than reading through the file
307:
The notion of
Patterns is integral to JFugue. Patterns are used to represent phrases of music that can be combined, repeated, and altered using tools that are aware of the musical content of the pattern.
1205:
JFugue is one of the few Java libraries that lets one do something interesting in as little as one or two lines of code. This distinction earned JFugue a place in the book "Groovy in Action"
1173:
JFugue provides functionality on top of Java's MIDI Transmitter and
Receiver classes to reduce the amount of code that a developer would need to write to connect to external MIDI devices.
1502:
46:
license. Brian
Eubanks has described JFugue as "useful for applications that need a quick and easy way to play music or to generate MIDI files."
1487:
38:. It was first released in 2002 by David Koelle. Version 2 was released under a proprietary license. Versions 3 and 4 were released under the
304:
JFugue 5.0 contains a set of classes that represent ideas in music theory, including intervals, scales, chords, and chord progressions.
1497:
1466:
1309:
496:
JFugue converts the microtone frequency to a sequence of MIDI Pitch Wheel and Note events to achieve the desired tone.
1275:
1239:
1350:
1221:
1257:
1492:
1482:
1383:
1181:
JFugue has been used in a number of applications, including software projects and artistic installations.
39:
31:
23:
8:
437:, which lets developers write short, expressive pieces of code like the following:
1413:
492:
430:
1387:
1313:
434:
42:
license. The current version, JFugue 5.0, was released in March 2015, under the
43:
1306:
1476:
1354:
1335:
564:
any Java Map or
Character to String may be passed to the Rhythm constructor.
55:
1367:
1202:
JFugue has been used to play music when a software build fails or succeeds.
1198:
Audovia is a database application for making music using JFugue MusicStrings
1347:
1279:
1243:
1188:
The JFugue Music NotePad provides a user interface for composing music
1225:
1191:
JFrets is an application for teaching and training guitar tablature
1261:
1293:
1380:
254:// Change to the name of a MIDI file that you own the rights to
1426:
1185:
TransProse, which turns classic novels into music, uses JFugue
1222:"License Agreement - JFugue - Java API for Music Programming"
27:
1258:"Download JFugue - JFugue - Java API for Music Programming"
1240:"Download JFugue - JFugue - Java API for Music Programming"
35:
1450:
1400:
689:
keeps track of all instruments used in a musical piece.
1503:
Free software programmed in Java (programming language)
1456:
54:Here's an example Java program that will play the
1474:
1414:http://www.pragprog.com/magazines/download/3.pdf
1325:"slideshare.net/dmkoelle/4130-musical-programs"
1176:
1412:PragPub Magazine, Issue 3, September 2009, "
1305:"The Complete Guide to JFugue," Chapter 2, "
1307:http://www.jfugue.org/4/jfugue-chapter2.pdf
1336:http://www.recordare.com/xml/software.html
1368:https://java.net/projects/nbjfuguesupport
1348:http://www.musicfromtext.com/about.html
1475:
1488:Java (programming language) libraries
558:// Whole duration note at 568.7 Hertz
1467:Free and open-source software portal
763:// Remember, you can use any Parser!
486:
26:library that allows one to program
13:
429:JFugue 5.0 makes extensive use of
14:
1514:
1444:
1459:
1432:
1419:
1406:
1393:
1373:
1366:JFugue Music NotePad project, "
1360:
491:JFugue is capable of producing
1340:
1328:
1319:
1299:
1286:
1268:
1250:
1232:
1214:
1:
1208:
1438:Koenig, Dierk, et al. (2007)
1381:https://jfrets.dev.java.net/
841:// Change to a real filename
835:"YourMidiFile.mid"
641:"...............+"
626:"````````````````"
611:"..S...S...S...S."
596:"O..oO...O..oOO.."
248:"YourMidiFile.mid"
34:without the complexities of
7:
1498:Audio programming languages
1427:https://songbase.github.io/
1292:Eubanks, Brian D. (2005), "
10:
1519:
1177:Uses in Other Applications
49:
16:Audio programming language
1054:INSTRUMENT_BYTE_TO_STRING
141:"C D E F G A B"
32:Java programming language
1453:—Official JFugue website
733:InvalidMidiDataException
691:
566:
498:
439:
310:
158:
66:org.jfugue.player.Player
60:
537:// These sound the same
531:"m440.0q A4q"
24:open source programming
1401:http://log4jfugue.org/
191:StaccatoParserListener
179:StaccatoParserListener
940:ParserListenerAdapter
1493:Free audio software
1483:Free music software
1346:About TransProse, "
552:"m568.7w"
1386:2007-07-28 at the
1312:2016-03-04 at the
1141:getInstrumentNames
1021:onInstrumentParsed
868:getInstrumentNames
700:InstrumentToolDemo
460:"I IV V"
1379:JFrets project, "
1276:"Download JFugue"
790:addParserListener
487:Advanced Features
431:fluent interfaces
355:"G F E"
331:"A B C"
203:addParserListener
40:LGPL-2.1-or-later
1510:
1469:
1464:
1463:
1462:
1439:
1436:
1430:
1423:
1417:
1410:
1404:
1397:
1391:
1377:
1371:
1364:
1358:
1344:
1338:
1334:Recordare LLC, "
1332:
1326:
1323:
1317:
1303:
1297:
1294:Wicked Cool Java
1290:
1284:
1283:
1278:. Archived from
1272:
1266:
1265:
1260:. Archived from
1254:
1248:
1247:
1242:. Archived from
1236:
1230:
1229:
1224:. Archived from
1218:
1169:
1166:
1163:
1160:
1157:
1154:
1151:
1148:
1145:
1142:
1139:
1136:
1133:
1130:
1127:
1124:
1121:
1118:
1115:
1112:
1109:
1106:
1103:
1100:
1097:
1094:
1091:
1088:
1085:
1082:
1079:
1076:
1073:
1070:
1067:
1064:
1061:
1058:
1055:
1052:
1049:
1046:
1043:
1040:
1037:
1034:
1031:
1028:
1025:
1022:
1019:
1016:
1013:
1010:
1007:
1004:
1001:
998:
995:
992:
989:
986:
983:
980:
977:
974:
971:
968:
965:
962:
959:
956:
953:
950:
947:
944:
941:
938:
935:
932:
929:
926:
923:
920:
917:
914:
911:
908:
905:
902:
899:
896:
893:
890:
887:
884:
881:
878:
875:
872:
869:
866:
863:
860:
857:
854:
851:
848:
845:
842:
839:
836:
833:
830:
827:
824:
821:
818:
815:
812:
809:
806:
803:
800:
797:
794:
791:
788:
785:
782:
779:
776:
773:
770:
767:
764:
761:
758:
755:
752:
749:
746:
743:
740:
737:
734:
731:
728:
725:
722:
719:
716:
713:
710:
707:
704:
701:
698:
695:
684:
681:
678:
675:
672:
669:
666:
663:
660:
657:
654:
651:
648:
645:
642:
639:
636:
633:
630:
627:
624:
621:
618:
615:
612:
609:
606:
603:
600:
597:
594:
591:
588:
585:
582:
579:
576:
573:
570:
559:
556:
553:
550:
547:
544:
541:
538:
535:
532:
529:
526:
523:
520:
517:
514:
511:
508:
505:
502:
493:microtonal music
482:
479:
476:
473:
470:
467:
464:
461:
458:
455:
454:ChordProgression
452:
449:
446:
443:
433:, also known as
425:
422:
419:
416:
413:
410:
407:
404:
401:
398:
395:
392:
389:
386:
383:
380:
377:
374:
371:
368:
365:
362:
359:
356:
353:
350:
347:
344:
341:
338:
335:
332:
329:
326:
323:
320:
317:
314:
300:
297:
294:
291:
288:
285:
282:
279:
276:
273:
270:
267:
264:
261:
258:
255:
252:
249:
246:
243:
240:
237:
234:
231:
228:
225:
222:
219:
216:
213:
210:
207:
204:
201:
198:
195:
192:
189:
186:
183:
180:
177:
174:
171:
168:
165:
162:
151:
148:
145:
142:
139:
136:
133:
130:
127:
124:
121:
118:
115:
112:
109:
106:
103:
100:
97:
94:
91:
88:
85:
82:
79:
76:
73:
70:
67:
64:
1518:
1517:
1513:
1512:
1511:
1509:
1508:
1507:
1473:
1472:
1465:
1460:
1458:
1447:
1442:
1437:
1433:
1424:
1420:
1411:
1407:
1398:
1394:
1388:Wayback Machine
1378:
1374:
1365:
1361:
1345:
1341:
1333:
1329:
1324:
1320:
1314:Wayback Machine
1304:
1300:
1296:". pp. 154–156.
1291:
1287:
1274:
1273:
1269:
1256:
1255:
1251:
1238:
1237:
1233:
1220:
1219:
1215:
1211:
1179:
1171:
1170:
1167:
1164:
1161:
1159:instrumentNames
1158:
1155:
1152:
1149:
1146:
1143:
1140:
1137:
1134:
1131:
1128:
1125:
1122:
1119:
1116:
1113:
1110:
1107:
1104:
1102:instrumentNames
1101:
1098:
1095:
1092:
1089:
1086:
1083:
1081:instrumentNames
1080:
1077:
1074:
1071:
1068:
1065:
1062:
1059:
1056:
1053:
1050:
1047:
1044:
1041:
1038:
1035:
1032:
1029:
1026:
1023:
1020:
1017:
1014:
1011:
1008:
1005:
1002:
999:
996:
993:
990:
987:
985:instrumentNames
984:
981:
978:
975:
972:
969:
966:
963:
961:instrumentNames
960:
957:
954:
951:
948:
945:
942:
939:
936:
933:
930:
927:
924:
921:
918:
915:
912:
909:
906:
903:
900:
897:
894:
891:
889:instrumentNames
888:
885:
882:
879:
876:
873:
870:
867:
864:
861:
858:
856:instrumentNames
855:
852:
849:
846:
843:
840:
837:
834:
831:
828:
825:
822:
819:
816:
813:
810:
807:
804:
801:
798:
795:
792:
789:
786:
783:
780:
777:
774:
771:
768:
765:
762:
759:
756:
753:
750:
747:
744:
741:
738:
735:
732:
729:
726:
723:
720:
717:
714:
711:
708:
705:
702:
699:
696:
693:
686:
685:
682:
679:
676:
673:
670:
667:
664:
661:
658:
655:
652:
649:
646:
643:
640:
637:
634:
631:
628:
625:
622:
619:
616:
613:
610:
607:
604:
601:
598:
595:
592:
589:
586:
583:
580:
577:
574:
571:
568:
561:
560:
557:
554:
551:
548:
545:
542:
539:
536:
533:
530:
527:
524:
521:
518:
515:
512:
509:
506:
503:
500:
489:
484:
483:
480:
477:
474:
471:
468:
465:
462:
459:
456:
453:
450:
447:
444:
441:
435:method chaining
427:
426:
423:
420:
417:
414:
411:
408:
405:
402:
399:
396:
393:
390:
387:
384:
381:
378:
375:
372:
369:
366:
363:
360:
357:
354:
351:
348:
345:
342:
339:
336:
333:
330:
327:
324:
321:
318:
315:
312:
302:
301:
298:
296:staccatoPattern
295:
292:
289:
286:
283:
280:
277:
274:
271:
268:
265:
262:
260:staccatoPattern
259:
256:
253:
250:
247:
244:
241:
238:
235:
232:
229:
226:
223:
220:
217:
214:
211:
208:
205:
202:
199:
196:
193:
190:
187:
184:
181:
178:
175:
172:
169:
166:
163:
160:
153:
152:
149:
146:
143:
140:
137:
134:
131:
128:
125:
122:
119:
116:
113:
110:
107:
104:
101:
98:
95:
92:
89:
86:
83:
80:
77:
74:
71:
68:
65:
62:
52:
17:
12:
11:
5:
1516:
1506:
1505:
1500:
1495:
1490:
1485:
1471:
1470:
1455:
1454:
1446:
1445:External links
1443:
1441:
1440:
1431:
1418:
1405:
1392:
1372:
1359:
1353:2015-04-04 at
1339:
1327:
1318:
1298:
1285:
1282:on 2015-04-02.
1267:
1264:on 2015-02-18.
1249:
1246:on 2007-05-10.
1231:
1228:on 2004-02-10.
1212:
1210:
1207:
1200:
1199:
1196:
1192:
1189:
1186:
1178:
1175:
1114:instrumentName
1093:instrumentName
1048:MidiDictionary
1042:instrumentName
970:InstrumentTool
934:InstrumentTool
862:instrumentTool
796:instrumentTool
778:InstrumentTool
769:instrumentTool
766:InstrumentTool
692:
567:
499:
488:
485:
440:
311:
159:
61:
51:
48:
15:
9:
6:
4:
3:
2:
1515:
1504:
1501:
1499:
1496:
1494:
1491:
1489:
1486:
1484:
1481:
1480:
1478:
1468:
1457:
1452:
1449:
1448:
1435:
1428:
1422:
1415:
1409:
1402:
1399:Log4JFugue, "
1396:
1389:
1385:
1382:
1376:
1369:
1363:
1356:
1355:archive.today
1352:
1349:
1343:
1337:
1331:
1322:
1315:
1311:
1308:
1302:
1295:
1289:
1281:
1277:
1271:
1263:
1259:
1253:
1245:
1241:
1235:
1227:
1223:
1217:
1213:
1206:
1203:
1197:
1195:line-by-line.
1193:
1190:
1187:
1184:
1183:
1182:
1174:
690:
565:
497:
494:
472:"C"
438:
436:
432:
309:
305:
157:
59:
57:
56:C-major scale
47:
45:
41:
37:
33:
29:
25:
21:
1434:
1421:
1408:
1395:
1375:
1362:
1342:
1330:
1321:
1301:
1288:
1280:the original
1270:
1262:the original
1252:
1244:the original
1234:
1226:the original
1216:
1204:
1201:
1180:
1172:
687:
562:
490:
428:
306:
303:
154:
53:
19:
18:
820:getSequence
739:IOException
233:getSequence
58:in JFugue.
1477:Categories
1451:JFugue.org
1425:Audovia, "
1209:References
1066:instrument
1030:instrument
814:MidiSystem
757:MidiParser
745:MidiParser
668:getPattern
272:getPattern
227:MidiSystem
173:MidiParser
161:MidiParser
78:HelloWorld
44:Apache-2.0
1012:@Override
994:ArrayList
478:getChords
1384:Archived
1351:Archived
1310:Archived
1087:contains
635:addLayer
620:addLayer
605:addLayer
590:addLayer
421:pattern1
373:pattern2
361:pattern1
340:pattern2
316:pattern1
266:listener
209:listener
182:listener
946:private
937:extends
910:println
466:setRoot
349:Pattern
337:Pattern
325:Pattern
313:Pattern
290:println
257:Pattern
50:Example
30:in the
1150:return
1135:String
1126:public
1039:String
1015:public
1000:String
967:public
955:String
898:System
880:String
850:String
802:parser
784:parser
748:parser
730:throws
721:String
709:static
706:public
694:public
674:repeat
662:rhythm
650:Player
581:Rhythm
572:rhythm
569:Rhythm
540:player
519:player
513:Player
504:player
501:Player
445:chords
409:player
403:Player
394:player
391:Player
379:repeat
278:System
215:parser
197:parser
164:parser
129:player
123:Player
114:player
111:Player
99:String
87:static
84:public
72:public
63:import
22:is an
20:JFugue
979:super
931:class
808:parse
697:class
442:Chord
221:parse
75:class
28:music
1153:this
1138:>
1132:<
1129:List
1027:byte
1018:void
1003:>
997:<
958:>
952:<
949:List
916:name
883:name
853:>
847:<
844:List
838:)));
829:File
724:args
715:main
712:void
656:play
546:play
525:play
415:play
251:)));
242:File
135:play
102:args
93:main
90:void
36:MIDI
1108:add
1060:get
1006:();
991:new
982:();
904:out
874:for
871:();
826:new
781:();
775:new
760:();
754:new
683:));
671:().
653:().
647:new
578:new
516:();
510:new
481:();
451:new
406:();
400:new
367:add
346:new
322:new
284:out
275:();
239:new
194:();
188:new
176:();
170:new
126:();
120:new
1479::
1144:()
1117:);
1096:))
1072:if
1069:);
973:()
919:);
799:);
644:);
584:()
555:);
534:);
475:).
463:).
424:);
388:);
376:).
358:);
334:);
299:);
212:);
144:);
1429:"
1416:"
1403:"
1390:"
1370:"
1357:"
1316:"
1168:}
1165:}
1162:;
1156:.
1147:{
1123:}
1120:}
1111:(
1105:.
1099:{
1090:(
1084:.
1078:!
1075:(
1063:(
1057:.
1051:.
1045:=
1036:{
1033:)
1024:(
1009:}
988:=
976:{
964:;
943:{
928:}
925:}
922:}
913:(
907:.
901:.
895:{
892:)
886::
877:(
865:.
859:=
832:(
823:(
817:.
811:(
805:.
793:(
787:.
772:=
751:=
742:{
736:,
727:)
718:(
703:{
680:2
677:(
665:.
659:(
638:(
632:.
629:)
623:(
617:.
614:)
608:(
602:.
599:)
593:(
587:.
575:=
549:(
543:.
528:(
522:.
507:=
469:(
457:(
448:=
418:(
412:.
397:=
385:3
382:(
370:(
364:.
352:(
343:=
328:(
319:=
293:(
287:.
281:.
269:.
263:=
245:(
236:(
230:.
224:(
218:.
206:(
200:.
185:=
167:=
150:}
147:}
138:(
132:.
117:=
108:{
105:)
96:(
81:{
69:;
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.