smoosic 1.0.12 → 1.0.14

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 (116) hide show
  1. package/README.md +1 -0
  2. package/build/smoosic.js +7 -7
  3. package/package.json +1 -1
  4. package/release/smoosic.js +7 -7
  5. package/src/application/configuration.ts +1 -1
  6. package/src/application/exports.ts +2 -2
  7. package/src/render/audio/musicCursor.ts +3 -1
  8. package/src/smo/data/noteModifiers.ts +43 -0
  9. package/src/smo/data/scoreModifiers.ts +11 -3
  10. package/src/ui/dialogs/endings.ts +1 -1
  11. package/src/ui/dialogs/preferences.ts +11 -0
  12. package/release/library/BachCantataBMV68.json +0 -1
  13. package/release/library/BachCantataBMV682.json +0 -1
  14. package/release/library/Beethoven_AnDieFerneGeliebte.xml +0 -4271
  15. package/release/library/Dichterliebe01.xml +0 -7613
  16. package/release/library/MozartTrio.xml +0 -3498
  17. package/release/library/Mozart_AnChloe.xml +0 -3986
  18. package/release/library/Postillionlied.json +0 -1
  19. package/release/library/ScottJoplin_The_Entertainer.xml +0 -20741
  20. package/release/library/Yama2.json +0 -1
  21. package/release/library/bigband/Bilongo-Mandinga.json +0 -1
  22. package/release/library/bigband/Plena.json +0 -1
  23. package/release/library/bigband/Poinciana.json +0 -1
  24. package/release/library/bigband/child who drums.json +0 -1
  25. package/release/library/cp/Another Hairdo.mxl +0 -0
  26. package/release/library/cp/Anthropology Eb.mxl +0 -0
  27. package/release/library/cp/Au Privave No 1 Eb.mxl +0 -0
  28. package/release/library/cp/Au Privave No 2 Eb.mxl +0 -0
  29. package/release/library/cp/Back Home Blues.mxl +0 -0
  30. package/release/library/cp/Ballade.mxl +0 -0
  31. package/release/library/cp/Billies Bounce.mxl +0 -0
  32. package/release/library/cp/Bloomdido.mxl +0 -0
  33. package/release/library/cp/Blues for Alice.mxl +0 -0
  34. package/release/library/cp/Celerity Alto.mxl +0 -0
  35. package/release/library/cp/Celerity.mxl +0 -0
  36. package/release/library/cp/Cheryl F07.mxl +0 -0
  37. package/release/library/cp/Cheryl.mxl +0 -0
  38. package/release/library/cp/Confirmation Eb 09.mxl +0 -0
  39. package/release/library/cp/Cool Blues Alto1.mxl +0 -0
  40. package/release/library/cp/Dewey Square.mxl +0 -0
  41. package/release/library/cp/Donna Lee Eb.musicxml +0 -9134
  42. package/release/library/cp/Donna Lee Eb.mxl +0 -0
  43. package/release/library/cp/Ko Ko Eb.mxl +0 -0
  44. package/release/library/cp/Little Benny.mxl +0 -0
  45. package/release/library/cp/Moose the Mooche Eb.mxl +0 -0
  46. package/release/library/cp/Night in Tunisia solo.mxl +0 -0
  47. package/release/library/cp/Nows the Time No 1.mxl +0 -0
  48. package/release/library/cp/Nows the Time No 2.mxl +0 -0
  49. package/release/library/cp/Ornithology Eb.mxl +0 -0
  50. package/release/library/cp/Parkers Mood.mxl +0 -0
  51. package/release/library/cp/Passport.mxl +0 -0
  52. package/release/library/cp/Red Cross.mxl +0 -0
  53. package/release/library/cp/Scrapple from the Apple Eb.mxl +0 -0
  54. package/release/library/cp/Shaw Nuff Eb.mxl +0 -0
  55. package/release/library/cp/Shaw Nuff.mxl +0 -0
  56. package/release/library/cp/She Rote No1.mxl +0 -0
  57. package/release/library/cp/She Rote No2.mxl +0 -0
  58. package/release/library/cp/The Bird 07.mxl +0 -0
  59. package/release/library/cp/The Bird.mxl +0 -0
  60. package/release/library/cp/Warming Up A Riff.mxl +0 -0
  61. package/release/library/cp/Yardbird Suite (alto solo).mxl +0 -0
  62. package/release/library/cp/Yardbird Suite Eb Alto+Bass+Chords.mxl +0 -0
  63. package/release/library/cp/Yardbird Suite Eb.mxl +0 -0
  64. package/release/library/cp/cplist.txt +0 -40
  65. package/release/library/hymns/AdesteFideles.json +0 -1
  66. package/release/library/hymns/Heshallfeed.json +0 -1
  67. package/release/library/hymns/Hyfrydol.json +0 -1
  68. package/release/library/hymns/Lakeshore.json +0 -1
  69. package/release/library/hymns/Precious Lord.json +0 -1
  70. package/release/library/hymns/Shade.json +0 -1
  71. package/release/library/hymns/SpiritofLivingGod.json +0 -1
  72. package/release/library/hymns/SweetSpirit.json +0 -1
  73. package/release/library/hymns/We3kings.json +0 -1
  74. package/release/library/hymns/Weisse-Flaggen.json +0 -1
  75. package/release/library/hymns/WorldPeacePrayer.json +0 -1
  76. package/release/library/hymns/balm.json +0 -1
  77. package/release/library/hymns/cplist.txt +0 -9
  78. package/release/library/hymns/nearerMyGod.json +0 -1
  79. package/release/library/links/bigband.json +0 -47
  80. package/release/library/links/cptranscriptions.json +0 -365
  81. package/release/library/links/hymns.json +0 -78
  82. package/release/library/links/messiah.json +0 -33
  83. package/release/library/links/musicxml.json +0 -62
  84. package/release/library/links/piano.json +0 -59
  85. package/release/library/links/samples.json +0 -75
  86. package/release/library/links/smoLibrary.json +0 -68
  87. package/release/library/links/soprano.json +0 -51
  88. package/release/library/links/transcriptions.json +0 -32
  89. package/release/library/links/trumpet.json +0 -76
  90. package/release/library/messiah/Messiah-I-1.json +0 -1
  91. package/release/library/messiah/Messiah-I-2.json +0 -1
  92. package/release/library/miditest/keytime.mid +0 -0
  93. package/release/library/miditest/ties.mid +0 -0
  94. package/release/library/miditest/triplet.mid +0 -0
  95. package/release/library/piano/20seconds.json +0 -1
  96. package/release/library/piano/BachInvention.json +0 -1
  97. package/release/library/piano/BachWTC-3.json +0 -1
  98. package/release/library/piano/Gnossienne3-3.json +0 -1
  99. package/release/library/piano/Gymnopedie No 1 (8).json +0 -1
  100. package/release/library/piano/Joplin-Entertainer.json +0 -1
  101. package/release/library/soprano/Gesu Bambino.json +0 -1
  102. package/release/library/soprano/LaudamusTrumpetSoprano.json +0 -1
  103. package/release/library/soprano/Postillionlied.json +0 -1
  104. package/release/library/soprano/Solovey.json +0 -1
  105. package/release/library/soprano/ThereIsABalm.json +0 -1
  106. package/release/library/trumpet/2min.json +0 -1
  107. package/release/library/trumpet/BachAirOrganTpt.json +0 -1
  108. package/release/library/trumpet/BachCantataBMV68.json +0 -1
  109. package/release/library/trumpet/BeethovenOp21-old.json +0 -1
  110. package/release/library/trumpet/BeethovenOp21.json +0 -1
  111. package/release/library/trumpet/Fireworks - trumpets.json +0 -1
  112. package/release/library/trumpet/HymnFreedom.json +0 -1
  113. package/release/library/trumpet/TelemannSonata3rd.json +0 -1
  114. package/release/library/xml/Gnossienne_No._3.mxl +0 -0
  115. package/release/library/xml/M_Book_1_Part_1_The_Open_Well_Tempered_Clavier.mxl +0 -0
  116. package/release/library/xml/lg-177775783.xml +0 -8674
