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.
- package/RELEASE.md +66 -0
- package/dist/abcjs-basic-min.js +2 -2
- package/dist/abcjs-basic.js +4373 -4424
- package/dist/abcjs-basic.js.map +1 -1
- package/dist/abcjs-plugin-min.js +2 -2
- package/index.js +1 -1
- package/package.json +6 -6
- package/plugin.js +1 -1
- package/src/api/abc_timing_callbacks.js +7 -3
- package/src/api/abc_tunebook_svg.js +1 -2
- package/src/data/abc_tune.js +2 -2
- package/src/midi/abc_midi_create.js +8 -2
- package/src/parse/abc_common.js +0 -47
- package/src/parse/abc_parse.js +16 -16
- package/src/parse/abc_parse_book.js +3 -3
- package/src/parse/abc_parse_directive.js +26 -7
- package/src/parse/abc_parse_header.js +11 -9
- package/src/parse/abc_parse_key_voice.js +17 -17
- package/src/parse/abc_parse_music.js +89 -106
- package/src/parse/abc_tokenizer.js +60 -60
- package/src/parse/abc_transpose.js +14 -3
- package/src/parse/tune-builder.js +19 -14
- package/src/synth/abc_midi_flattener.js +25 -9
- package/src/synth/abc_midi_sequencer.js +1 -1
- package/src/synth/create-synth.js +41 -0
- package/src/synth/note-to-midi.js +50 -0
- package/src/tablatures/instruments/guitar/tab-guitar.js +0 -2
- package/src/tablatures/instruments/string-patterns.js +46 -28
- package/src/tablatures/instruments/tab-note.js +26 -103
- package/src/tablatures/instruments/violin/tab-violin.js +0 -2
- package/src/tablatures/tab-absolute-elements.js +9 -31
- package/src/tablatures/tab-renderer.js +2 -2
- package/src/test/abc_parser_lint.js +8 -5
- package/src/write/README.md +31 -0
- package/src/write/creation/abstract-engraver.js +1036 -0
- package/src/write/creation/add-chord.js +102 -0
- package/src/write/{add-text-if.js → creation/add-text-if.js} +6 -6
- package/src/write/{calcHeight.js → creation/calc-height.js} +2 -2
- package/src/write/creation/create-clef.js +72 -0
- package/src/write/creation/create-key-signature.js +31 -0
- package/src/write/creation/create-note-head.js +107 -0
- package/src/write/creation/create-time-signature.js +55 -0
- package/src/write/creation/decoration.js +357 -0
- package/src/write/{abc_absolute_element.js → creation/elements/absolute-element.js} +14 -15
- package/src/write/creation/elements/beam-element.js +113 -0
- package/src/write/{bottom-text.js → creation/elements/bottom-text.js} +14 -15
- package/src/write/{abc_brace_element.js → creation/elements/brace-element.js} +5 -5
- package/src/write/creation/elements/free-text.js +41 -0
- package/src/write/{abc_relative_element.js → creation/elements/relative-element.js} +8 -7
- package/src/write/{separator.js → creation/elements/separator.js} +2 -2
- package/src/write/{abc_staff_group_element.js → creation/elements/staff-group-element.js} +4 -4
- package/src/write/{subtitle.js → creation/elements/subtitle.js} +3 -3
- package/src/write/creation/elements/tempo-element.js +63 -0
- package/src/write/{abc_tie_element.js → creation/elements/tie-element.js} +15 -11
- package/src/write/{top-text.js → creation/elements/top-text.js} +12 -12
- package/src/write/creation/elements/triplet-element.js +28 -0
- package/src/write/{abc_voice_element.js → creation/elements/voice-element.js} +3 -3
- package/src/write/creation/glyphs.js +226 -0
- package/src/write/creation/translate-chord.js +37 -0
- package/src/write/draw/absolute.js +5 -5
- package/src/write/draw/beam.js +8 -8
- package/src/write/draw/brace.js +33 -33
- package/src/write/draw/crescendo.js +4 -4
- package/src/write/draw/debug-box.js +1 -1
- package/src/write/draw/draw.js +7 -7
- package/src/write/draw/dynamics.js +2 -2
- package/src/write/draw/ending.js +6 -6
- package/src/write/draw/glissando.js +17 -17
- package/src/write/draw/group-elements.js +51 -51
- package/src/write/draw/horizontal-line.js +9 -9
- package/src/write/draw/non-music.js +1 -1
- package/src/write/draw/print-line.js +15 -16
- package/src/write/draw/print-stem.js +5 -5
- package/src/write/draw/print-symbol.js +12 -12
- package/src/write/draw/print-vertical-line.js +8 -8
- package/src/write/draw/relative.js +17 -16
- package/src/write/draw/selectables.js +5 -5
- package/src/write/draw/separator.js +4 -4
- package/src/write/draw/set-paper-size.js +2 -2
- package/src/write/draw/sprintf.js +31 -31
- package/src/write/draw/staff-group.js +36 -30
- package/src/write/draw/staff-line.js +2 -2
- package/src/write/draw/staff.js +4 -4
- package/src/write/draw/tab-line.js +26 -26
- package/src/write/draw/tempo.js +30 -30
- package/src/write/draw/text.js +5 -5
- package/src/write/draw/tie.js +18 -18
- package/src/write/draw/triplet.js +6 -6
- package/src/write/draw/voice.js +16 -17
- package/src/write/{abc_engraver_controller.js → engraver-controller.js} +58 -51
- package/src/write/{classes.js → helpers/classes.js} +6 -6
- package/src/write/{get-font-and-attr.js → helpers/get-font-and-attr.js} +9 -7
- package/src/write/{get-text-size.js → helpers/get-text-size.js} +5 -5
- package/src/write/{set-class.js → helpers/set-class.js} +1 -1
- package/src/write/{abc_spacing.js → helpers/spacing.js} +1 -1
- package/src/write/{highlight.js → interactive/highlight.js} +1 -1
- package/src/write/{selection.js → interactive/selection.js} +27 -27
- package/src/write/{unhighlight.js → interactive/unhighlight.js} +1 -1
- package/src/write/layout/beam.js +13 -13
- package/src/write/layout/get-left-edge-of-staff.js +4 -4
- package/src/write/layout/layout.js +74 -74
- package/src/write/layout/{setUpperAndLowerElements.js → set-upper-and-lower-elements.js} +8 -8
- package/src/write/layout/{staffGroup.js → staff-group.js} +32 -32
- package/src/write/layout/triplet.js +4 -4
- package/src/write/layout/{VoiceElements.js → voice-elements.js} +23 -23
- package/src/write/layout/voice.js +6 -6
- package/src/write/{abc_renderer.js → renderer.js} +35 -32
- package/src/write/svg.js +35 -35
- package/test.js +1 -1
- package/types/index.d.ts +99 -22
- package/version.js +1 -1
- package/src/tablatures/instruments/guitar/guitar-fonts.js +0 -19
- package/src/tablatures/instruments/violin/violin-fonts.js +0 -19
- package/src/tablatures/transposer.js +0 -110
- package/src/write/abc_abstract_engraver.js +0 -1026
- package/src/write/abc_beam_element.js +0 -113
- package/src/write/abc_create_clef.js +0 -72
- package/src/write/abc_create_key_signature.js +0 -33
- package/src/write/abc_create_note_head.js +0 -107
- package/src/write/abc_create_time_signature.js +0 -55
- package/src/write/abc_decoration.js +0 -341
- package/src/write/abc_glyphs.js +0 -224
- package/src/write/abc_tempo_element.js +0 -63
- package/src/write/abc_triplet_element.js +0 -28
- package/src/write/add-chord.js +0 -103
- package/src/write/format-jazz-chord.js +0 -15
- package/src/write/free-text.js +0 -41
- /package/src/write/{abc_crescendo_element.js → creation/elements/crescendo-element.js} +0 -0
- /package/src/write/{abc_dynamic_decoration.js → creation/elements/dynamic-decoration.js} +0 -0
- /package/src/write/{abc_ending_element.js → creation/elements/ending-element.js} +0 -0
- /package/src/write/{abc_glissando_element.js → creation/elements/glissando-element.js} +0 -0
- /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:
|
|
161
|
+
export type MidiGracePitches = Array<{instrument: number; pitch: number; volume: number; cents?: number; durationInMeasures: number}>;
|
|
161
162
|
|
|
162
163
|
export interface MidiPitch {
|
|
163
|
-
instrument:
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
849
|
+
el_type: string; //TODO enumerate these
|
|
850
|
+
abselem: AbsoluteElement;
|
|
786
851
|
beambr?: number;
|
|
787
|
-
chord?: Array<
|
|
788
|
-
decoration: Array<
|
|
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<
|
|
794
|
-
lyric?: Array<
|
|
858
|
+
gracenotes?: Array<{duration: number; name:string; pitch: number; verticalPosition: number;}>
|
|
859
|
+
lyric?: Array<{syllable: string; divider: ' ' | '-' | '_';}>
|
|
795
860
|
noStem?: boolean
|
|
796
|
-
|
|
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?:
|
|
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
|
-
|
|
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?:
|
|
1090
|
-
load(selector:
|
|
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,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;
|