abcjs 6.2.2 → 6.3.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/README.md +4 -0
- package/RELEASE.md +78 -0
- package/abc2xml_239/abc2xml.html +769 -0
- package/abc2xml_239/abc2xml.py +2248 -0
- package/abc2xml_239/abc2xml_changelog.html +124 -0
- package/abc2xml_239/lazy-river.abc +26 -0
- package/abc2xml_239/lazy-river.xml +3698 -0
- package/abc2xml_239/mean-to-me.abc +22 -0
- package/abc2xml_239/mean-to-me.xml +2954 -0
- package/abc2xml_239/pyparsing.py +3672 -0
- package/abc2xml_239/pyparsing.pyc +0 -0
- package/dist/abcjs-basic-min.js +2 -2
- package/dist/abcjs-basic.js +909 -485
- package/dist/abcjs-basic.js.map +1 -1
- package/dist/abcjs-plugin-min.js +2 -2
- package/index.js +2 -0
- package/package.json +1 -1
- package/plugin.js +1 -1
- package/src/api/abc_tablatures.js +51 -13
- package/src/api/abc_tunebook_svg.js +5 -3
- package/src/parse/abc_parse_directive.js +17 -16
- package/src/parse/abc_parse_header.js +22 -19
- package/src/parse/abc_parse_music.js +18 -53
- package/src/parse/abc_parse_settings.js +165 -0
- package/src/parse/abc_tokenizer.js +72 -7
- package/src/parse/tune-builder.js +60 -1
- package/src/synth/create-synth.js +4 -0
- package/src/synth/place-note.js +6 -0
- package/src/synth/play-event.js +7 -5
- package/src/synth/synth-controller.js +6 -2
- package/src/tablatures/instruments/string-patterns.js +11 -0
- package/src/tablatures/instruments/{guitar/guitar-patterns.js → tab-string-patterns.js} +6 -6
- package/src/tablatures/instruments/{violin/tab-violin.js → tab-string.js} +13 -11
- package/src/tablatures/tab-absolute-elements.js +19 -9
- package/src/tablatures/tab-renderer.js +24 -10
- package/src/test/abc_parser_lint.js +1 -0
- package/src/write/creation/abstract-engraver.js +9 -2
- package/src/write/creation/add-chord.js +102 -82
- package/src/write/creation/add-text-if.js +2 -2
- package/src/write/creation/decoration.js +16 -8
- package/src/write/creation/elements/bottom-text.js +62 -47
- package/src/write/creation/elements/rich-text.js +51 -0
- package/src/write/creation/elements/top-text.js +37 -11
- package/src/write/creation/glyphs.js +2 -2
- package/src/write/draw/absolute.js +4 -1
- package/src/write/draw/draw.js +13 -4
- package/src/write/draw/glissando.js +1 -0
- package/src/write/draw/non-music.js +3 -1
- package/src/write/draw/relative.js +1 -1
- package/src/write/draw/set-paper-size.js +1 -1
- package/src/write/draw/tempo.js +1 -1
- package/src/write/draw/text.js +10 -0
- package/src/write/draw/tie.js +9 -1
- package/src/write/engraver-controller.js +58 -11
- package/src/write/helpers/classes.js +1 -1
- package/src/write/helpers/get-font-and-attr.js +8 -1
- package/src/write/helpers/get-text-size.js +8 -1
- package/src/write/interactive/selection.js +6 -0
- package/src/write/layout/layout.js +33 -3
- package/src/write/svg.js +30 -0
- package/temp.txt +50 -0
- package/types/index.d.ts +74 -26
- package/version.js +1 -1
- package/.github/workflows/tests.yml +0 -29
- package/src/tablatures/instruments/guitar/tab-guitar.js +0 -48
- package/src/tablatures/instruments/violin/violin-patterns.js +0 -23
package/types/index.d.ts
CHANGED
|
@@ -71,6 +71,8 @@ declare module 'abcjs' {
|
|
|
71
71
|
"mark" | "marcato" | "umarcato" |
|
|
72
72
|
"D.C.alcoda" | "D.C.alfine" | "D.S.alcoda" | "D.S.alfine" | "editorial" | "courtesy"
|
|
73
73
|
|
|
74
|
+
export type TablatureInstrument = 'guitar' | 'mandolin' | 'fiddle' | 'violin' | '';
|
|
75
|
+
|
|
74
76
|
//
|
|
75
77
|
// Basic types
|
|
76
78
|
//
|
|
@@ -251,13 +253,23 @@ declare module 'abcjs' {
|
|
|
251
253
|
minSpacingLimit?: number;
|
|
252
254
|
}
|
|
253
255
|
|
|
256
|
+
export interface Tablature {
|
|
257
|
+
instrument?: TablatureInstrument,
|
|
258
|
+
capo?: number
|
|
259
|
+
label?: string,
|
|
260
|
+
tuning?: Array<string>,
|
|
261
|
+
highestNote?: string,
|
|
262
|
+
}
|
|
263
|
+
|
|
254
264
|
export interface AbcVisualParams {
|
|
265
|
+
accentAbove?: boolean;
|
|
255
266
|
add_classes?: boolean;
|
|
256
267
|
afterParsing?: AfterParsing;
|
|
257
268
|
ariaLabel?: string;
|
|
258
269
|
clickListener?: ClickListener;
|
|
259
270
|
dragColor?: string;
|
|
260
271
|
dragging?: boolean;
|
|
272
|
+
expandToWidest?: boolean;
|
|
261
273
|
foregroundColor?: string;
|
|
262
274
|
format?: { [attr in FormatAttributes]?: any };
|
|
263
275
|
header_only?: boolean;
|
|
@@ -282,6 +294,7 @@ declare module 'abcjs' {
|
|
|
282
294
|
staffwidth?: number;
|
|
283
295
|
startingTune?: number;
|
|
284
296
|
stop_on_warning?: boolean;
|
|
297
|
+
tablature?: Array<Tablature>;
|
|
285
298
|
textboxpadding?: number;
|
|
286
299
|
viewportHorizontal?: boolean;
|
|
287
300
|
viewportVertical?: boolean;
|
|
@@ -305,8 +318,8 @@ declare module 'abcjs' {
|
|
|
305
318
|
export interface EditorSynth {
|
|
306
319
|
synthControl?: SynthObjectController;
|
|
307
320
|
el: Selector;
|
|
308
|
-
cursorControl
|
|
309
|
-
options
|
|
321
|
+
cursorControl?: CursorControl;
|
|
322
|
+
options?: SynthOptions;
|
|
310
323
|
}
|
|
311
324
|
|
|
312
325
|
export interface EditorOptions {
|
|
@@ -324,7 +337,7 @@ declare module 'abcjs' {
|
|
|
324
337
|
// Audio
|
|
325
338
|
export interface NoteMapTrackItem {
|
|
326
339
|
pitch: number;
|
|
327
|
-
instrument:
|
|
340
|
+
instrument: string;
|
|
328
341
|
start: number;
|
|
329
342
|
end: number;
|
|
330
343
|
startChar: number;
|
|
@@ -399,7 +412,7 @@ declare module 'abcjs' {
|
|
|
399
412
|
//
|
|
400
413
|
|
|
401
414
|
// renderAbc
|
|
402
|
-
interface NoteTimingEvent {
|
|
415
|
+
export interface NoteTimingEvent {
|
|
403
416
|
milliseconds: number;
|
|
404
417
|
millisecondsPerMeasure: number;
|
|
405
418
|
type: NoteTimingEventType;
|
|
@@ -421,6 +434,11 @@ declare module 'abcjs' {
|
|
|
421
434
|
measureStart?: boolean;
|
|
422
435
|
}
|
|
423
436
|
|
|
437
|
+
// make an alias for backwards compatibility
|
|
438
|
+
export interface TimingEvent extends NoteTimingEvent {
|
|
439
|
+
|
|
440
|
+
}
|
|
441
|
+
|
|
424
442
|
export interface PercMapElement {
|
|
425
443
|
sound: number;
|
|
426
444
|
noteHead: NoteHeadType;
|
|
@@ -571,6 +589,7 @@ declare module 'abcjs' {
|
|
|
571
589
|
wordsfont: Font;
|
|
572
590
|
}
|
|
573
591
|
|
|
592
|
+
// Caution: The contents of this object may change at any time. If you reference this, be sure you retest for each abcjs release.
|
|
574
593
|
export interface EngraverController {
|
|
575
594
|
classes: any;
|
|
576
595
|
dragColor: string;
|
|
@@ -679,6 +698,7 @@ declare module 'abcjs' {
|
|
|
679
698
|
|
|
680
699
|
export interface VoiceItemBar {
|
|
681
700
|
el_type: "bar";
|
|
701
|
+
type: 'bar_dbl_repeat' | 'bar_right_repeat' | 'bar_left_repeat' |'bar_invisible' | 'bar_thick_thin' | 'bar_thin_thin' | 'bar_thin' | 'bar_thin_thick';
|
|
682
702
|
barNumber?: number;
|
|
683
703
|
chord?: Array<ChordProperties>;
|
|
684
704
|
decoration: Array<Decorations>;
|
|
@@ -827,8 +847,10 @@ declare module 'abcjs' {
|
|
|
827
847
|
getElementFromChar: (charPos: number) => VoiceItem | null;
|
|
828
848
|
millisecondsPerMeasure: (bpm?: number) => number;
|
|
829
849
|
setTiming: (bpm?: number, measuresOfDelay? : number) => void;
|
|
850
|
+
setupEvents: (startingDelay: number, timeDivider:number, startingBpm: number, warp?: number) => Array<NoteTimingEvent>;
|
|
830
851
|
setUpAudio: (options: SynthOptions) => AudioTracks;
|
|
831
852
|
makeVoicesArray: () => Array<Selectable[]>
|
|
853
|
+
deline: () => Array<TuneLine>;
|
|
832
854
|
lineBreaks?: Array<number>;
|
|
833
855
|
visualTranspose?: number;
|
|
834
856
|
}
|
|
@@ -913,22 +935,6 @@ declare module 'abcjs' {
|
|
|
913
935
|
endTimings: Array<LineEndInfo>;
|
|
914
936
|
}
|
|
915
937
|
|
|
916
|
-
export interface TimingEvent {
|
|
917
|
-
type: "event";
|
|
918
|
-
milliseconds: number;
|
|
919
|
-
millisecondsPerMeasure: number;
|
|
920
|
-
line: number;
|
|
921
|
-
measureNumber: number;
|
|
922
|
-
top: number;
|
|
923
|
-
height: number;
|
|
924
|
-
left: number;
|
|
925
|
-
width: number;
|
|
926
|
-
elements: Array< HTMLElement>;
|
|
927
|
-
startCharArray: Array<number>;
|
|
928
|
-
endCharArray: Array<number>;
|
|
929
|
-
midiPitches: MidiPitches
|
|
930
|
-
}
|
|
931
|
-
|
|
932
938
|
export interface TimingCallbacksPosition {
|
|
933
939
|
top: number;
|
|
934
940
|
left: number;
|
|
@@ -1022,11 +1028,31 @@ declare module 'abcjs' {
|
|
|
1022
1028
|
loaded: Array<string>;
|
|
1023
1029
|
}
|
|
1024
1030
|
|
|
1025
|
-
export interface
|
|
1026
|
-
cmd:
|
|
1027
|
-
|
|
1031
|
+
export interface AudioTrackProgramItem {
|
|
1032
|
+
cmd: 'program';
|
|
1033
|
+
channel: number;
|
|
1034
|
+
instrument: number;
|
|
1028
1035
|
}
|
|
1029
1036
|
|
|
1037
|
+
export interface AudioTrackNoteItem {
|
|
1038
|
+
cmd: 'note';
|
|
1039
|
+
duration: number;
|
|
1040
|
+
endChar: number;
|
|
1041
|
+
endType?: "staccato"|"tenuto";
|
|
1042
|
+
gap: number;
|
|
1043
|
+
instrument: number;
|
|
1044
|
+
pitch: number;
|
|
1045
|
+
start: number;
|
|
1046
|
+
startChar: number;
|
|
1047
|
+
volume: number;
|
|
1048
|
+
}
|
|
1049
|
+
export interface AudioTrackTextItem {
|
|
1050
|
+
cmd: 'text';
|
|
1051
|
+
type: 'name';
|
|
1052
|
+
text: string;
|
|
1053
|
+
}
|
|
1054
|
+
export type AudioTrack = Array<AudioTrackProgramItem|AudioTrackNoteItem|AudioTrackTextItem>
|
|
1055
|
+
|
|
1030
1056
|
export interface AudioTracks {
|
|
1031
1057
|
tempo: number;
|
|
1032
1058
|
instrument: number;
|
|
@@ -1068,9 +1094,11 @@ declare module 'abcjs' {
|
|
|
1068
1094
|
// TimingCallbacks
|
|
1069
1095
|
export type BeatCallback = (beatNumber: number, totalBeats: number, totalTime: number, position: TimingCallbacksPosition, debugInfo: TimingCallbacksDebug) => void;
|
|
1070
1096
|
|
|
1071
|
-
|
|
1097
|
+
type EventCallbackReturn = "continue" | Promise<"continue"> | undefined
|
|
1098
|
+
|
|
1099
|
+
export type EventCallback = (event: NoteTimingEvent | null) => EventCallbackReturn;
|
|
1072
1100
|
|
|
1073
|
-
export type LineEndCallback = (info : LineEndInfo, event:
|
|
1101
|
+
export type LineEndCallback = (info : LineEndInfo, event: NoteTimingEvent, details: LineEndDetails) => void;
|
|
1074
1102
|
|
|
1075
1103
|
// Editor
|
|
1076
1104
|
export type OnChange = (editor: Editor) => void;
|
|
@@ -1125,6 +1153,7 @@ declare module 'abcjs' {
|
|
|
1125
1153
|
pause(shouldPause: boolean): void;
|
|
1126
1154
|
millisecondsPerMeasure(): number;
|
|
1127
1155
|
pauseMidi(shouldPause: boolean): void;
|
|
1156
|
+
fireChanged():void;
|
|
1128
1157
|
}
|
|
1129
1158
|
|
|
1130
1159
|
//
|
|
@@ -1149,6 +1178,8 @@ declare module 'abcjs' {
|
|
|
1149
1178
|
seek(position: number, units?: ProgressUnit): void
|
|
1150
1179
|
stop(): number
|
|
1151
1180
|
download(): string // returns audio buffer in wav format as a reference to a blob
|
|
1181
|
+
getIsRunning(): boolean
|
|
1182
|
+
getAudioBuffer(): AudioBuffer | undefined
|
|
1152
1183
|
}
|
|
1153
1184
|
|
|
1154
1185
|
export interface SynthInitResponse {
|
|
@@ -1180,6 +1211,22 @@ declare module 'abcjs' {
|
|
|
1180
1211
|
appendNote(trackNumber: number, pitch: number, durationInMeasures: number, volume: number, cents: number): void
|
|
1181
1212
|
}
|
|
1182
1213
|
|
|
1214
|
+
export interface MidiRenderer {
|
|
1215
|
+
setTempo(bpm: number): void
|
|
1216
|
+
setGlobalInfo(bpm: number, name: string, key:KeySignature, time:MeterFraction): void
|
|
1217
|
+
startTrack(): void
|
|
1218
|
+
endTrack(): void
|
|
1219
|
+
setText(type: string, text: string):void
|
|
1220
|
+
setInstrument(instrument: number):void
|
|
1221
|
+
setChannel(channel:number, pan?: number):void
|
|
1222
|
+
startNote(pitch:number, loudness:number, cents?:number):void
|
|
1223
|
+
endNote(pitch:number):void
|
|
1224
|
+
addRest(length:number):void
|
|
1225
|
+
|
|
1226
|
+
getData():string
|
|
1227
|
+
embed(parent:Element, noplayer:boolean):void
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1183
1230
|
export namespace synth {
|
|
1184
1231
|
let instrumentIndexToName: [string]
|
|
1185
1232
|
let pitchToNoteName: [string]
|
|
@@ -1192,8 +1239,9 @@ declare module 'abcjs' {
|
|
|
1192
1239
|
export function activeAudioContext(): AudioContext
|
|
1193
1240
|
export function CreateSynthControl(element: Selector, options: AbcVisualParams): AudioControl
|
|
1194
1241
|
export function getMidiFile(source: string | TuneObject, options?: MidiFileOptions): MidiFile;
|
|
1195
|
-
export function playEvent(pitches: MidiPitches, graceNotes: MidiGracePitches | undefined, milliSecondsPerMeasure: number): Promise<void>;
|
|
1242
|
+
export function playEvent(pitches: MidiPitches, graceNotes: MidiGracePitches | undefined, milliSecondsPerMeasure: number, soundFontUrl? : string, debugCallback?: (message: string) => void): Promise<void>;
|
|
1196
1243
|
export function sequence(visualObj: TuneObject, options: AbcVisualParams): AudioSequence
|
|
1244
|
+
export function midiRenderer(): MidiRenderer
|
|
1197
1245
|
}
|
|
1198
1246
|
|
|
1199
1247
|
//
|
package/version.js
CHANGED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
name: Tests
|
|
2
|
-
|
|
3
|
-
on: [push, pull_request]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
Jest:
|
|
7
|
-
runs-on: ubuntu-latest
|
|
8
|
-
steps:
|
|
9
|
-
- uses: actions/checkout@v2
|
|
10
|
-
|
|
11
|
-
- name: Cache node modules
|
|
12
|
-
uses: actions/cache@v2
|
|
13
|
-
env:
|
|
14
|
-
cache-name: cache-node-modules
|
|
15
|
-
with:
|
|
16
|
-
path: ~/.npm
|
|
17
|
-
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
|
18
|
-
restore-keys: |
|
|
19
|
-
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
20
|
-
${{ runner.os }}-build-
|
|
21
|
-
${{ runner.os }}-
|
|
22
|
-
|
|
23
|
-
- name: Install Dependencies
|
|
24
|
-
run: npm install --color="always"
|
|
25
|
-
|
|
26
|
-
- name: Install Dependencies
|
|
27
|
-
run: npm test -- --colors
|
|
28
|
-
|
|
29
|
-
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Emit tab for Guitar staff
|
|
3
|
-
*/
|
|
4
|
-
var StringTablature = require('../string-tablature');
|
|
5
|
-
var TabCommon = require('../../tab-common');
|
|
6
|
-
var TabRenderer = require('../../tab-renderer');
|
|
7
|
-
var GuitarPatterns = require('./guitar-patterns');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* upon init mainly store provided instances for later usage
|
|
11
|
-
* @param {*} abcTune the parsed tune AST tree
|
|
12
|
-
* @param {*} tuneNumber the parsed tune AST tree
|
|
13
|
-
* @param {*} params complementary args provided to Tablature Plugin
|
|
14
|
-
*/
|
|
15
|
-
Plugin.prototype.init = function (abcTune, tuneNumber, params) {
|
|
16
|
-
var _super = new TabCommon(abcTune, tuneNumber, params);
|
|
17
|
-
this._super = _super;
|
|
18
|
-
this.abcTune = abcTune;
|
|
19
|
-
this.linePitch = 3;
|
|
20
|
-
this.nbLines = 6;
|
|
21
|
-
this.isTabBig = true;
|
|
22
|
-
this.capo = params.capo;
|
|
23
|
-
this.transpose = params.visualTranspose;
|
|
24
|
-
this.tablature = new StringTablature(this.nbLines,
|
|
25
|
-
this.linePitch);
|
|
26
|
-
|
|
27
|
-
var semantics = new GuitarPatterns(this);
|
|
28
|
-
this.semantics = semantics;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
Plugin.prototype.render = function (renderer, line, staffIndex) {
|
|
32
|
-
if (this._super.inError) return;
|
|
33
|
-
if (this.tablature.bypass(line)) return;
|
|
34
|
-
var rndrer = new TabRenderer(this, renderer, line, staffIndex);
|
|
35
|
-
rndrer.doLayout();
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
function Plugin() {}
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
// Tablature plugin definition
|
|
42
|
-
//
|
|
43
|
-
var AbcGuitarTab = function () {
|
|
44
|
-
return { name: 'GuitarTab', tablature: Plugin };
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
module.exports = AbcGuitarTab;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
var StringPatterns = require('../string-patterns');
|
|
2
|
-
|
|
3
|
-
function ViolinPatterns(plugin) {
|
|
4
|
-
this.tuning = plugin._super.params.tuning;
|
|
5
|
-
if (!this.tuning) {
|
|
6
|
-
this.tuning = ['G,', 'D', 'A', 'e'];
|
|
7
|
-
}
|
|
8
|
-
plugin.tuning = this.tuning;
|
|
9
|
-
this.strings = new StringPatterns(plugin);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
ViolinPatterns.prototype.notesToNumber = function (notes, graces) {
|
|
13
|
-
var converter = this.strings;
|
|
14
|
-
return converter.notesToNumber(notes, graces);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
ViolinPatterns.prototype.stringToPitch = function (stringNumber) {
|
|
18
|
-
var converter = this.strings;
|
|
19
|
-
return converter.stringToPitch(stringNumber);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
module.exports = ViolinPatterns;
|