SubInstrument.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import {Instrument} from "./Instrument";
  2. import {MidiInstrument} from "./VoiceData/Instructions/ClefInstruction";
  3. export class SubInstrument {
  4. constructor(parentInstrument: Instrument) {
  5. this.parentInstrument = parentInstrument;
  6. this.fixedKey = -1;
  7. this.name = this.parseMidiInstrument(this.parentInstrument.Name);
  8. this.midiInstrumentID = SubInstrument.midiInstrument[this.name];
  9. this.volume = 1.0;
  10. }
  11. private static midiInstrument: { [key: string]: MidiInstrument; } = {
  12. "cello": MidiInstrument.Cello,
  13. "violon-c": MidiInstrument.Cello,
  14. "contrabass": MidiInstrument.Contrabass,
  15. "kontrabass": MidiInstrument.Contrabass,
  16. "clarinet": MidiInstrument.Clarinet,
  17. "klarinette": MidiInstrument.Clarinet,
  18. "flute": MidiInstrument.Flute,
  19. "flöte": MidiInstrument.Flute,
  20. "frenchhorn": MidiInstrument.French_Horn,
  21. "guitar": MidiInstrument.Acoustic_Guitar_nylon,
  22. "gitarre": MidiInstrument.Acoustic_Guitar_nylon,
  23. "harp": MidiInstrument.Orchestral_Harp,
  24. "harfe": MidiInstrument.Orchestral_Harp,
  25. "oboe": MidiInstrument.Oboe,
  26. "organ": MidiInstrument.Church_Organ,
  27. "orgue": MidiInstrument.Church_Organ,
  28. "orgel": MidiInstrument.Church_Organ,
  29. "piano": MidiInstrument.Acoustic_Grand_Piano,
  30. "klavier": MidiInstrument.Acoustic_Grand_Piano,
  31. "piccolo": MidiInstrument.Piccolo,
  32. "strings": MidiInstrument.String_Ensemble_1,
  33. "streicher": MidiInstrument.String_Ensemble_1,
  34. "steeldrum": MidiInstrument.Steel_Drums,
  35. "trombone": MidiInstrument.Trombone,
  36. "posaune": MidiInstrument.Trombone,
  37. "brass": MidiInstrument.Trombone,
  38. "trumpet": MidiInstrument.Trumpet,
  39. "trompete": MidiInstrument.Trumpet,
  40. "tpt": MidiInstrument.Trumpet,
  41. "tuba": MidiInstrument.Tuba,
  42. "sax": MidiInstrument.Tenor_Sax,
  43. "viola": MidiInstrument.Viola,
  44. "bratsche": MidiInstrument.Viola,
  45. "violin": MidiInstrument.Violin,
  46. "violon.": MidiInstrument.Violin,
  47. "woodblock": MidiInstrument.Woodblock,
  48. "alt": MidiInstrument.Synth_Voice,
  49. "alto": MidiInstrument.Synth_Voice,
  50. "tenor": MidiInstrument.Synth_Voice,
  51. "bariton": MidiInstrument.Synth_Voice,
  52. "baritone": MidiInstrument.Synth_Voice,
  53. "bass": MidiInstrument.Synth_Voice,
  54. "sopran": MidiInstrument.Synth_Voice,
  55. "voice": MidiInstrument.Synth_Voice,
  56. "recorder": MidiInstrument.Recorder,
  57. "blockflöte": MidiInstrument.Recorder,
  58. "banjo": MidiInstrument.Banjo,
  59. "drums": MidiInstrument.Percussion,
  60. "percussion": MidiInstrument.Percussion,
  61. "schlagzeug": MidiInstrument.Percussion,
  62. "schlagwerk": MidiInstrument.Percussion,
  63. "unnamed": MidiInstrument.Acoustic_Grand_Piano,
  64. };
  65. public idString: string;
  66. public midiInstrumentID: MidiInstrument;
  67. public volume: number;
  68. public pan: number;
  69. public fixedKey: number;
  70. public name: string;
  71. private parentInstrument: Instrument;
  72. public get ParentInstrument(): Instrument {
  73. return this.parentInstrument;
  74. }
  75. public static isPianoInstrument(instrument: MidiInstrument): boolean {
  76. return (instrument === MidiInstrument.Acoustic_Grand_Piano
  77. || instrument === MidiInstrument.Bright_Acoustic_Piano
  78. || instrument === MidiInstrument.Electric_Grand_Piano
  79. || instrument === MidiInstrument.Electric_Piano_1
  80. || instrument === MidiInstrument.Electric_Piano_2);
  81. }
  82. public setMidiInstrument(instrumentType: string): void {
  83. this.midiInstrumentID = SubInstrument.midiInstrument[this.parseMidiInstrument(instrumentType)];
  84. }
  85. private parseMidiInstrument(instrumentType: string): string {
  86. // FIXME: test this function
  87. try {
  88. if (instrumentType) {
  89. let tmpName: string = instrumentType.toLowerCase().trim();
  90. for (let key in SubInstrument.midiInstrument) {
  91. if (tmpName.indexOf(key) !== -1) {
  92. return key;
  93. }
  94. }
  95. }
  96. if (this.parentInstrument.Name) {
  97. let tmpName: string = this.parentInstrument.Name.toLowerCase().trim();
  98. for (let key in SubInstrument.midiInstrument) {
  99. if (tmpName.indexOf(key) !== -1) {
  100. return key;
  101. }
  102. }
  103. }
  104. } catch (e) {
  105. console.log("Error parsing MIDI Instrument. Default to Grand Piano."); // FIXME
  106. }
  107. return "unnamed";
  108. }
  109. }