abcjs 6.1.8 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/RELEASE.md +66 -0
  2. package/dist/abcjs-basic-min.js +2 -2
  3. package/dist/abcjs-basic.js +4373 -4424
  4. package/dist/abcjs-basic.js.map +1 -1
  5. package/dist/abcjs-plugin-min.js +2 -2
  6. package/index.js +1 -1
  7. package/package.json +6 -6
  8. package/plugin.js +1 -1
  9. package/src/api/abc_timing_callbacks.js +7 -3
  10. package/src/api/abc_tunebook_svg.js +1 -2
  11. package/src/data/abc_tune.js +2 -2
  12. package/src/midi/abc_midi_create.js +8 -2
  13. package/src/parse/abc_common.js +0 -47
  14. package/src/parse/abc_parse.js +16 -16
  15. package/src/parse/abc_parse_book.js +3 -3
  16. package/src/parse/abc_parse_directive.js +26 -7
  17. package/src/parse/abc_parse_header.js +11 -9
  18. package/src/parse/abc_parse_key_voice.js +17 -17
  19. package/src/parse/abc_parse_music.js +89 -106
  20. package/src/parse/abc_tokenizer.js +60 -60
  21. package/src/parse/abc_transpose.js +14 -3
  22. package/src/parse/tune-builder.js +19 -14
  23. package/src/synth/abc_midi_flattener.js +25 -9
  24. package/src/synth/abc_midi_sequencer.js +1 -1
  25. package/src/synth/create-synth.js +41 -0
  26. package/src/synth/note-to-midi.js +50 -0
  27. package/src/tablatures/instruments/guitar/tab-guitar.js +0 -2
  28. package/src/tablatures/instruments/string-patterns.js +46 -28
  29. package/src/tablatures/instruments/tab-note.js +26 -103
  30. package/src/tablatures/instruments/violin/tab-violin.js +0 -2
  31. package/src/tablatures/tab-absolute-elements.js +9 -31
  32. package/src/tablatures/tab-renderer.js +2 -2
  33. package/src/test/abc_parser_lint.js +8 -5
  34. package/src/write/README.md +31 -0
  35. package/src/write/creation/abstract-engraver.js +1036 -0
  36. package/src/write/creation/add-chord.js +102 -0
  37. package/src/write/{add-text-if.js → creation/add-text-if.js} +6 -6
  38. package/src/write/{calcHeight.js → creation/calc-height.js} +2 -2
  39. package/src/write/creation/create-clef.js +72 -0
  40. package/src/write/creation/create-key-signature.js +31 -0
  41. package/src/write/creation/create-note-head.js +107 -0
  42. package/src/write/creation/create-time-signature.js +55 -0
  43. package/src/write/creation/decoration.js +357 -0
  44. package/src/write/{abc_absolute_element.js → creation/elements/absolute-element.js} +14 -15
  45. package/src/write/creation/elements/beam-element.js +113 -0
  46. package/src/write/{bottom-text.js → creation/elements/bottom-text.js} +14 -15
  47. package/src/write/{abc_brace_element.js → creation/elements/brace-element.js} +5 -5
  48. package/src/write/creation/elements/free-text.js +41 -0
  49. package/src/write/{abc_relative_element.js → creation/elements/relative-element.js} +8 -7
  50. package/src/write/{separator.js → creation/elements/separator.js} +2 -2
  51. package/src/write/{abc_staff_group_element.js → creation/elements/staff-group-element.js} +4 -4
  52. package/src/write/{subtitle.js → creation/elements/subtitle.js} +3 -3
  53. package/src/write/creation/elements/tempo-element.js +63 -0
  54. package/src/write/{abc_tie_element.js → creation/elements/tie-element.js} +15 -11
  55. package/src/write/{top-text.js → creation/elements/top-text.js} +12 -12
  56. package/src/write/creation/elements/triplet-element.js +28 -0
  57. package/src/write/{abc_voice_element.js → creation/elements/voice-element.js} +3 -3
  58. package/src/write/creation/glyphs.js +226 -0
  59. package/src/write/creation/translate-chord.js +37 -0
  60. package/src/write/draw/absolute.js +5 -5
  61. package/src/write/draw/beam.js +8 -8
  62. package/src/write/draw/brace.js +33 -33
  63. package/src/write/draw/crescendo.js +4 -4
  64. package/src/write/draw/debug-box.js +1 -1
  65. package/src/write/draw/draw.js +7 -7
  66. package/src/write/draw/dynamics.js +2 -2
  67. package/src/write/draw/ending.js +6 -6
  68. package/src/write/draw/glissando.js +17 -17
  69. package/src/write/draw/group-elements.js +51 -51
  70. package/src/write/draw/horizontal-line.js +9 -9
  71. package/src/write/draw/non-music.js +1 -1
  72. package/src/write/draw/print-line.js +15 -16
  73. package/src/write/draw/print-stem.js +5 -5
  74. package/src/write/draw/print-symbol.js +12 -12
  75. package/src/write/draw/print-vertical-line.js +8 -8
  76. package/src/write/draw/relative.js +17 -16
  77. package/src/write/draw/selectables.js +5 -5
  78. package/src/write/draw/separator.js +4 -4
  79. package/src/write/draw/set-paper-size.js +2 -2
  80. package/src/write/draw/sprintf.js +31 -31
  81. package/src/write/draw/staff-group.js +36 -30
  82. package/src/write/draw/staff-line.js +2 -2
  83. package/src/write/draw/staff.js +4 -4
  84. package/src/write/draw/tab-line.js +26 -26
  85. package/src/write/draw/tempo.js +30 -30
  86. package/src/write/draw/text.js +5 -5
  87. package/src/write/draw/tie.js +18 -18
  88. package/src/write/draw/triplet.js +6 -6
  89. package/src/write/draw/voice.js +16 -17
  90. package/src/write/{abc_engraver_controller.js → engraver-controller.js} +58 -51
  91. package/src/write/{classes.js → helpers/classes.js} +6 -6
  92. package/src/write/{get-font-and-attr.js → helpers/get-font-and-attr.js} +9 -7
  93. package/src/write/{get-text-size.js → helpers/get-text-size.js} +5 -5
  94. package/src/write/{set-class.js → helpers/set-class.js} +1 -1
  95. package/src/write/{abc_spacing.js → helpers/spacing.js} +1 -1
  96. package/src/write/{highlight.js → interactive/highlight.js} +1 -1
  97. package/src/write/{selection.js → interactive/selection.js} +27 -27
  98. package/src/write/{unhighlight.js → interactive/unhighlight.js} +1 -1
  99. package/src/write/layout/beam.js +13 -13
  100. package/src/write/layout/get-left-edge-of-staff.js +4 -4
  101. package/src/write/layout/layout.js +74 -74
  102. package/src/write/layout/{setUpperAndLowerElements.js → set-upper-and-lower-elements.js} +8 -8
  103. package/src/write/layout/{staffGroup.js → staff-group.js} +32 -32
  104. package/src/write/layout/triplet.js +4 -4
  105. package/src/write/layout/{VoiceElements.js → voice-elements.js} +23 -23
  106. package/src/write/layout/voice.js +6 -6
  107. package/src/write/{abc_renderer.js → renderer.js} +35 -32
  108. package/src/write/svg.js +35 -35
  109. package/test.js +1 -1
  110. package/types/index.d.ts +99 -22
  111. package/version.js +1 -1
  112. package/src/tablatures/instruments/guitar/guitar-fonts.js +0 -19
  113. package/src/tablatures/instruments/violin/violin-fonts.js +0 -19
  114. package/src/tablatures/transposer.js +0 -110
  115. package/src/write/abc_abstract_engraver.js +0 -1026
  116. package/src/write/abc_beam_element.js +0 -113
  117. package/src/write/abc_create_clef.js +0 -72
  118. package/src/write/abc_create_key_signature.js +0 -33
  119. package/src/write/abc_create_note_head.js +0 -107
  120. package/src/write/abc_create_time_signature.js +0 -55
  121. package/src/write/abc_decoration.js +0 -341
  122. package/src/write/abc_glyphs.js +0 -224
  123. package/src/write/abc_tempo_element.js +0 -63
  124. package/src/write/abc_triplet_element.js +0 -28
  125. package/src/write/add-chord.js +0 -103
  126. package/src/write/format-jazz-chord.js +0 -15
  127. package/src/write/free-text.js +0 -41
  128. /package/src/write/{abc_crescendo_element.js → creation/elements/crescendo-element.js} +0 -0
  129. /package/src/write/{abc_dynamic_decoration.js → creation/elements/dynamic-decoration.js} +0 -0
  130. /package/src/write/{abc_ending_element.js → creation/elements/ending-element.js} +0 -0
  131. /package/src/write/{abc_glissando_element.js → creation/elements/glissando-element.js} +0 -0
  132. /package/src/write/layout/{getBarYAt.js → get-bar-y-at.js} +0 -0
