1:- module(genmidi, [gm/1, gm/4, perc/2]).

General MIDI instrument assignments

Instruments are named by terms, some of which are of the form Class/N, where N is an integer and Class is an atom representing a class of instruments, for example piano, epiano, guitar, sax etc. These can be discovered using gm/1. */

 gm(-I:instr, -P:byte, -MSB:byte, -LSB:byte) is nondet
 gm(-I:instr) is nondet
True when I is a recognised instrument with General MIDI programme number P and bank most and least significant bytes MSB and LSB.
   13gm( Instr) :- gm(Instr,_,_,_).
   14gm( Instr, P0, 0, LSB) :- primo(Instr,P1,LSB), succ(P0,P1).
   15gm( kit/Type/1, P0, 0, 120) :- seco(Type,P1), succ(P0,P1).
   16gm( kit/Type/2, P0, 1, 0) :- seco(Type,P1), succ(P0,P1).
   17
   18primo( piano/1,  1, 0). % acoustic grand
   19primo( piano/2,  1, 8).
   20primo( piano/3,  1, 16).
   21
   22primo( piano/4,  2, 0). % bright acoustic grand
   23primo( piano/5,  2, 8).
   24
   25primo( piano/6,  3, 0). % electric grand
   26primo( piano/7,  3, 8).
   27
   28primo( piano/8,  4, 0). % honky-tonk
   29primo( piano/9,  4, 8).
   30
   31primo( epiano/1,    5, 0).
   32primo( epiano/2,    5, 8).
   33primo( epiano/3,    5, 16).
   34primo( epiano/4,    5, 24).
   35primo( epiano/5,    6, 0).
   36primo( epiano/6,    6, 8).
   37primo( epiano/7,    6, 16).
   38
   39primo( harpsichord/1,  7, 0).
   40primo( harpsichord/2,  7, 8).
   41primo( harpsichord/3,  7, 16).
   42primo( harpsichord/4,  7, 24).
   43primo( clavichord,     8, 0). % or clavinet
   44primo( celesta,        9, 0).
   45
   46primo( glockenspiel,	10, 0).
   47primo( music_box,   	11, 0).
   48primo( vibraphone/1,	12, 0).
   49primo( vibraphone/2,	12, 8).
   50primo( marimba/1,	   13, 0).
   51primo( marimba/2,	   13, 8).
   52primo( xylophone,	   14, 0).
   53
   54primo( bell/tubular, 15, 0).
   55primo( bell/church,  15, 8).
   56primo( bell/carillon, 15, 9).
   57primo( santur, 16, 0).
   58
   59primo( organ/1, 17, 0).
   60primo( organ/2, 17, 8).
   61primo( organ/3, 17, 16).
   62primo( organ/4, 17, 32).
   63primo( organ/5, 18, 0).
   64primo( organ/6, 18, 8).
   65primo( organ/7, 18, 32).
   66primo( organ/8, 19, 0).
   67primo( organ/church/1, 20, 0).
   68primo( organ/church/2, 20, 8).
   69primo( organ/church/3, 20, 16).
   70primo( organ/reed, 21, 0).
   71
   72primo( accordion,   22, 0).
   73primo( harmonica,   22, 0).
   74primo( bandeon,   22, 0).
   75
   76primo( ukulele, 25, 8).
   77primo( guitar/nylon1, 25, 0).
   78primo( guitar/nylon2, 25, 16).
   79primo( guitar/nylon3, 25, 32).
   80primo( guitar/steel,   26, 0).
   81primo( mandolin,       26, 16).
   82primo( guitar/jazz,    27, 0).
   83primo( guitar/clean,   28, 0).
   84primo( guitar/muted,   29, 0).
   85primo( guitar/funk,    29, 8).
   86primo( guitar/overdrive, 30, 0).
   87primo( guitar/distortion, 31, 0).
   88primo( guitar/feedback, 31, 8).
   89primo( guitar/harmonics, 32, 0).
   90primo( guitar/feedback2, 32, 8).
   91
   92primo( bass/acoustic, 33, 0).
   93primo( bass/fingered, 34, 0).
   94primo( bass/picked,   35, 0).
   95primo( bass/fretless, 36, 0).
   96primo( bass/slap1,    37, 0).
   97primo( bass/slap2,    38, 0).
   98primo( bass/synth1,   39, 0).
   99primo( bass/synth2,   39, 1).
  100primo( bass/synth3,   39, 8).
  101primo( bass/synth4,   40, 0).
  102primo( bass/synth5,   40, 8).
  103primo( bass/rubber,   40, 16).
  104
  105primo( violin, 41, 0).
  106primo( viola, 42, 0).
  107primo( cello, 43, 0).
  108primo( contrabass, 44, 0).
  109primo( strings/tremolo,     45, 0).
  110primo( strings/pizzicato,     46, 0).
  111
  112primo( harp,     47, 0).
  113primo( timpani,     47, 0).
  114primo( strings/1,     49, 0).
  115primo( strings/orch,  49, 8).
  116primo( strings/slow,  50, 0).
  117primo( strings/synth1, 51, 0).
  118primo( strings/synth2, 51, 8).
  119primo( strings/synth3, 52, 0).
  120
  121primo( choir/aahs/1, 53, 0).
  122primo( choir/aahs/2, 53, 8).
  123primo( choir/oohs, 54, 0).
  124
  125primo( trumpet, 57, 0).
  126primo( trombone/1, 58, 0).
  127primo( trombone/2, 58, 8).
  128primo( tuba, 59, 0).
  129primo( trumpet/muted, 60, 0).
  130primo( french_horn/1, 61, 0).
  131primo( french_horn/2, 61, 8).
  132
  133primo( sax/soprano,  65, 0).
  134primo( sax/alto,     66, 0).
  135primo( sax/tenor,    67, 0).
  136primo( sax/baritone, 68, 0).
  137primo( oboe,        69, 0).
  138primo( english_horn, 70, 0).
  139primo( bassoon,    71, 0).
  140primo( clarinet,   72, 0).
  141primo( piccolo,      73, 0).
  142primo( flute,      74, 0).
  143primo( recorder,   75, 0).
  144primo( pan_pipe,   76, 0).
  145primo( shakuhachi,   78, 0).
  146primo( whistle,   79, 0).
  147primo( ocarina,   80, 0).
  148
  149primo( square/1,    81, 0).
  150primo( square/2,    81, 1).
  151primo( sine,        81, 8).
  152primo( saw/1,       82, 0).
  153primo( saw/2,       82, 1).
  154primo( lead/calliope, 83, 0).
  155primo( lead/chiff,    84, 0).
  156primo( lead/charang,  85, 0).
  157primo( lead/voice,    86, 0).
  158primo( lead/fifths,   87, 0).
  159primo( lead/w_bass,   88, 0).
  160
  161primo( pad/new_age,  89, 0).
  162primo( pad/warm,     90, 0).
  163primo( pad/polysynth,91, 0).
  164primo( pad/choir,    92, 0).
  165primo( pad/bowed,    93, 0).
  166primo( pad/metallic, 94, 0).
  167primo( pad/halo,     95, 0).
  168primo( pad/sweep,    96, 0).
  169
  170primo( fx/rain,       97, 0).
  171primo( fx/soundtrack, 98, 0).
  172primo( fx/crystal,    99, 0).
  173primo( fx/atmosphere, 100, 0).
  174primo( fx/brightness, 101, 0).
  175primo( fx/goblins,    102, 0).
  176primo( fx/echoes,     103, 0).
  177primo( fx/sci_fi,     104, 0).
  178
  179primo( sitar/1,     105, 0).
  180primo( sitar/2,     105, 1).
  181primo( banjo,       106, 0).
  182primo( shamisen,    107, 0).
  183primo( koto,        108, 0).
  184primo( kalimba,     109, 0).
  185primo( bagpipe,     110, 0).
  186primo( fiddle,      111, 0).
  187primo( shanai,      112, 0).
  188
  189
  190primo( tinkle_bell,   113, 0).
  191primo( agogo,   114, 0).
  192primo( steel_drums,   115, 0).
  193primo( woodblock,   116, 0).
  194primo( taiko,   117, 0).
  195primo( melodic_tom,   118, 0).
  196primo( synth_drum,   119, 0).
  197primo( reverse_cymbal,   120, 0).
  198
  199% drum kits
  200seco( standard,  1).
  201seco( standard2, 2).
  202seco( room,      9).
  203seco( power,    17).
  204seco( elec,     25).
  205seco( tr808,    26).
  206seco( dance,    27).
  207seco( jazz,     33).
  208seco( brush,    41).
  209seco( orch, 	 49).
  210seco( sfx, 	    57).
 perc(-NN:byte, -Name:atom) is nondet