@@ -86,7 +86,7 @@ export interface SmoConfigurationParams {
86
86
  leftControls: 'controls-left',
87
87
  topControls: 'controls-top',
88
88
  scoreDomContainer: 'smo-scroll-region',
89
- libraryUrl: 'https://smoosic.github.io/Smoosic/release/library/links/smoLibrary.json',
89
+ libraryUrl: 'https://smoosic.github.io/SmoScores/links/smoLibrary.json',
90
90
  demonPollTime: 50, // how often we poll the score to see if it changed
91
91
  idleRedrawTime: 1000, // maximum time between score modification and render
92
92
  ribbonLayout: defaultRibbonLayout.ribbons,
@@ -40,7 +40,7 @@ import { SuiInstrumentDialog } from '../ui/dialogs/instrument';
40
40
  import { SuiTimeSignatureDialog } from '../ui/dialogs/timeSignature';
41
41
  import { SuiTempoDialog } from '../ui/dialogs/tempo';
42
42
  import { SuiNoteHeadAdapter, SuiNoteHeadDialog, SuiNoteHeadButtonComponent, SuiStemButtonComponent } from '../ui/dialogs/noteHead';
43
- import { SuiEndingsAdapter, SuiEndingsDialog,
43
+ import { SuiEndingsAdapter, SuiEndingsDialog, endingsButtonFactory,
44
44
  SuiEndBarButtonComponent, SuiStartBarButtonComponent, SuiRepeatSymbolButtonComponent } from '../ui/dialogs/endings';
45
45
  import { SuiScoreIdentificationDialog } from '../ui/dialogs/scoreId';
46
46
  import { SuiScorePreferencesDialog } from '../ui/dialogs/preferences';
@@ -365,7 +365,7 @@ export const Smo = {
365
365
  SuiArticulationDialog, SuiArticulationButtonComponent, SuiArticulationAdapter,
366
366
  SuiMicrotoneAdapter, SuiMicrotoneButtonComponent, SuiMicrotoneDialog,
367
367
  SuiNoteHeadAdapter, SuiNoteHeadDialog, SuiStemButtonComponent, SuiNoteHeadButtonComponent,
368
- SuiEndingsAdapter, SuiEndingsDialog,
368
+ SuiEndingsAdapter, SuiEndingsDialog, endingsButtonFactory,
369
369
  SuiEndBarButtonComponent, SuiStartBarButtonComponent, SuiRepeatSymbolButtonComponent,
370
370
  SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog, SuiSaveVexDialog,
371
371
  SuiSaveMidiDialog, SuiDialogBase, createAndDisplayDialog,
@@ -81,6 +81,8 @@ export const defaultClearAudioAnimationHandler = (delay: number) => {
81
81
  ctx.closeGroup();
82
82
  ctx.restore();
83
83
  layoutDebug.updatePlayDebug(selector, measure.svg.logicalBox);
84
- scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox);
84
+ if (view.score.preferences.autoScrollPlayback) {
85
+ scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox);
86
+ }
85
87
  }
86
88
  }
