module Music.Theory.Instrument.Names where

import Data.List.Split {- split -}

-- (family,abbreviations,names,transpositions)
instrument_db' :: [(String,String,String,String)]
instrument_db' =
    [("br","b.tbn","bass trombone","")
    ,("br","b.tuba","bass tuba","")
    ,("br","euph","euphonium","")
    ,("br","hn","french horn","F")
    ,("br","tbn;trm","trombone","")
    ,("br","tb;tba","tuba","")
    ,("br","tpt","trumpet","B♭")
    ,("br","t.tbn","tenor trombone","")
    ,("br","crt","cornet","")
    ,("br","fgh;flhn","flugel horn","")
    ,("br","p.tpt","piccolo trumpet","")
    ,("el","cd","compact disc","")
    ,("el","el;elec","electronics","")
    ,("el","tp","tape","")
    ,("el","om","ondes martenot","")
    ,("kb","h;hrm","harmonium","")
    ,("kb","e.pf","electric piano","")
    ,("kb","p;pf;pno","piano;pianoforte","")
    ,("kb","o;or;org","organ","")
    ,("kb","kb;kbd","keyboard","")
    ,("kb","cel","celeste","")
    ,("kb","clvd","clavichord","")
    ,("kb","hpd;hpcd","harpsichord","")
    ,("kb","syn","synthesiser","")
    ,("pc","bd","bass drum","")
    ,("pc","btl","bottle","")
    ,("pc","cast","castanets","")
    ,("pc","cbell","cow-bell","")
    ,("pc","bell","bell","chimes")
    ,("pc","clv","clave","")
    ,("pc","crot","crotales","")
    ,("pc","cym","cymbals","")
    ,("pc","dm","drum","")
    ,("pc","gl;glsp","glockenspiel","")
    ,("pc","mcas","maracas","")
    ,("pc","met.bl","metal block","")
    ,("pc","mr;mar","marimba","")
    ,("pc","sd","side drum","")
    ,("pc","sn.dm","snare drum","")
    ,("pc","sus.cym","suspended cymbal","")
    ,("pc","tamb","tambourine","")
    ,("pc","tam","tam tam","")
    ,("pc","t.bells","tubular bells","")
    ,("pc","td","tenor drum","")
    ,("pc","tri;tgl","triangle","")
    ,("pc","tm;timp","timpani","")
    ,("pc","tpl.bl","temple blocks","")
    ,("pc","vb;vib","vibraphone","")
    ,("pc","wdbl","wood block","")
    ,("pc","xyl","xylophone","")
    ,("str","va;vla","viola","")
    ,("str","vc;vlc","cello;violoncello","")
    ,("str","vn;vln","violin","")
    ,("str","cb","contrabass","")
    ,("str","db","double bass","")
    ,("str","vda","viola d'amore","")
    ,("str","b.gtr","bass guitar","")
    ,("str","e.gtr","electric guitar","")
    ,("str","gtr","guitar","")
    ,("str","","lute","")
    ,("str","zith","zither","")
    ,("str","hp","harp","")
    ,("str","dulc","dulcimer","")
    ,("str","mand","mandolin","")
    ,("vc","a;alt","alto","")
    ,("vc","b;bass","bass","")
    ,("vc","mz;mez","mezzo-soprano","")
    ,("vc","n;nar","narrator","")
    ,("vc","s;sop","soprano","")
    ,("vc","t;tn","tenor","")
    ,("vc","v;vc;voc","voice","")
    ,("vc","ch","chorus","")
    ,("vc","ctral","contralto","")
    ,("vc","ctrbs","contrabass","")
    ,("vc","bar","baritone","")
    ,("vc","b.bar","bass baritone","")
    ,("ww","b.cl","bass clarinet","")
    ,("ww","cb.cl","contrabass clarinet","")
    ,("ww","c;cl","clarinet","B♭")
    ,("ww","a.fl","alto flute","G")
    ,("ww","b.fl","bass flute","C")
    ,("ww","bn;bsn","bassoon","")
    ,("ww","f;fl","flute","")
    ,("ww","hb;htb","hautbois","")
    ,("ww","o;ob","oboe","")
    ,("ww","p;picc","piccolo","")
    ,("ww","ca","cor anglais","")
    ,("ww","c.bn","contrabassoon","")
    ,("ww","a.sax","alto saxophone","E♭")
    ,("ww","b.sax","baritone saxophone","E♭")
    ,("ww","b.ob","bass oboe","")
    ,("ww","cfg","contrafagotto","")
    ,("ww","eh;en.hn","english horn","")
    ,("ww","fg","fagotto","")
    ,("ww","rec","recorder","")
    ,("ww","sax","saxophone","")
    ,("ww","s.sax","soprano saxophone","B♭")
    ,("ww","t.sax","tenor saxophone","B♭")
    ,("ww","oca","ocarina","")
    ]

-- (family,[abbreviations],[names],[transpositions])
instrument_db :: [(String,[String],[String],[String])]
instrument_db =
    let sep = splitOn ";"
        f (fm,ab,nm,tr) = (fm,sep ab,sep nm,sep tr)
    in map f instrument_db'