package/types/index.d.ts CHANGED
@@ -51,7 +51,7 @@ declare module 'abcjs' {
51
51
  "wordsfont" | "annotationfont" | "scale" | "partsbox" | "freegchord" | "fontboxpadding" | "stretchlast" | "tablabelfont" | "tabnumberfont" | "tabgracefont";
52
52
 
53
53
  export type MidiCommands = "nobarlines" | "barlines" | "beataccents" | "nobeataccents" | "droneon" | "droneoff" | "noportamento" | "channel" | "c" |
54
- "drumon" | "drumoff" | "fermatafixed" | "fermataproportional" | "gchordon" | "gchordoff" | "bassvol" | "chordvol" |
54
+ "drumon" | "drumoff" | "fermatafixed" | "fermataproportional" | "gchordon" | "gchordoff" | "bassvol" | "chordvol" | "bassprog" | "chordprog" |
55
55
  "controlcombo" | "temperamentnormal" | "gchord" | "ptstress" | "beatmod" | "deltaloudness" | "drumbars" | "pitchbend" |
56
56
  "gracedivider" | "makechordchannels" | "randomchordattack" | "chordattack" | "stressmodel" | "transpose" |
57
57
  "rtranspose" | "volinc" | "program" | "ratio" | "snt" | "bendvelocity" | "control" | "temperamentlinear" | "beat" | "beatstring" |
@@ -68,7 +68,8 @@ declare module 'abcjs' {
68
68
  "p" | "pp" | "f" | "ff" | "mf" | "mp" | "ppp" | "pppp" | "fff" | "ffff" | "sfz" | "repeatbar" | "repeatbar2" | "slide" |
69
69
  "upbow" | "downbow" | "staccato" | "trem1" | "trem2" | "trem3" | "trem4" |
70
70
  "/" | "//" | "///" | "////" | "turnx" | "invertedturn" | "invertedturnx" | "arpeggio" | "trill(" | "trill)" | "xstem" |
71
- "mark" | "marcato" | "umarcato"
71
+ "mark" | "marcato" | "umarcato" |
72
+ "D.C.alcoda" | "D.C.alfine" | "D.S.alcoda" | "D.S.alfine" | "editorial" | "courtesy"
72
73
 
73
74
  //
74
75
  // Basic types
@@ -157,19 +158,80 @@ declare module 'abcjs' {
157
158
 
158
159
  export type MidiParam = Array<string|number>;
159
160
 
160
- export type MidiGracePitches = Array<{instrument: string; pitch: number; volume: number; cents?: number}>;
161
+ export type MidiGracePitches = Array<{instrument: number; pitch: number; volume: number; cents?: number; durationInMeasures: number}>;
161
162
 
162
163
  export interface MidiPitch {
163
- instrument: string;
164
+ instrument: number;
164
165
  pitch: number;
165
166
  duration: number;
166
167
  volume: number;
167
- cents?: number
168
+ cents?: number;
169
+ start: number;
170
+ gap: number;
168
171
  }
169
172
 
170
173
  export type MidiPitches = Array<MidiPitch>;
171
174
 
172
- export type AbsoluteElement = any; // TODO
175
+ export interface RelativeElement {
176
+ x: number;
177
+ c: string;
178
+ dx: number;
179
+ w: number;
180
+ pitch: number;
181
+ pitch2?: number;
182
+ scaleX: number;
183
+ scaleY: number;
184
+ type: string;
185
+ name: string;
186
+ linewidth?: number;
187
+ klass?: string;
188
+ anchor?: "start" | "middle" | "end";
189
+ top: number;
190
+ bottom: number;
191
+ dim?: number;
192
+ position?: number;
193
+ realWidth?: number;
194
+ partHeightAbove?: number;
195
+ chordHeightAbove?: number;
196
+ chordHeightBelow?: number;
197
+ lyricHeightAbove?: number;
198
+ lyricHeightBelow?: number;
199
+ }
200
+
201
+ export interface AbsoluteElement {
202
+ abcelem : AbcElem;
203
+ bottom : number;
204
+ children : Array<RelativeElement>
205
+ duration : number;
206
+ durationClass : number;
207
+ elemset : Array<SVGElement>
208
+ extra : Array<RelativeElement>
209
+ extraw : number;
210
+ fixed : {w: number, t: number, b: number}
211
+ heads : Array<RelativeElement>
212
+ invisible : boolean;
213
+ minspacing : number;
214
+ notePositions : Array<{x:number; y:number;}>
215
+ right : Array<RelativeElement>
216
+ specialY : Array<{
217
+ chordHeightAbove : number;
218
+ chordHeightBelow : number;
219
+ dynamicHeightAbove : number;
220
+ dynamicHeightBelow : number;
221
+ endingHeightAbove : number;
222
+ lyricHeightAbove : number;
223
+ lyricHeightBelow : number;
224
+ partHeightAbove : number;
225
+ tempoHeightAbove : number;
226
+ volumeHeightAbove : number;
227
+ volumeHeightBelow : number;
228
+ }>
229
+ top : number;
230
+ tuneNumber : number;
231
+ type : "symbol" | "tempo" | "part" | "rest" | "note" | "bar" | "staff-extra clef" | "staff-extra key-signature" | "staff-extra time-signature";
232
+ w : number;
233
+ x : number;
234
+ }
173
235
 
174
236
  export type AbstractEngraver = any;
175
237
 
@@ -197,11 +259,13 @@ declare module 'abcjs' {
197
259
  dragColor?: string;
198
260
  dragging?: boolean;
199
261
  foregroundColor?: string;
200
- format?: { [attr: FormatAttributes]: any };
262
+ format?: { [attr in FormatAttributes]: any };
201
263
  header_only?: boolean;
202
264
  initialClef?: boolean;
203
265
  jazzchords?: boolean;
266
+ germanAlphabet?: boolean;
204
267
  lineBreaks?: Array<number>;
268
+ lineThickness?: number;
205
269
  minPadding?: number;
206
270
  oneSvgPerLine?: boolean;
207
271
  paddingbottom?: number;
@@ -340,7 +404,7 @@ declare module 'abcjs' {
340
404
  millisecondsPerMeasure: number;
341
405
  type: NoteTimingEventType;
342
406
 
343
- elements?: Array<HTMLElement>;
407
+ elements?: Array<Array<HTMLElement>>;
344
408
  endChar?: number;
345
409
  endCharArray?: Array<number>;
346
410
  endX?: number;
@@ -349,6 +413,7 @@ declare module 'abcjs' {
349
413
  line?: number;
350
414
  measureNumber?: number;
351
415
  midiPitches?: MidiPitches;
416
+ midiGraceNotePitches?: MidiGracePitches;
352
417
  startChar?: number;
353
418
  startCharArray?: Array<number>;
354
419
  top?: number;
@@ -760,7 +825,7 @@ declare module 'abcjs' {
760
825
  getPickupLength: NumberFunction;
761
826
  getKeySignature: () => KeySignature;
762
827
  getElementFromChar: (charPos: number) => VoiceItem | null;
763
- millisecondsPerMeasure: NumberFunction;
828
+ millisecondsPerMeasure: (bpm?: number) => number;
764
829
  setTiming: (bpm?: number, measuresOfDelay? : number) => void;
765
830
  setUpAudio: (options: SynthOptions) => AudioTracks;
766
831
  makeVoicesArray: () => Array<Selectable[]>
@@ -781,21 +846,32 @@ declare module 'abcjs' {
781
846
  }
782
847
 
783
848
  export interface AbcElem {
784
- el_type: string //TODO enumerate these
785
- abselem: any;
849
+ el_type: string; //TODO enumerate these
850
+ abselem: AbsoluteElement;
786
851
  beambr?: number;
787
- chord?: Array<any>
788
- decoration: Array<any>
852
+ chord?: Array<{name: string; position: ChordPlacement}>
853
+ decoration: Array<string> //TODO enumerate these
789
854
  duration: number
790
855
  endBeam?: boolean
791
856
  endSlur?: number
792
857
  endTriplet?: true
793
- gracenotes?: Array<any>
794
- lyric?: Array<any>
858
+ gracenotes?: Array<{duration: number; name:string; pitch: number; verticalPosition: number;}>
859
+ lyric?: Array<{syllable: string; divider: ' ' | '-' | '_';}>
795
860
  noStem?: boolean
796
- pitches?: Array<any>
861
+ midiPitches?: MidiPitches;
862
+ midiGraceNotePitches?: MidiGracePitches;
863
+ pitches?: Array<{
864
+ pitch: number;
865
+ name: string;
866
+ startSlur?: Array<{label: number}>;
867
+ endSlur?: Array<number>;
868
+ startTie?: {};
869
+ endTie?: boolean;
870
+ verticalPos: number;
871
+ highestVert: number;
872
+ }>
797
873
  positioning?: any
798
- rest?: any
874
+ rest?: {"type": "rest"}
799
875
  startBeam?: boolean
800
876
  startTriplet?: number
801
877
  tripletMultiplier?: number
@@ -865,7 +941,7 @@ declare module 'abcjs' {
865
941
  ev: NoteTimingEvent;
866
942
  endMs: number;
867
943
  offMs: number;
868
- offPs: number;
944
+ offPx: number;
869
945
  gapMs: number;
870
946
  gapPx: number;
871
947
  }
@@ -1086,15 +1162,16 @@ declare module 'abcjs' {
1086
1162
 
1087
1163
  export interface SynthObjectController {
1088
1164
  disable(isDisabled: boolean): void
1089
- setTune(visualObj: TuneObject, userAction: boolean, audioParams?: any): Promise<SynthInitResponse>
1090
- load(selector: string, cursorControl?: any, visualOptions?: SynthVisualOptions): void
1165
+ setTune(visualObj: TuneObject, userAction: boolean, audioParams?: SynthOptions): Promise<SynthInitResponse>
1166
+ load(selector: Selector, cursorControl?: CursorControl | null, visualOptions?: SynthVisualOptions): void
1091
1167
  play(): void
1092
1168
  pause(): void
1093
1169
  toggleLoop(): void
1094
1170
  restart(): void
1095
1171
  setProgress(ev: number): void
1096
- setWarp(percent: number): void
1172
+ setWarp(percent: number): Promise<void>
1097
1173
  download(fName: string): void
1174
+ getAudioBuffer(): AudioBuffer | undefined
1098
1175
  }
1099
1176
 
1100
1177
  export interface SynthSequenceClass {
@@ -1115,7 +1192,7 @@ declare module 'abcjs' {
1115
1192
  export function activeAudioContext(): AudioContext
1116
1193
  export function CreateSynthControl(element: Selector, options: AbcVisualParams): AudioControl
1117
1194
  export function getMidiFile(source: string | TuneObject, options?: MidiFileOptions): MidiFile;
1118
- export function playEvent(pitches: MidiPitches, graceNotes: MidiGracePitches, milliSecondsPerMeasure: number): Promise<void>;
1195
+ export function playEvent(pitches: MidiPitches, graceNotes: MidiGracePitches | undefined, milliSecondsPerMeasure: number): Promise<void>;
1119
1196
  export function sequence(visualObj: TuneObject, options: AbcVisualParams): AudioSequence
1120
1197
  }
1121
1198
 
package/version.js CHANGED
@@ -1,3 +1,3 @@
1
- var version = '6.1.8';
1
+ var version = '6.2.0';
2
2
 
3
3
  module.exports = version;
@@ -1,19 +0,0 @@
1
-
2
- /**
3
- * Dedicated fonts for violin tabs
4
- */
5
-
6
- /**
7
- * Set here the fonts used by renderer/drawer
8
- * for the violin plugin
9
- * @param {} tune
10
- */
11
- // eslint-disable-next-line no-unused-vars
12
- function setGuitarFonts(tune) {
13
- /* enhance or change instrument fonts here */
14
- // tune.formatting.tabnumberfont = { face: "\"Times New Roman\"", size: 9, weight: "normal", style: "normal", decoration: "none" };
15
- // tune.formatting.tabgracefont = { face: "\"Times New Roman\"", size: 7, weight: "normal", style: "normal", decoration: "none" };
16
- }
17
-
18
- module.exports = setGuitarFonts;
19
-
@@ -1,19 +0,0 @@
1
-
2
- /**
3
- * Dedicated fonts for violin tabs
4
- */
5
-
6
- /**
7
- * Set here the fonts used by renderer/drawer
8
- * for the violin plugin
9
- * @param {} tune
10
- */
11
- // eslint-disable-next-line no-unused-vars
12
- function setViolinFonts(tune) {
13
- /* enhance or change instrument fonts here */
14
- // tune.formatting.tabnumberfont = { face: "\"Times New Roman\"", size: 9, weight: "normal", style: "normal", decoration: "none" };
15
- // tune.formatting.tabgracefont = { face: "\"Times New Roman\"", size: 7, weight: "normal", style: "normal", decoration: "none" };
16
- }
17
-
18
- module.exports = setViolinFonts;
19
-
@@ -1,110 +0,0 @@
1
- /**
2
- *
3
- * generic transposer
4
- *
5
- */
6
- var TabNote = require('./instruments/tab-note');
7
-
8
-
9
-
10
- function buildAccEquiv(acc,note) {
11
- var equiv = note.getAccidentalEquiv();
12
- if (acc.note.toUpperCase() == equiv.name.toUpperCase()) {
13
- equiv.isSharp = false;
14
- equiv.isFlat = false;
15
- return equiv;
16
- }
17
- return note;
18
- }
19
-
20
- function adjustNoteToKey(acc, note) {
21
- if (acc.acc == 'sharp') {
22
- if (note.isFlat) {
23
- return buildAccEquiv(acc, note);
24
- } else if (note.isSharp) {
25
- if (acc.note.toUpperCase() == note.name.toUpperCase()) {
26
- note.isSharp = false;
27
- note.isKeySharp = true;
28
- } else {
29
- if (acc.note.toUpperCase() == note.name.toUpperCase()) {
30
- note.natural = true;
31
- }
32
- }
33
- }
34
- } else if (acc.acc == 'flat') {
35
- if (note.isSharp) {
36
- return buildAccEquiv(acc, note);
37
- } else if (note.isFlat) {
38
- if (acc.note.toUpperCase() == note.name.toUpperCase()) {
39
- note.isFlat = false;
40
- note.isKeyFlat = true;
41
- }
42
- } else {
43
- if (acc.note.toUpperCase() == note.name.toUpperCase()) {
44
- note.natural = true;
45
- }
46
- }
47
- }
48
- return note;
49
- }
50
-
51
-
52
- function replaceNote(self, newNote, start, end) {
53
- if (self.lastEnd) {
54
- while (start > self.lastEnd) {
55
- self.updatedSrc.push(self.abcSrc[self.lastEnd]);
56
- self.lastEnd++;
57
- }
58
- }
59
- var nNote = newNote.split('');
60
- for (var ii = 0; ii < nNote.length; ii++) {
61
- self.updatedSrc.push(nNote[ii]);
62
- }
63
- var curPos = start + ii;
64
- while (end >= curPos) {
65
- self.updatedSrc.push(nNote[curPos]);
66
- curPos++;
67
- }
68
- self.lastEnd = end;
69
- }
70
-
71
-
72
- function checkKeys(self, note) {
73
- var accs = self.transposedKey;
74
- for (var ii = 0; ii < accs.length; ii++) {
75
- note = adjustNoteToKey(accs[ii], note);
76
- }
77
- return note;
78
- }
79
-
80
- Transposer.prototype.transposeNote = function (note) {
81
- var returned = note;
82
- var curNote = new TabNote.TabNote(returned.name);
83
- if (this.transposeBy > 0) {
84
- for (var ii = 0; ii < this.transposeBy; ii++) {
85
- curNote = checkKeys(this,curNote.nextNote());
86
- }
87
-
88
- } else if ( this.transposeBy < 0) {
89
- for (var jj = this.transposeBy; jj < 0; jj++) {
90
- curNote = checkKeys(this,curNote.prevNote());
91
- }
92
- }
93
- returned.name = curNote.emit();
94
- return returned;
95
- };
96
-
97
- Transposer.prototype.upgradeSource = function (note, startChar, endChar ) {
98
- var n = new TabNote.TabNote(note.name);
99
- var newNote = n.emit();
100
- replaceNote(this, newNote, startChar, endChar-1);
101
- };
102
-
103
- function Transposer(transposedKey , transposeBy ) {
104
- this.transposeBy = transposeBy;
105
- this.transposedKey = transposedKey;
106
- this.lastEnd = this.kEnd+1;
107
- }
108
-
109
-
110
- module.exports = Transposer;