@@ -1022,7 +1022,49 @@ export class SmoLyric extends SmoNoteModifierBase {
1022
1022
  }
1023
1023
  }
1024
1024
  }
1025
+ /**
1026
+ * Used to create a {@link SmoBarline}
1027
+ * @category SmoObject
1028
+ */
1029
+
1030
+ export interface SmoNoteBarParams {
1031
+ barline: number
1032
+ }
1033
+
1034
+ export interface SmoNoteBarParamsSer extends SmoNoteBarParams {
1035
+ ctor: string,
1036
+ barline: number
1037
+ }
1025
1038
 
1039
+ export class SmoNoteBar extends SmoNoteModifierBase {
1040
+ barline: number = SmoNoteBar.defaults.barline;
1041
+ static get defaults(): SmoNoteBarParams {
1042
+ return { barline: SmoNoteBar.barlines.noBar }
1043
+ }
1044
+ static get parameterArray() {
1045
+ return ['barline'];
1046
+ }
1047
+ static readonly barlines: Record<string, number> = {
1048
+ singleBar: 0,
1049
+ doubleBar: 1,
1050
+ endBar: 2,
1051
+ startRepeat: 3,
1052
+ endRepeat: 4,
1053
+ noBar: 5
1054
+ }
1055
+ constructor(parameters: SmoNoteBarParams) {
1056
+ super('SmoNoteBar');
1057
+ smoSerialize.serializedMerge(SmoNoteBar.parameterArray, SmoNoteBar.defaults, this);
1058
+ smoSerialize.serializedMerge(SmoLyric.parameterArray, parameters, this);
1059
+ }
1060
+ serialize(): SmoNoteBarParamsSer {
1061
+ const parameters: Partial<SmoNoteBarParamsSer> = {};
1062
+ smoSerialize.serializedMergeNonDefault(SmoNoteBar.defaults,
1063
+ SmoNoteBar.parameterArray, this, parameters);
1064
+ parameters.ctor = 'SmoNoteBar';
1065
+ return parameters as SmoNoteBarParamsSer;
1066
+ }
1067
+ }
1026
1068
  /**
1027
1069
  * The persisted bits of {@link SmoDynamicTextParams}
1028
1070
  * @category serialization
@@ -1205,6 +1247,7 @@ export const noteModifierDynamicCtorInit = () => {
1205
1247
  SmoDynamicCtor['SmoGraceNote'] = (params: GraceNoteParams) => new SmoGraceNote(params);
1206
1248
  SmoDynamicCtor['SmoArticulation'] = (params: SmoArticulationParameters) => new SmoArticulation(params);
1207
1249
  SmoDynamicCtor['SmoLyric'] = (params: SmoLyricParams) => new SmoLyric(params);
1250
+ SmoDynamicCtor['SmoNoteBar'] = (params: SmoNoteBarParams) => new SmoNoteBar(params);
1208
1251
  SmoDynamicCtor['SmoDynamicText'] = (params: SmoDynamicTextParams) => new SmoDynamicText(params);
1209
1252
  SmoDynamicCtor['SmoTabNote'] = (params: SmoTabNoteParams) => new SmoTabNote(params);
1210
1253
  SmoDynamicCtor['SmoClefChange'] = (params: SmoClefChangeParams) => new SmoClefChange(params);
@@ -124,9 +124,10 @@ export interface SmoScoreInfo {
124
124
  }
125
125
 
126
126
 
127
- export type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore';
127
+ export type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore' | 'autoScrollPlayback';
128
128
  export type SmoScorePreferenceNumber = 'defaultDupleDuration' | 'defaultTripleDuration';
129
- export const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines', 'transposingScore'];
129
+ export const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines',
130
+ 'transposingScore', 'autoScrollPlayback'];
130
131
  export const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDupleDuration', 'defaultTripleDuration'];
131
132
  /**
132
133
  * Global score/program behavior preferences, see below for parameters
@@ -135,6 +136,7 @@ export const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDu
135
136
  export interface SmoScorePreferencesParams {
136
137
  autoPlay: boolean;
137
138
  autoAdvance: boolean;
139
+ autoScrollPlayback: boolean;
138
140
  defaultDupleDuration: number;
139
141
  defaultTripleDuration: number;
140
142
  showPiano: boolean;
@@ -159,6 +161,7 @@ export class SmoScorePreferences {
159
161
  defaultTripleDuration: number = 6144;
160
162
  showPiano: boolean = false;
161
163
  hideEmptyLines: boolean = false;
164
+ autoScrollPlayback: boolean = true;
162
165
  transposingScore: boolean = false;
163
166
  static get defaults(): SmoScorePreferencesParams {
164
167
  return {
@@ -166,19 +169,24 @@ export class SmoScorePreferences {
166
169
  autoAdvance: true,
167
170
  defaultDupleDuration: 4096,
168
171
  defaultTripleDuration: 6144,
172
+ autoScrollPlayback: true,
169
173
  showPiano: false,
170
174
  hideEmptyLines: false,
171
175
  transposingScore: false
172
176
  };
173
177
  }
174
178
  constructor(params: SmoScorePreferencesParams) {
175
- if (params) {
179
+ if (params) {
176
180
  SmoScorePreferenceBools.forEach((bb) => {
177
181
  this[bb] = params[bb];
178
182
  });
179
183
  SmoScorePreferenceNumbers.forEach((nn) => {
180
184
  this[nn] = params[nn];
181
185
  });
186
+ // legacy, added later
187
+ if (typeof(params.autoScrollPlayback) === 'undefined') {
188
+ this.autoScrollPlayback = true;
189
+ }
182
190
  }
183
191
  }
184
192
  serialize(): SmoScorePreferencesParams {
@@ -13,7 +13,7 @@ import { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComp
13
13
  * Buttons with ending or repeat functions
14
14
  * @returns SuiButtonArrayParameters
15
15
  */
