SubInstrument.ts 4.7 KB

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