True when note number NN corresponds to named percussion sound. Applies when using one of the kit/_ instruments.
  216perc(35,'Acoustic Bass Drum').
  217perc(36,'Bass Drum 1').
  218perc(37,'Side Stick').
  219perc(38,'Acoustic Snare').
  220perc(39,'Hand Clap').
  221perc(40,'Electric Snare').
  222perc(41,'Low Floor Tom').
  223perc(42,'Closed Hi-Hat').
  224perc(43,'High Floor Tom').
  225perc(44,'Pedal Hi-Hat').
  226perc(45,'Low Tom').
  227perc(46,'Open Hi-Hat').
  228perc(47,'Low-Mid Tom').
  229perc(48,'High-Mid Tom').
  230perc(49,'Crash Cymbal 1').
  231perc(50,'High Tom').
  232perc(51,'Ride Cymbal 1').
  233perc(52,'Chinese Cymbal').
  234perc(53,'Ride Bell').
  235perc(54,'Tambourine').
  236perc(55,'Splash Cymbal').
  237perc(56,'Cowbell').
  238perc(57,'Crash Cymbal 2').
  239perc(58,'Vibraslap').
  240perc(59,'Ride Cymbal 2').
  241perc(60,'High Bongo').
  242perc(61,'Low Bongo').
  243perc(62,'Mute Hi Conga').
  244perc(63,'Open Hi Conga').
  245perc(64,'Low Conga').
  246perc(65,'High Timbale').
  247perc(66,'Low Timbale').
  248perc(67,'High Agogo').
  249perc(68,'Low Agogo').
  250perc(69,'Cabasa').
  251perc(70,'Maracas').
  252perc(71,'Short Whistle').
  253perc(72,'Long Whistle').
  254perc(73,'Short Guiro').
  255perc(74,'Long Guiro').
  256perc(75,'Claves').
  257perc(76,'Hi Woodblock').
  258perc(77,'Low Woodblock').
  259perc(78,'Mute Cuica').
  260perc(79,'Open Cuica').
  261perc(80,'Mute Triangle').
  262perc(81,'Open Triangle')