16
- const endingsButtonFactory: getButtonsFcn = () => {
16
+ export const endingsButtonFactory: getButtonsFcn = () => {
17
17
  const params: SuiButtonArrayParameters = {
18
18
  label: 'Measure Endings',
19
19
  rows: [{
@@ -44,6 +44,13 @@ export class SuiScorePreferencesAdapter extends SuiComponentAdapter {
44
44
  this.preferences.showPiano = value;
45
45
  this.view.updateScorePreferences(this.preferences);
46
46
  }
47
+ get autoScrollPlayback(): boolean {
48
+ return this.preferences.autoScrollPlayback;
49
+ }
50
+ set autoScrollPlayback(value: boolean) {
51
+ this.preferences.autoScrollPlayback = value;
52
+ this.view.updateScorePreferences(this.preferences);
53
+ }
47
54
  get hideEmptyLines(): boolean {
48
55
  return this.preferences.hideEmptyLines;
49
56
  }
@@ -102,6 +109,10 @@ export class SuiScorePreferencesDialog extends SuiDialogAdapterBase<SuiScorePref
102
109
  smoName: 'autoPlay',
103
110
  control: 'SuiToggleComponent',
104
111
  label: 'Auto-play sounds for note entry'
112
+ }, {
113
+ smoName: 'autoScrollPlayback',
114
+ control: 'SuiToggleComponent',
115
+ label: 'Auto-Scroll Playback'
105
116
  }, {
106
117
  smoName: 'showPiano',
107
118
  control: 'SuiToggleComponent',