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.
Files changed (66) hide show
  1. package/README.md +4 -0
  2. package/RELEASE.md +78 -0
  3. package/abc2xml_239/abc2xml.html +769 -0
  4. package/abc2xml_239/abc2xml.py +2248 -0
  5. package/abc2xml_239/abc2xml_changelog.html +124 -0
  6. package/abc2xml_239/lazy-river.abc +26 -0
  7. package/abc2xml_239/lazy-river.xml +3698 -0
  8. package/abc2xml_239/mean-to-me.abc +22 -0
  9. package/abc2xml_239/mean-to-me.xml +2954 -0
  10. package/abc2xml_239/pyparsing.py +3672 -0
  11. package/abc2xml_239/pyparsing.pyc +0 -0
  12. package/dist/abcjs-basic-min.js +2 -2
  13. package/dist/abcjs-basic.js +909 -485
  14. package/dist/abcjs-basic.js.map +1 -1
  15. package/dist/abcjs-plugin-min.js +2 -2
  16. package/index.js +2 -0
  17. package/package.json +1 -1
  18. package/plugin.js +1 -1
  19. package/src/api/abc_tablatures.js +51 -13
  20. package/src/api/abc_tunebook_svg.js +5 -3
  21. package/src/parse/abc_parse_directive.js +17 -16
  22. package/src/parse/abc_parse_header.js +22 -19
  23. package/src/parse/abc_parse_music.js +18 -53
  24. package/src/parse/abc_parse_settings.js +165 -0
  25. package/src/parse/abc_tokenizer.js +72 -7
  26. package/src/parse/tune-builder.js +60 -1
  27. package/src/synth/create-synth.js +4 -0
  28. package/src/synth/place-note.js +6 -0
  29. package/src/synth/play-event.js +7 -5
  30. package/src/synth/synth-controller.js +6 -2
  31. package/src/tablatures/instruments/string-patterns.js +11 -0
  32. package/src/tablatures/instruments/{guitar/guitar-patterns.js → tab-string-patterns.js} +6 -6
  33. package/src/tablatures/instruments/{violin/tab-violin.js → tab-string.js} +13 -11
  34. package/src/tablatures/tab-absolute-elements.js +19 -9
  35. package/src/tablatures/tab-renderer.js +24 -10
  36. package/src/test/abc_parser_lint.js +1 -0
  37. package/src/write/creation/abstract-engraver.js +9 -2
  38. package/src/write/creation/add-chord.js +102 -82
  39. package/src/write/creation/add-text-if.js +2 -2
  40. package/src/write/creation/decoration.js +16 -8
  41. package/src/write/creation/elements/bottom-text.js +62 -47
  42. package/src/write/creation/elements/rich-text.js +51 -0
  43. package/src/write/creation/elements/top-text.js +37 -11
  44. package/src/write/creation/glyphs.js +2 -2
  45. package/src/write/draw/absolute.js +4 -1
  46. package/src/write/draw/draw.js +13 -4
  47. package/src/write/draw/glissando.js +1 -0
  48. package/src/write/draw/non-music.js +3 -1
  49. package/src/write/draw/relative.js +1 -1
  50. package/src/write/draw/set-paper-size.js +1 -1
  51. package/src/write/draw/tempo.js +1 -1
  52. package/src/write/draw/text.js +10 -0
  53. package/src/write/draw/tie.js +9 -1
  54. package/src/write/engraver-controller.js +58 -11
  55. package/src/write/helpers/classes.js +1 -1
  56. package/src/write/helpers/get-font-and-attr.js +8 -1
  57. package/src/write/helpers/get-text-size.js +8 -1
  58. package/src/write/interactive/selection.js +6 -0
  59. package/src/write/layout/layout.js +33 -3
  60. package/src/write/svg.js +30 -0
  61. package/temp.txt +50 -0
  62. package/types/index.d.ts +74 -26
  63. package/version.js +1 -1
  64. package/.github/workflows/tests.yml +0 -29
  65. package/src/tablatures/instruments/guitar/tab-guitar.js +0 -48
  66. 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: CursorControl;
309
- options: SynthOptions;
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: number;
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 AudioTrack {
1026
- cmd: AudioTrackCommand;
1027
- [param: string]: any; // TODO - make this a union
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
- export type EventCallback = (event: TimingEvent) => void;
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: TimingEvent, details: LineEndDetails) => void;
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,3 +1,3 @@
1
- var version = '6.2.2';
1
+ var version = '6.3.0';
2
2
 
3
3
  module.exports = version;
@@ -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;