{-# 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"