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.
- package/README.md +1 -0
- package/build/smoosic.js +7 -7
- package/package.json +1 -1
- package/release/smoosic.js +7 -7
- package/src/application/configuration.ts +1 -1
- package/src/application/exports.ts +2 -2
- package/src/render/audio/musicCursor.ts +3 -1
- package/src/smo/data/noteModifiers.ts +43 -0
- package/src/smo/data/scoreModifiers.ts +11 -3
- package/src/ui/dialogs/endings.ts +1 -1
- package/src/ui/dialogs/preferences.ts +11 -0
- package/release/library/BachCantataBMV68.json +0 -1
- package/release/library/BachCantataBMV682.json +0 -1
- package/release/library/Beethoven_AnDieFerneGeliebte.xml +0 -4271
- package/release/library/Dichterliebe01.xml +0 -7613
- package/release/library/MozartTrio.xml +0 -3498
- package/release/library/Mozart_AnChloe.xml +0 -3986
- package/release/library/Postillionlied.json +0 -1
- package/release/library/ScottJoplin_The_Entertainer.xml +0 -20741
- package/release/library/Yama2.json +0 -1
- package/release/library/bigband/Bilongo-Mandinga.json +0 -1
- package/release/library/bigband/Plena.json +0 -1
- package/release/library/bigband/Poinciana.json +0 -1
- package/release/library/bigband/child who drums.json +0 -1
- package/release/library/cp/Another Hairdo.mxl +0 -0
- package/release/library/cp/Anthropology Eb.mxl +0 -0
- package/release/library/cp/Au Privave No 1 Eb.mxl +0 -0
- package/release/library/cp/Au Privave No 2 Eb.mxl +0 -0
- package/release/library/cp/Back Home Blues.mxl +0 -0
- package/release/library/cp/Ballade.mxl +0 -0
- package/release/library/cp/Billies Bounce.mxl +0 -0
- package/release/library/cp/Bloomdido.mxl +0 -0
- package/release/library/cp/Blues for Alice.mxl +0 -0
- package/release/library/cp/Celerity Alto.mxl +0 -0
- package/release/library/cp/Celerity.mxl +0 -0
- package/release/library/cp/Cheryl F07.mxl +0 -0
- package/release/library/cp/Cheryl.mxl +0 -0
- package/release/library/cp/Confirmation Eb 09.mxl +0 -0
- package/release/library/cp/Cool Blues Alto1.mxl +0 -0
- package/release/library/cp/Dewey Square.mxl +0 -0
- package/release/library/cp/Donna Lee Eb.musicxml +0 -9134
- package/release/library/cp/Donna Lee Eb.mxl +0 -0
- package/release/library/cp/Ko Ko Eb.mxl +0 -0
- package/release/library/cp/Little Benny.mxl +0 -0
- package/release/library/cp/Moose the Mooche Eb.mxl +0 -0
- package/release/library/cp/Night in Tunisia solo.mxl +0 -0
- package/release/library/cp/Nows the Time No 1.mxl +0 -0
- package/release/library/cp/Nows the Time No 2.mxl +0 -0
- package/release/library/cp/Ornithology Eb.mxl +0 -0
- package/release/library/cp/Parkers Mood.mxl +0 -0
- package/release/library/cp/Passport.mxl +0 -0
- package/release/library/cp/Red Cross.mxl +0 -0
- package/release/library/cp/Scrapple from the Apple Eb.mxl +0 -0
- package/release/library/cp/Shaw Nuff Eb.mxl +0 -0
- package/release/library/cp/Shaw Nuff.mxl +0 -0
- package/release/library/cp/She Rote No1.mxl +0 -0
- package/release/library/cp/She Rote No2.mxl +0 -0
- package/release/library/cp/The Bird 07.mxl +0 -0
- package/release/library/cp/The Bird.mxl +0 -0
- package/release/library/cp/Warming Up A Riff.mxl +0 -0
- package/release/library/cp/Yardbird Suite (alto solo).mxl +0 -0
- package/release/library/cp/Yardbird Suite Eb Alto+Bass+Chords.mxl +0 -0
- package/release/library/cp/Yardbird Suite Eb.mxl +0 -0
- package/release/library/cp/cplist.txt +0 -40
- package/release/library/hymns/AdesteFideles.json +0 -1
- package/release/library/hymns/Heshallfeed.json +0 -1
- package/release/library/hymns/Hyfrydol.json +0 -1
- package/release/library/hymns/Lakeshore.json +0 -1
- package/release/library/hymns/Precious Lord.json +0 -1
- package/release/library/hymns/Shade.json +0 -1
- package/release/library/hymns/SpiritofLivingGod.json +0 -1
- package/release/library/hymns/SweetSpirit.json +0 -1
- package/release/library/hymns/We3kings.json +0 -1
- package/release/library/hymns/Weisse-Flaggen.json +0 -1
- package/release/library/hymns/WorldPeacePrayer.json +0 -1
- package/release/library/hymns/balm.json +0 -1
- package/release/library/hymns/cplist.txt +0 -9
- package/release/library/hymns/nearerMyGod.json +0 -1
- package/release/library/links/bigband.json +0 -47
- package/release/library/links/cptranscriptions.json +0 -365
- package/release/library/links/hymns.json +0 -78
- package/release/library/links/messiah.json +0 -33
- package/release/library/links/musicxml.json +0 -62
- package/release/library/links/piano.json +0 -59
- package/release/library/links/samples.json +0 -75
- package/release/library/links/smoLibrary.json +0 -68
- package/release/library/links/soprano.json +0 -51
- package/release/library/links/transcriptions.json +0 -32
- package/release/library/links/trumpet.json +0 -76
- package/release/library/messiah/Messiah-I-1.json +0 -1
- package/release/library/messiah/Messiah-I-2.json +0 -1
- package/release/library/miditest/keytime.mid +0 -0
- package/release/library/miditest/ties.mid +0 -0
- package/release/library/miditest/triplet.mid +0 -0
- package/release/library/piano/20seconds.json +0 -1
- package/release/library/piano/BachInvention.json +0 -1
- package/release/library/piano/BachWTC-3.json +0 -1
- package/release/library/piano/Gnossienne3-3.json +0 -1
- package/release/library/piano/Gymnopedie No 1 (8).json +0 -1
- package/release/library/piano/Joplin-Entertainer.json +0 -1
- package/release/library/soprano/Gesu Bambino.json +0 -1
- package/release/library/soprano/LaudamusTrumpetSoprano.json +0 -1
- package/release/library/soprano/Postillionlied.json +0 -1
- package/release/library/soprano/Solovey.json +0 -1
- package/release/library/soprano/ThereIsABalm.json +0 -1
- package/release/library/trumpet/2min.json +0 -1
- package/release/library/trumpet/BachAirOrganTpt.json +0 -1
- package/release/library/trumpet/BachCantataBMV68.json +0 -1
- package/release/library/trumpet/BeethovenOp21-old.json +0 -1
- package/release/library/trumpet/BeethovenOp21.json +0 -1
- package/release/library/trumpet/Fireworks - trumpets.json +0 -1
- package/release/library/trumpet/HymnFreedom.json +0 -1
- package/release/library/trumpet/TelemannSonata3rd.json +0 -1
- package/release/library/xml/Gnossienne_No._3.mxl +0 -0
- package/release/library/xml/M_Book_1_Part_1_The_Open_Well_Tempered_Clavier.mxl +0 -0
- 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/
|
|
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
|
-
|
|
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',
|
|
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',
|