content: {-# LINE 9 "GeneralMidi.lhs" #-}
  --  This code was automatically generated by lhs2tex --code, from the file 
  --  HSoM/GeneralMidi.lhs.  (See HSoM/MakeCode.bat.)
  {-# LINE 16 "GeneralMidi.lhs" #-}
  module Euterpea.IO.MIDI.GeneralMidi where
  import Euterpea.Music (InstrumentName(..))
  
  fromGM :: Int -> InstrumentName
  fromGM i | i >= 0 && i <= 127 = toEnum i
  fromGM i = error $ "fromGMNo: " ++ show i ++ 
                     " is not a valid General Midi Number"
  toGM :: InstrumentName -> Int
  toGM Percussion = 0
  toGM (CustomInstrument name) = 0
  toGM i = fromEnum i
  
  instance Enum InstrumentName where
    fromEnum AcousticGrandPiano = 0
    fromEnum BrightAcousticPiano = 1
    fromEnum ElectricGrandPiano = 2
    fromEnum HonkyTonkPiano = 3
    fromEnum RhodesPiano = 4
    fromEnum ChorusedPiano = 5
    fromEnum Harpsichord = 6
    fromEnum Clavinet = 7
    fromEnum Celesta = 8
    fromEnum Glockenspiel = 9
    fromEnum MusicBox = 10
    fromEnum Vibraphone = 11
    fromEnum Marimba = 12
    fromEnum Xylophone = 13
    fromEnum TubularBells = 14
    fromEnum Dulcimer = 15
    fromEnum HammondOrgan = 16
    fromEnum PercussiveOrgan = 17
    fromEnum RockOrgan = 18
    fromEnum ChurchOrgan = 19
    fromEnum ReedOrgan = 20
    fromEnum Accordion = 21
    fromEnum Harmonica = 22
    fromEnum TangoAccordion = 23
    fromEnum AcousticGuitarNylon = 24
    fromEnum AcousticGuitarSteel = 25
    fromEnum ElectricGuitarJazz = 26
    fromEnum ElectricGuitarClean = 27
    fromEnum ElectricGuitarMuted = 28
    fromEnum OverdrivenGuitar = 29
    fromEnum DistortionGuitar = 30
    fromEnum GuitarHarmonics = 31
    fromEnum AcousticBass = 32
    fromEnum ElectricBassFingered = 33
    fromEnum ElectricBassPicked = 34
    fromEnum FretlessBass = 35
    fromEnum SlapBass1 = 36
    fromEnum SlapBass2 = 37
    fromEnum SynthBass1 = 38
    fromEnum SynthBass2 = 39
    fromEnum Violin = 40
    fromEnum Viola = 41
    fromEnum Cello = 42
    fromEnum Contrabass = 43
    fromEnum TremoloStrings = 44
    fromEnum PizzicatoStrings = 45
    fromEnum OrchestralHarp = 46
    fromEnum Timpani = 47
    fromEnum StringEnsemble1 = 48
    fromEnum StringEnsemble2 = 49
    fromEnum SynthStrings1 = 50
    fromEnum SynthStrings2 = 51
    fromEnum ChoirAahs = 52
    fromEnum VoiceOohs = 53
    fromEnum SynthVoice = 54
    fromEnum OrchestraHit = 55
    fromEnum Trumpet = 56
    fromEnum Trombone = 57
    fromEnum Tuba = 58
    fromEnum MutedTrumpet = 59
    fromEnum FrenchHorn = 60
    fromEnum BrassSection = 61
    fromEnum SynthBrass1 = 62
    fromEnum SynthBrass2 = 63
    fromEnum SopranoSax = 64
    fromEnum AltoSax = 65
    fromEnum TenorSax = 66
    fromEnum BaritoneSax = 67
    fromEnum Oboe = 68
    fromEnum EnglishHorn = 69
    fromEnum Bassoon = 70
    fromEnum Clarinet = 71
    fromEnum Piccolo = 72
    fromEnum Flute = 73
    fromEnum Recorder = 74
    fromEnum PanFlute = 75
    fromEnum BlownBottle = 76
    fromEnum Shakuhachi = 77
    fromEnum Whistle = 78
    fromEnum Ocarina = 79
    fromEnum Lead1Square = 80
    fromEnum Lead2Sawtooth = 81
    fromEnum Lead3Calliope = 82
    fromEnum Lead4Chiff = 83
    fromEnum Lead5Charang = 84
    fromEnum Lead6Voice = 85
    fromEnum Lead7Fifths = 86
    fromEnum Lead8BassLead = 87
    fromEnum Pad1NewAge = 88
    fromEnum Pad2Warm = 89
    fromEnum Pad3Polysynth = 90
    fromEnum Pad4Choir = 91
    fromEnum Pad5Bowed = 92
    fromEnum Pad6Metallic = 93
    fromEnum Pad7Halo = 94
    fromEnum Pad8Sweep = 95
    fromEnum FX1Train = 96
    fromEnum FX2Soundtrack = 97
    fromEnum FX3Crystal = 98
    fromEnum FX4Atmosphere = 99
    fromEnum FX5Brightness = 100
    fromEnum FX6Goblins = 101
    fromEnum FX7Echoes = 102
    fromEnum FX8SciFi = 103
    fromEnum Sitar = 104
    fromEnum Banjo = 105
    fromEnum Shamisen = 106
    fromEnum Koto = 107
    fromEnum Kalimba = 108
    fromEnum Bagpipe = 109
    fromEnum Fiddle = 110
    fromEnum Shanai = 111
    fromEnum TinkleBell = 112
    fromEnum Agogo = 113
    fromEnum SteelDrums = 114
    fromEnum Woodblock = 115
    fromEnum TaikoDrum = 116
    fromEnum MelodicDrum = 117
    fromEnum SynthDrum = 118
    fromEnum ReverseCymbal = 119
    fromEnum GuitarFretNoise = 120
    fromEnum BreathNoise = 121
    fromEnum Seashore = 122
    fromEnum BirdTweet = 123
    fromEnum TelephoneRing = 124
    fromEnum Helicopter = 125
    fromEnum Applause = 126
    fromEnum Gunshot = 127
    fromEnum i = error $ "fromEnum: " ++ show i ++ " is not implemented"
  
    toEnum 0 = AcousticGrandPiano 
    toEnum 1 = BrightAcousticPiano 
    toEnum 2 = ElectricGrandPiano 
    toEnum 3 = HonkyTonkPiano 
    toEnum 4 = RhodesPiano 
    toEnum 5 = ChorusedPiano 
    toEnum 6 = Harpsichord 
    toEnum 7 = Clavinet 
    toEnum 8 = Celesta 
    toEnum 9 = Glockenspiel 
    toEnum 10 = MusicBox 
    toEnum 11 = Vibraphone 
    toEnum 12 = Marimba 
    toEnum 13 = Xylophone 
    toEnum 14 = TubularBells 
    toEnum 15 = Dulcimer 
    toEnum 16 = HammondOrgan 
    toEnum 17 = PercussiveOrgan 
    toEnum 18 = RockOrgan 
    toEnum 19 = ChurchOrgan 
    toEnum 20 = ReedOrgan 
    toEnum 21 = Accordion 
    toEnum 22 = Harmonica 
    toEnum 23 = TangoAccordion 
    toEnum 24 = AcousticGuitarNylon 
    toEnum 25 = AcousticGuitarSteel 
    toEnum 26 = ElectricGuitarJazz 
    toEnum 27 = ElectricGuitarClean 
    toEnum 28 = ElectricGuitarMuted 
    toEnum 29 = OverdrivenGuitar 
    toEnum 30 = DistortionGuitar 
    toEnum 31 = GuitarHarmonics 
    toEnum 32 = AcousticBass 
    toEnum 33 = ElectricBassFingered 
    toEnum 34 = ElectricBassPicked 
    toEnum 35 = FretlessBass 
    toEnum 36 = SlapBass1 
    toEnum 37 = SlapBass2 
    toEnum 38 = SynthBass1 
    toEnum 39 = SynthBass2 
    toEnum 40 = Violin 
    toEnum 41 = Viola 
    toEnum 42 = Cello 
    toEnum 43 = Contrabass 
    toEnum 44 = TremoloStrings 
    toEnum 45 = PizzicatoStrings 
    toEnum 46 = OrchestralHarp 
    toEnum 47 = Timpani 
    toEnum 48 = StringEnsemble1 
    toEnum 49 = StringEnsemble2 
    toEnum 50 = SynthStrings1 
    toEnum 51 = SynthStrings2 
    toEnum 52 = ChoirAahs 
    toEnum 53 = VoiceOohs 
    toEnum 54 = SynthVoice 
    toEnum 55 = OrchestraHit 
    toEnum 56 = Trumpet 
    toEnum 57 = Trombone 
    toEnum 58 = Tuba 
    toEnum 59 = MutedTrumpet 
    toEnum 60 = FrenchHorn 
    toEnum 61 = BrassSection 
    toEnum 62 = SynthBrass1 
    toEnum 63 = SynthBrass2 
    toEnum 64 = SopranoSax 
    toEnum 65 = AltoSax 
    toEnum 66 = TenorSax 
    toEnum 67 = BaritoneSax 
    toEnum 68 = Oboe 
    toEnum 69 = EnglishHorn 
    toEnum 70 = Bassoon 
    toEnum 71 = Clarinet 
    toEnum 72 = Piccolo 
    toEnum 73 = Flute 
    toEnum 74 = Recorder 
    toEnum 75 = PanFlute 
    toEnum 76 = BlownBottle 
    toEnum 77 = Shakuhachi 
    toEnum 78 = Whistle 
    toEnum 79 = Ocarina 
    toEnum 80 = Lead1Square 
    toEnum 81 = Lead2Sawtooth 
    toEnum 82 = Lead3Calliope 
    toEnum 83 = Lead4Chiff 
    toEnum 84 = Lead5Charang 
    toEnum 85 = Lead6Voice 
    toEnum 86 = Lead7Fifths 
    toEnum 87 = Lead8BassLead 
    toEnum 88 = Pad1NewAge 
    toEnum 89 = Pad2Warm 
    toEnum 90 = Pad3Polysynth 
    toEnum 91 = Pad4Choir 
    toEnum 92 = Pad5Bowed 
    toEnum 93 = Pad6Metallic 
    toEnum 94 = Pad7Halo 
    toEnum 95 = Pad8Sweep 
    toEnum 96 = FX1Train 
    toEnum 97 = FX2Soundtrack 
    toEnum 98 = FX3Crystal 
    toEnum 99 = FX4Atmosphere 
    toEnum 100 = FX5Brightness 
    toEnum 101 = FX6Goblins 
    toEnum 102 = FX7Echoes 
    toEnum 103 = FX8SciFi 
    toEnum 104 = Sitar 
    toEnum 105 = Banjo 
    toEnum 106 = Shamisen 
    toEnum 107 = Koto 
    toEnum 108 = Kalimba 
    toEnum 109 = Bagpipe 
    toEnum 110 = Fiddle 
    toEnum 111 = Shanai 
    toEnum 112 = TinkleBell 
    toEnum 113 = Agogo 
    toEnum 114 = SteelDrums 
    toEnum 115 = Woodblock 
    toEnum 116 = TaikoDrum 
    toEnum 117 = MelodicDrum 
    toEnum 118 = SynthDrum 
    toEnum 119 = ReverseCymbal 
    toEnum 120 = GuitarFretNoise 
    toEnum 121 = BreathNoise 
    toEnum 122 = Seashore 
    toEnum 123 = BirdTweet 
    toEnum 124 = TelephoneRing 
    toEnum 125 = Helicopter 
    toEnum 126 = Applause 
    toEnum 127 = Gunshot 
    toEnum n = error $ "toEnum: " ++ show n ++ " is not implemented for InstrumentName"
  