import { Instrument } from "./Instrument" ; import { MidiInstrument } from "./VoiceData/Instructions/ClefInstruction" ; import log from "loglevel" ; export class SubInstrument { constructor ( parentInstrument ) { this . parentInstrument = parentInstrument ; this . fixedKey = - 1 ; this . name = this . parseMidiInstrument ( this . parentInstrument . Name ) ; this . midiInstrumentID = SubInstrument . midiInstrument [ this . name ] ; this . volume = 1.0 ; } private static midiInstrument : { [ key ] : MidiInstrument ; } = { "alt" : MidiInstrument . Synth_Voice , "alto" : MidiInstrument . Synth_Voice , "banjo" : MidiInstrument . Banjo , "bariton" : MidiInstrument . Synth_Voice , "baritone" : MidiInstrument . Synth_Voice , "bass" : MidiInstrument . Synth_Voice , "blockflöte" : MidiInstrument . Recorder , "brass" : MidiInstrument . Trombone , "bratsche" : MidiInstrument . Viola , "cello" : MidiInstrument . Cello , "clarinet" : MidiInstrument . Clarinet , "contrabass" : MidiInstrument . Contrabass , "drums" : MidiInstrument . Percussion , "flute" : MidiInstrument . Flute , "flöte" : MidiInstrument . Flute , "frenchhorn" : MidiInstrument . French_Horn , "gitarre" : MidiInstrument . Acoustic_Guitar_nylon , "guitar" : MidiInstrument . Acoustic_Guitar_nylon , "harfe" : MidiInstrument . Orchestral_Harp , "harp" : MidiInstrument . Orchestral_Harp , "klarinette" : MidiInstrument . Clarinet , "klavier" : MidiInstrument . Acoustic_Grand_Piano , "kontrabass" : MidiInstrument . Contrabass , "oboe" : MidiInstrument . Oboe , "organ" : MidiInstrument . Church_Organ , "orgel" : MidiInstrument . Church_Organ , "orgue" : MidiInstrument . Church_Organ , "percussion" : MidiInstrument . Percussion , "piano" : MidiInstrument . Acoustic_Grand_Piano , "piccolo" : MidiInstrument . Piccolo , "posaune" : MidiInstrument . Trombone , "recorder" : MidiInstrument . Recorder , "sax" : MidiInstrument . Tenor_Sax , "schlagwerk" : MidiInstrument . Percussion , "schlagzeug" : MidiInstrument . Percussion , "sopran" : MidiInstrument . Synth_Voice , "steeldrum" : MidiInstrument . Steel_Drums , "streicher" : MidiInstrument . String_Ensemble_1 , "strings" : MidiInstrument . String_Ensemble_1 , "tenor" : MidiInstrument . Synth_Voice , "tpt" : MidiInstrument . Trumpet , "trombone" : MidiInstrument . Trombone , "trompete" : MidiInstrument . Trumpet , "trumpet" : MidiInstrument . Trumpet , "tuba" : MidiInstrument . Tuba , "unnamed" : MidiInstrument . Acoustic_Grand_Piano , "viola" : MidiInstrument . Viola , "violin" : MidiInstrument . Violin , "violon-c" : MidiInstrument . Cello , "violon." : MidiInstrument . Violin , "voice" : MidiInstrument . Synth_Voice , "woodblock" : MidiInstrument . Woodblock } ; public idString : string ; public midiInstrumentID : MidiInstrument ; public volume : number ; public pan : number ; public fixedKey : number ; public name : string ; private parentInstrument : Instrument ; public get ParentInstrument ( ) : Instrument { return this . parentInstrument ; } public static isPianoInstrument ( instrument ) { return ( instrument === MidiInstrument . Acoustic_Grand_Piano || instrument === MidiInstrument . Bright_Acoustic_Piano || instrument === MidiInstrument . Electric_Grand_Piano || instrument === MidiInstrument . Electric_Piano_1 || instrument === MidiInstrument . Electric_Piano_2 ) ; } public setMidiInstrument ( instrumentType ) { this . midiInstrumentID = SubInstrument . midiInstrument [ this . parseMidiInstrument ( instrumentType ) ] ; } private parseMidiInstrument ( instrumentType ) { try { if ( instrumentType ) { const tmpName = instrumentType . toLowerCase ( ) . trim ( ) ; for ( const key in SubInstrument . midiInstrument ) { if ( tmpName . indexOf ( key ) !== - 1 ) { return key ; } } } if ( this . parentInstrument . Name ) { const tmpName = this . parentInstrument . Name . toLowerCase ( ) . trim ( ) ; for ( const key in SubInstrument . midiInstrument ) { if ( tmpName . indexOf ( key ) !== - 1 ) { return key ; } } } } catch ( e ) { log . error ( "Error parsing MIDI Instrument. Default to Grand Piano." ) ; } return "unnamed" ; } }