smoosic 1.0.24 → 1.0.26
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/build/smoosic.js +1 -1
- package/package.json +1 -1
- package/release/smoosic.js +1 -1
- package/release/styles/ribbon.css +5 -10
- package/src/application/exports.ts +1 -0
- package/src/styles/ribbon.css +5 -10
- package/types/src/application/application.d.ts +102 -102
- package/types/src/application/common.d.ts +74 -74
- package/types/src/application/configuration.d.ts +74 -74
- package/types/src/application/dom.d.ts +8 -8
- package/types/src/application/dynamicInit.d.ts +1 -1
- package/types/src/application/eventHandler.d.ts +78 -78
- package/types/src/application/exports.d.ts +494 -493
- package/types/src/application/generateVexTests.d.ts +10 -10
- package/types/src/application/keyCommands.d.ts +90 -90
- package/types/src/common/bootstrap.bundle.d.ts +1138 -1138
- package/types/src/common/htmlHelpers.d.ts +105 -105
- package/types/src/common/jszip.d.ts +2 -2
- package/types/src/common/midi-parser.d.ts +38 -38
- package/types/src/common/promiseHelpers.d.ts +30 -30
- package/types/src/common/serializationHelpers.d.ts +29 -29
- package/types/src/common/textformatter.d.ts +140 -140
- package/types/src/common/vex.d.ts +222 -222
- package/types/src/render/audio/musicCursor.d.ts +25 -25
- package/types/src/render/audio/oscillator.d.ts +98 -98
- package/types/src/render/audio/player.d.ts +141 -141
- package/types/src/render/audio/samples.d.ts +56 -56
- package/types/src/render/sui/configuration.d.ts +12 -12
- package/types/src/render/sui/formatter.d.ts +151 -151
- package/types/src/render/sui/layoutDebug.d.ts +43 -43
- package/types/src/render/sui/mapper.d.ts +116 -116
- package/types/src/render/sui/piano.d.ts +46 -46
- package/types/src/render/sui/renderState.d.ts +88 -88
- package/types/src/render/sui/scoreRender.d.ts +93 -93
- package/types/src/render/sui/scoreView.d.ts +267 -267
- package/types/src/render/sui/scoreViewOperations.d.ts +594 -594
- package/types/src/render/sui/scroller.d.ts +34 -34
- package/types/src/render/sui/svgHelpers.d.ts +85 -85
- package/types/src/render/sui/svgPageMap.d.ts +318 -318
- package/types/src/render/sui/textEdit.d.ts +310 -310
- package/types/src/render/sui/textRender.d.ts +189 -189
- package/types/src/render/sui/tracker.d.ts +90 -90
- package/types/src/render/vex/glyphDimensions.d.ts +23 -23
- package/types/src/render/vex/smoAdapter.d.ts +46 -46
- package/types/src/render/vex/toVex.d.ts +13 -13
- package/types/src/render/vex/vxMeasure.d.ts +95 -95
- package/types/src/render/vex/vxNote.d.ts +55 -55
- package/types/src/render/vex/vxSystem.d.ts +64 -64
- package/types/src/smo/data/common.d.ts +220 -220
- package/types/src/smo/data/measure.d.ts +510 -510
- package/types/src/smo/data/measureModifiers.d.ts +506 -506
- package/types/src/smo/data/music.d.ts +438 -438
- package/types/src/smo/data/note.d.ts +485 -485
- package/types/src/smo/data/noteModifiers.d.ts +590 -590
- package/types/src/smo/data/partInfo.d.ts +162 -162
- package/types/src/smo/data/score.d.ts +395 -395
- package/types/src/smo/data/scoreModifiers.d.ts +433 -433
- package/types/src/smo/data/scoreText.d.ts +277 -277
- package/types/src/smo/data/staffModifiers.d.ts +767 -767
- package/types/src/smo/data/systemStaff.d.ts +238 -238
- package/types/src/smo/data/tuplet.d.ts +146 -146
- package/types/src/smo/midi/midiToSmo.d.ts +198 -198
- package/types/src/smo/midi/smoToMidi.d.ts +23 -23
- package/types/src/smo/mxml/smoToXml.d.ts +165 -165
- package/types/src/smo/mxml/xmlHelpers.d.ts +140 -140
- package/types/src/smo/mxml/xmlState.d.ts +257 -257
- package/types/src/smo/mxml/xmlToSmo.d.ts +92 -92
- package/types/src/smo/xform/beamers.d.ts +46 -46
- package/types/src/smo/xform/copypaste.d.ts +99 -99
- package/types/src/smo/xform/operations.d.ts +127 -127
- package/types/src/smo/xform/roadmap.d.ts +70 -70
- package/types/src/smo/xform/selections.d.ts +153 -153
- package/types/src/smo/xform/tickDuration.d.ts +155 -155
- package/types/src/smo/xform/tickMap.d.ts +34 -34
- package/types/src/smo/xform/undo.d.ts +142 -142
- package/types/src/smo/xform/updateAudio.d.ts +9 -9
- package/types/src/styles/font_metrics/Commissioner-Medium-Metrics.d.ts +871 -871
- package/types/src/styles/font_metrics/ConcertOne-Regular.d.ts +871 -871
- package/types/src/styles/font_metrics/Merriweather-Regular.d.ts +871 -871
- package/types/src/styles/font_metrics/arial_metrics.d.ts +870 -870
- package/types/src/styles/font_metrics/ssp-sans-metrics.d.ts +871 -871
- package/types/src/styles/font_metrics/ssp-serif-metrics.d.ts +871 -871
- package/types/src/styles/font_metrics/times_metrics.d.ts +870 -870
- package/types/src/ui/buttons/button.d.ts +95 -95
- package/types/src/ui/buttons/collapsable.d.ts +42 -42
- package/types/src/ui/buttons/display.d.ts +23 -23
- package/types/src/ui/buttons/ribbon.d.ts +76 -76
- package/types/src/ui/common.d.ts +45 -45
- package/types/src/ui/composable/draggable.d.ts +12 -12
- package/types/src/ui/configuration.d.ts +31 -31
- package/types/src/ui/dialogs/adapter.d.ts +107 -107
- package/types/src/ui/dialogs/addMeasure.d.ts +20 -20
- package/types/src/ui/dialogs/arpeggio.d.ts +2 -2
- package/types/src/ui/dialogs/articulation.d.ts +2 -2
- package/types/src/ui/dialogs/audioSettings.d.ts +32 -32
- package/types/src/ui/dialogs/chordChange.d.ts +35 -35
- package/types/src/ui/dialogs/clefChange.d.ts +2 -2
- package/types/src/ui/dialogs/components/baseComponent.d.ts +158 -158
- package/types/src/ui/dialogs/components/button.d.ts +54 -54
- package/types/src/ui/dialogs/components/buttonArray.d.ts +101 -101
- package/types/src/ui/dialogs/components/checkdrop.d.ts +27 -27
- package/types/src/ui/dialogs/components/dragText.d.ts +27 -27
- package/types/src/ui/dialogs/components/dropdown.d.ts +78 -78
- package/types/src/ui/dialogs/components/fileDownload.d.ts +28 -28
- package/types/src/ui/dialogs/components/fontComponent.d.ts +32 -32
- package/types/src/ui/dialogs/components/noteText.d.ts +98 -98
- package/types/src/ui/dialogs/components/pitch.d.ts +95 -95
- package/types/src/ui/dialogs/components/rocker.d.ts +66 -66
- package/types/src/ui/dialogs/components/staffComponents.d.ts +77 -77
- package/types/src/ui/dialogs/components/textCheck.d.ts +38 -38
- package/types/src/ui/dialogs/components/textInPlace.d.ts +90 -90
- package/types/src/ui/dialogs/components/textInput.d.ts +58 -58
- package/types/src/ui/dialogs/components/tie.d.ts +41 -41
- package/types/src/ui/dialogs/components/toggle.d.ts +53 -53
- package/types/src/ui/dialogs/components/tree.d.ts +46 -46
- package/types/src/ui/dialogs/customTuplets.d.ts +25 -25
- package/types/src/ui/dialogs/dialog.d.ts +201 -201
- package/types/src/ui/dialogs/durations.d.ts +2 -2
- package/types/src/ui/dialogs/dynamics.d.ts +37 -37
- package/types/src/ui/dialogs/endings.d.ts +61 -61
- package/types/src/ui/dialogs/factory.d.ts +15 -15
- package/types/src/ui/dialogs/fileDialogs.d.ts +4 -4
- package/types/src/ui/dialogs/fonts.d.ts +2 -2
- package/types/src/ui/dialogs/globalLayout.d.ts +2 -2
- package/types/src/ui/dialogs/gracenote.d.ts +2 -2
- package/types/src/ui/dialogs/hairpin.d.ts +35 -35
- package/types/src/ui/dialogs/instrument.d.ts +3 -3
- package/types/src/ui/dialogs/keySignature.d.ts +33 -33
- package/types/src/ui/dialogs/library.d.ts +70 -70
- package/types/src/ui/dialogs/lyric.d.ts +39 -39
- package/types/src/ui/dialogs/measureFormat.d.ts +52 -52
- package/types/src/ui/dialogs/microtones.d.ts +2 -2
- package/types/src/ui/dialogs/noteHead.d.ts +2 -2
- package/types/src/ui/dialogs/ornament.d.ts +2 -2
- package/types/src/ui/dialogs/pageLayout.d.ts +2 -2
- package/types/src/ui/dialogs/partInfo.d.ts +2 -2
- package/types/src/ui/dialogs/pedalMarking.d.ts +35 -35
- package/types/src/ui/dialogs/pitch.d.ts +2 -2
- package/types/src/ui/dialogs/preferences.d.ts +2 -2
- package/types/src/ui/dialogs/scoreId.d.ts +2 -2
- package/types/src/ui/dialogs/scoreView.d.ts +2 -2
- package/types/src/ui/dialogs/slur.d.ts +57 -57
- package/types/src/ui/dialogs/staffGroup.d.ts +2 -2
- package/types/src/ui/dialogs/tabNote.d.ts +32 -32
- package/types/src/ui/dialogs/tabStave.d.ts +43 -43
- package/types/src/ui/dialogs/tempo.d.ts +50 -50
- package/types/src/ui/dialogs/textBlock.d.ts +61 -61
- package/types/src/ui/dialogs/textBracket.d.ts +35 -35
- package/types/src/ui/dialogs/tie.d.ts +41 -41
- package/types/src/ui/dialogs/timeSignature.d.ts +34 -34
- package/types/src/ui/dialogs/transposeScore.d.ts +2 -2
- package/types/src/ui/dialogs/volta.d.ts +40 -40
- package/types/src/ui/eventSource.d.ts +63 -63
- package/types/src/ui/exceptions.d.ts +12 -12
- package/types/src/ui/fileio/fileInput.d.ts +12 -12
- package/types/src/ui/fileio/library.d.ts +40 -40
- package/types/src/ui/fileio/xhrLoader.d.ts +18 -18
- package/types/src/ui/help.d.ts +22 -22
- package/types/src/ui/i18n/language.d.ts +37 -37
- package/types/src/ui/i18n/language_ar.d.ts +5 -5
- package/types/src/ui/i18n/language_de.d.ts +1 -1
- package/types/src/ui/i18n/language_en.d.ts +18 -18
- package/types/src/ui/i18n/translationEditor.d.ts +14 -14
- package/types/src/ui/keyBindings/default/editorKeys.d.ts +7 -7
- package/types/src/ui/keyBindings/default/trackerKeys.d.ts +7 -7
- package/types/src/ui/menus/beams.d.ts +13 -13
- package/types/src/ui/menus/edit.d.ts +8 -8
- package/types/src/ui/menus/file.d.ts +26 -26
- package/types/src/ui/menus/help.d.ts +8 -8
- package/types/src/ui/menus/keySignature.d.ts +13 -13
- package/types/src/ui/menus/language.d.ts +12 -12
- package/types/src/ui/menus/manager.d.ts +57 -57
- package/types/src/ui/menus/measure.d.ts +8 -8
- package/types/src/ui/menus/menu.d.ts +136 -136
- package/types/src/ui/menus/note.d.ts +8 -8
- package/types/src/ui/menus/partSelection.d.ts +19 -19
- package/types/src/ui/menus/parts.d.ts +50 -50
- package/types/src/ui/menus/score.d.ts +20 -20
- package/types/src/ui/menus/staffModifier.d.ts +21 -21
- package/types/src/ui/menus/text.d.ts +8 -8
- package/types/src/ui/menus/timeSignature.d.ts +12 -12
- package/types/src/ui/menus/tuplets.d.ts +13 -13
- package/types/src/ui/menus/voices.d.ts +8 -8
- package/types/src/ui/modalDialogs.d.ts +1 -1
- package/types/src/ui/navigation.d.ts +15 -15
- package/types/src/ui/qwerty.d.ts +41 -41
- package/types/src/ui/ribbonLayout/default/defaultRibbon.d.ts +15 -15
- package/types/src/ui/ribbonLayout/default/tabletRibbon.d.ts +22 -22
- package/types/typedoc.d.ts +158 -158
|
@@ -1,198 +1,198 @@
|
|
|
1
|
-
import { Clef, Pitch } from "../data/common";
|
|
2
|
-
import { SmoMeasure } from "../data/measure";
|
|
3
|
-
import { SmoTempoText, TimeSignature } from "../data/measureModifiers";
|
|
4
|
-
import { SmoNote } from "../data/note";
|
|
5
|
-
import { SmoScore } from "../data/score";
|
|
6
|
-
import { SmoTuplet } from "../data/tuplet";
|
|
7
|
-
export type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' | 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' | 'sequencerSpecific' | 'unknownMeta' | 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';
|
|
8
|
-
/**
|
|
9
|
-
* These are the midi events as defined by the parser.
|
|
10
|
-
* @category serialization
|
|
11
|
-
*/
|
|
12
|
-
export interface MidiTrackEvent {
|
|
13
|
-
deltaTime: number;
|
|
14
|
-
meta?: boolean;
|
|
15
|
-
numerator?: number;
|
|
16
|
-
denominator?: number;
|
|
17
|
-
microsecondsPerBeat?: number;
|
|
18
|
-
scale?: number;
|
|
19
|
-
key?: number;
|
|
20
|
-
metronome?: number;
|
|
21
|
-
thirtyseconds?: number;
|
|
22
|
-
type: MidiEventType;
|
|
23
|
-
channel?: number;
|
|
24
|
-
noteNumber?: number;
|
|
25
|
-
velocity?: number;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @category serialization
|
|
29
|
-
*/
|
|
30
|
-
export interface RunningMetadata {
|
|
31
|
-
keySignature: string;
|
|
32
|
-
timeSignature: TimeSignature;
|
|
33
|
-
tempo: SmoTempoText;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* @category serialization
|
|
37
|
-
*/
|
|
38
|
-
export interface MidiNoteOn {
|
|
39
|
-
channel: number;
|
|
40
|
-
note: number;
|
|
41
|
-
smoIndex: number;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* @category serialization
|
|
45
|
-
*/
|
|
46
|
-
export interface MidiTupletInfo {
|
|
47
|
-
numNotes: number;
|
|
48
|
-
stemTicks: number;
|
|
49
|
-
totalTicks: number;
|
|
50
|
-
isLast: boolean;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @category serialization
|
|
54
|
-
*/
|
|
55
|
-
export interface EventSmoData {
|
|
56
|
-
pitches: Pitch[];
|
|
57
|
-
durationTicks: number;
|
|
58
|
-
tupletInfo: MidiTupletInfo | null;
|
|
59
|
-
isRest: boolean;
|
|
60
|
-
isTied: boolean;
|
|
61
|
-
timeSignature: TimeSignature;
|
|
62
|
-
tempo: SmoTempoText;
|
|
63
|
-
keySignature: string;
|
|
64
|
-
measure: number;
|
|
65
|
-
tick: number;
|
|
66
|
-
}
|
|
67
|
-
export declare function getValueForTick<T>(arg: Record<number, T>, tick: number): T;
|
|
68
|
-
/**
|
|
69
|
-
* Converts a JSON midi file to a {@link SmoScore}
|
|
70
|
-
* @category serialization
|
|
71
|
-
*/
|
|
72
|
-
export declare class MidiToSmo {
|
|
73
|
-
timeSignatureMap: Record<number, TimeSignature>;
|
|
74
|
-
tempoMap: Record<number, SmoTempoText>;
|
|
75
|
-
keySignatureMap: Record<number, string>;
|
|
76
|
-
tieMap: Record<number, number[]>;
|
|
77
|
-
timeDivision: number;
|
|
78
|
-
trackIndex: number;
|
|
79
|
-
eventIndex: number;
|
|
80
|
-
maxMeasure: number;
|
|
81
|
-
quantizeTicks: number;
|
|
82
|
-
eot: boolean;
|
|
83
|
-
midiOnNotes: Record<number, MidiNoteOn[]>;
|
|
84
|
-
midi: any;
|
|
85
|
-
static get quantizeTicksDefault(): number;
|
|
86
|
-
/**
|
|
87
|
-
* Since midi has very little metadata, we don't know the original clef.
|
|
88
|
-
* so just use the one (treble or bass) that uses the fewest ledger lines
|
|
89
|
-
* @internal
|
|
90
|
-
* @param notes notes in measure
|
|
91
|
-
* @returns
|
|
92
|
-
*/
|
|
93
|
-
static guessClefForNotes(measure: SmoMeasure): Clef;
|
|
94
|
-
/**
|
|
95
|
-
* Create an object to convert MIDI to a {@link SmoScore}
|
|
96
|
-
* @param midi the output of midi parser
|
|
97
|
-
* @param quantizeDuration ticks to quantize (1024 == 16th note)
|
|
98
|
-
*/
|
|
99
|
-
constructor(midi: any, quantizeDuration: number);
|
|
100
|
-
/**
|
|
101
|
-
* @internal
|
|
102
|
-
* @param ticks
|
|
103
|
-
* @returns
|
|
104
|
-
*/
|
|
105
|
-
getTempo(ticks: number): SmoTempoText;
|
|
106
|
-
/**
|
|
107
|
-
* @internal
|
|
108
|
-
* @param ticks
|
|
109
|
-
* @returns
|
|
110
|
-
*/
|
|
111
|
-
getTimeSignature(ticks: number): TimeSignature;
|
|
112
|
-
/**
|
|
113
|
-
* @internal
|
|
114
|
-
* @param ticks
|
|
115
|
-
* @returns
|
|
116
|
-
*/
|
|
117
|
-
getKeySignature(ticks: number): string;
|
|
118
|
-
/**
|
|
119
|
-
* Get metadata from the map for this point in the score
|
|
120
|
-
* @param ticks current point in track
|
|
121
|
-
* @returns
|
|
122
|
-
*/
|
|
123
|
-
getMetadata(ticks: number): {
|
|
124
|
-
tempo: SmoTempoText;
|
|
125
|
-
timeSignature: TimeSignature;
|
|
126
|
-
keySignature: string;
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* We process 3 types of metadata at present: time signature, tempo and keysignature.
|
|
130
|
-
* @param trackEvent
|
|
131
|
-
* @param ticks
|
|
132
|
-
*/
|
|
133
|
-
handleMetadata(trackEvent: MidiTrackEvent, ticks: number): void;
|
|
134
|
-
/**
|
|
135
|
-
* Convert from Midi PPQ to Smoosic (and vex) ticks
|
|
136
|
-
* @internal
|
|
137
|
-
*/
|
|
138
|
-
getSmoTicks(midiTicks: number): number;
|
|
139
|
-
/**
|
|
140
|
-
* @internal
|
|
141
|
-
*/
|
|
142
|
-
createNewEvent(metadata: RunningMetadata): EventSmoData;
|
|
143
|
-
/**
|
|
144
|
-
* @internal
|
|
145
|
-
*/
|
|
146
|
-
static copyEvent(o: EventSmoData): EventSmoData;
|
|
147
|
-
/**
|
|
148
|
-
* @internal
|
|
149
|
-
*/
|
|
150
|
-
addToTieMap(measureIndex: number): void;
|
|
151
|
-
/**
|
|
152
|
-
* Step 3 in the 3-step process. Quantize the note durations and convert the midi
|
|
153
|
-
* event into SmoNotes.
|
|
154
|
-
* @param events
|
|
155
|
-
* @returns
|
|
156
|
-
*/
|
|
157
|
-
createNotesFromEvents(events: EventSmoData[]): SmoMeasure[];
|
|
158
|
-
adjustTupletNotes(notes: SmoNote[], tuplet: SmoTuplet): void;
|
|
159
|
-
/**
|
|
160
|
-
* @param ticks
|
|
161
|
-
* @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0
|
|
162
|
-
*/
|
|
163
|
-
tripletType(ticks: number): number;
|
|
164
|
-
/**
|
|
165
|
-
* step 2 in the 3 step process. Divide the music up into measures based on
|
|
166
|
-
* tick duration. If there are events overlapping measures, create extra events in the
|
|
167
|
-
* new measure (hence the expand) and shorten the original event
|
|
168
|
-
* @param events
|
|
169
|
-
* @returns
|
|
170
|
-
*/
|
|
171
|
-
expandMidiEvents(events: EventSmoData[]): EventSmoData[];
|
|
172
|
-
/**
|
|
173
|
-
* Store midi on events. If the midi on or off matches an existing
|
|
174
|
-
* stored event based on channel and note, return it so it can be processed
|
|
175
|
-
* @param ev raw event
|
|
176
|
-
* @param evIndex index of processed events
|
|
177
|
-
* @returns
|
|
178
|
-
*/
|
|
179
|
-
pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null;
|
|
180
|
-
/**
|
|
181
|
-
* Step 1 in the 3-step process. Collapse midi events into
|
|
182
|
-
* a single EventSmoData for each distinct tick that contains
|
|
183
|
-
* the metadata state, a duration, and note information.
|
|
184
|
-
* @param trackEvents
|
|
185
|
-
* @returns
|
|
186
|
-
*/
|
|
187
|
-
collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[];
|
|
188
|
-
getTrackData(midi: any): any;
|
|
189
|
-
/**
|
|
190
|
-
* Convert the midi to a score as best we can. The conversion is made via a 3-step
|
|
191
|
-
* process.
|
|
192
|
-
* 1. consolidate all the MIDI events into individual note on/off events with a duration
|
|
193
|
-
* 2. adjust the durations so the fit in with Smoosic measure lengths.
|
|
194
|
-
* 3. Create the {@link SmoNote} objects from the events.
|
|
195
|
-
* @returns
|
|
196
|
-
*/
|
|
197
|
-
convert(): SmoScore;
|
|
198
|
-
}
|
|
1
|
+
import { Clef, Pitch } from "../data/common";
|
|
2
|
+
import { SmoMeasure } from "../data/measure";
|
|
3
|
+
import { SmoTempoText, TimeSignature } from "../data/measureModifiers";
|
|
4
|
+
import { SmoNote } from "../data/note";
|
|
5
|
+
import { SmoScore } from "../data/score";
|
|
6
|
+
import { SmoTuplet } from "../data/tuplet";
|
|
7
|
+
export type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' | 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' | 'sequencerSpecific' | 'unknownMeta' | 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';
|
|
8
|
+
/**
|
|
9
|
+
* These are the midi events as defined by the parser.
|
|
10
|
+
* @category serialization
|
|
11
|
+
*/
|
|
12
|
+
export interface MidiTrackEvent {
|
|
13
|
+
deltaTime: number;
|
|
14
|
+
meta?: boolean;
|
|
15
|
+
numerator?: number;
|
|
16
|
+
denominator?: number;
|
|
17
|
+
microsecondsPerBeat?: number;
|
|
18
|
+
scale?: number;
|
|
19
|
+
key?: number;
|
|
20
|
+
metronome?: number;
|
|
21
|
+
thirtyseconds?: number;
|
|
22
|
+
type: MidiEventType;
|
|
23
|
+
channel?: number;
|
|
24
|
+
noteNumber?: number;
|
|
25
|
+
velocity?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @category serialization
|
|
29
|
+
*/
|
|
30
|
+
export interface RunningMetadata {
|
|
31
|
+
keySignature: string;
|
|
32
|
+
timeSignature: TimeSignature;
|
|
33
|
+
tempo: SmoTempoText;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @category serialization
|
|
37
|
+
*/
|
|
38
|
+
export interface MidiNoteOn {
|
|
39
|
+
channel: number;
|
|
40
|
+
note: number;
|
|
41
|
+
smoIndex: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @category serialization
|
|
45
|
+
*/
|
|
46
|
+
export interface MidiTupletInfo {
|
|
47
|
+
numNotes: number;
|
|
48
|
+
stemTicks: number;
|
|
49
|
+
totalTicks: number;
|
|
50
|
+
isLast: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @category serialization
|
|
54
|
+
*/
|
|
55
|
+
export interface EventSmoData {
|
|
56
|
+
pitches: Pitch[];
|
|
57
|
+
durationTicks: number;
|
|
58
|
+
tupletInfo: MidiTupletInfo | null;
|
|
59
|
+
isRest: boolean;
|
|
60
|
+
isTied: boolean;
|
|
61
|
+
timeSignature: TimeSignature;
|
|
62
|
+
tempo: SmoTempoText;
|
|
63
|
+
keySignature: string;
|
|
64
|
+
measure: number;
|
|
65
|
+
tick: number;
|
|
66
|
+
}
|
|
67
|
+
export declare function getValueForTick<T>(arg: Record<number, T>, tick: number): T;
|
|
68
|
+
/**
|
|
69
|
+
* Converts a JSON midi file to a {@link SmoScore}
|
|
70
|
+
* @category serialization
|
|
71
|
+
*/
|
|
72
|
+
export declare class MidiToSmo {
|
|
73
|
+
timeSignatureMap: Record<number, TimeSignature>;
|
|
74
|
+
tempoMap: Record<number, SmoTempoText>;
|
|
75
|
+
keySignatureMap: Record<number, string>;
|
|
76
|
+
tieMap: Record<number, number[]>;
|
|
77
|
+
timeDivision: number;
|
|
78
|
+
trackIndex: number;
|
|
79
|
+
eventIndex: number;
|
|
80
|
+
maxMeasure: number;
|
|
81
|
+
quantizeTicks: number;
|
|
82
|
+
eot: boolean;
|
|
83
|
+
midiOnNotes: Record<number, MidiNoteOn[]>;
|
|
84
|
+
midi: any;
|
|
85
|
+
static get quantizeTicksDefault(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Since midi has very little metadata, we don't know the original clef.
|
|
88
|
+
* so just use the one (treble or bass) that uses the fewest ledger lines
|
|
89
|
+
* @internal
|
|
90
|
+
* @param notes notes in measure
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
static guessClefForNotes(measure: SmoMeasure): Clef;
|
|
94
|
+
/**
|
|
95
|
+
* Create an object to convert MIDI to a {@link SmoScore}
|
|
96
|
+
* @param midi the output of midi parser
|
|
97
|
+
* @param quantizeDuration ticks to quantize (1024 == 16th note)
|
|
98
|
+
*/
|
|
99
|
+
constructor(midi: any, quantizeDuration: number);
|
|
100
|
+
/**
|
|
101
|
+
* @internal
|
|
102
|
+
* @param ticks
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
getTempo(ticks: number): SmoTempoText;
|
|
106
|
+
/**
|
|
107
|
+
* @internal
|
|
108
|
+
* @param ticks
|
|
109
|
+
* @returns
|
|
110
|
+
*/
|
|
111
|
+
getTimeSignature(ticks: number): TimeSignature;
|
|
112
|
+
/**
|
|
113
|
+
* @internal
|
|
114
|
+
* @param ticks
|
|
115
|
+
* @returns
|
|
116
|
+
*/
|
|
117
|
+
getKeySignature(ticks: number): string;
|
|
118
|
+
/**
|
|
119
|
+
* Get metadata from the map for this point in the score
|
|
120
|
+
* @param ticks current point in track
|
|
121
|
+
* @returns
|
|
122
|
+
*/
|
|
123
|
+
getMetadata(ticks: number): {
|
|
124
|
+
tempo: SmoTempoText;
|
|
125
|
+
timeSignature: TimeSignature;
|
|
126
|
+
keySignature: string;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* We process 3 types of metadata at present: time signature, tempo and keysignature.
|
|
130
|
+
* @param trackEvent
|
|
131
|
+
* @param ticks
|
|
132
|
+
*/
|
|
133
|
+
handleMetadata(trackEvent: MidiTrackEvent, ticks: number): void;
|
|
134
|
+
/**
|
|
135
|
+
* Convert from Midi PPQ to Smoosic (and vex) ticks
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
138
|
+
getSmoTicks(midiTicks: number): number;
|
|
139
|
+
/**
|
|
140
|
+
* @internal
|
|
141
|
+
*/
|
|
142
|
+
createNewEvent(metadata: RunningMetadata): EventSmoData;
|
|
143
|
+
/**
|
|
144
|
+
* @internal
|
|
145
|
+
*/
|
|
146
|
+
static copyEvent(o: EventSmoData): EventSmoData;
|
|
147
|
+
/**
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
addToTieMap(measureIndex: number): void;
|
|
151
|
+
/**
|
|
152
|
+
* Step 3 in the 3-step process. Quantize the note durations and convert the midi
|
|
153
|
+
* event into SmoNotes.
|
|
154
|
+
* @param events
|
|
155
|
+
* @returns
|
|
156
|
+
*/
|
|
157
|
+
createNotesFromEvents(events: EventSmoData[]): SmoMeasure[];
|
|
158
|
+
adjustTupletNotes(notes: SmoNote[], tuplet: SmoTuplet): void;
|
|
159
|
+
/**
|
|
160
|
+
* @param ticks
|
|
161
|
+
* @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0
|
|
162
|
+
*/
|
|
163
|
+
tripletType(ticks: number): number;
|
|
164
|
+
/**
|
|
165
|
+
* step 2 in the 3 step process. Divide the music up into measures based on
|
|
166
|
+
* tick duration. If there are events overlapping measures, create extra events in the
|
|
167
|
+
* new measure (hence the expand) and shorten the original event
|
|
168
|
+
* @param events
|
|
169
|
+
* @returns
|
|
170
|
+
*/
|
|
171
|
+
expandMidiEvents(events: EventSmoData[]): EventSmoData[];
|
|
172
|
+
/**
|
|
173
|
+
* Store midi on events. If the midi on or off matches an existing
|
|
174
|
+
* stored event based on channel and note, return it so it can be processed
|
|
175
|
+
* @param ev raw event
|
|
176
|
+
* @param evIndex index of processed events
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null;
|
|
180
|
+
/**
|
|
181
|
+
* Step 1 in the 3-step process. Collapse midi events into
|
|
182
|
+
* a single EventSmoData for each distinct tick that contains
|
|
183
|
+
* the metadata state, a duration, and note information.
|
|
184
|
+
* @param trackEvents
|
|
185
|
+
* @returns
|
|
186
|
+
*/
|
|
187
|
+
collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[];
|
|
188
|
+
getTrackData(midi: any): any;
|
|
189
|
+
/**
|
|
190
|
+
* Convert the midi to a score as best we can. The conversion is made via a 3-step
|
|
191
|
+
* process.
|
|
192
|
+
* 1. consolidate all the MIDI events into individual note on/off events with a duration
|
|
193
|
+
* 2. adjust the durations so the fit in with Smoosic measure lengths.
|
|
194
|
+
* 3. Create the {@link SmoNote} objects from the events.
|
|
195
|
+
* @returns
|
|
196
|
+
*/
|
|
197
|
+
convert(): SmoScore;
|
|
198
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { TimeSignature, SmoTempoText } from '../data/measureModifiers';
|
|
2
|
-
import { SmoScore } from '../data/score';
|
|
3
|
-
/**
|
|
4
|
-
* @category serialization
|
|
5
|
-
*/
|
|
6
|
-
export interface MidiTrackHash {
|
|
7
|
-
track: any;
|
|
8
|
-
lastMeasure: number;
|
|
9
|
-
timeSignature?: TimeSignature;
|
|
10
|
-
tempo?: SmoTempoText;
|
|
11
|
-
keySignature?: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Convert a {@link SmoScore} object to MIDI
|
|
15
|
-
* @category serialization
|
|
16
|
-
*/
|
|
17
|
-
export declare class SmoToMidi {
|
|
18
|
-
/**
|
|
19
|
-
* @param score
|
|
20
|
-
* @returns Midi byte array that can be sent to a file upload widget
|
|
21
|
-
*/
|
|
22
|
-
static convert(score: SmoScore): Uint8Array<ArrayBufferLike>;
|
|
23
|
-
}
|
|
1
|
+
import { TimeSignature, SmoTempoText } from '../data/measureModifiers';
|
|
2
|
+
import { SmoScore } from '../data/score';
|
|
3
|
+
/**
|
|
4
|
+
* @category serialization
|
|
5
|
+
*/
|
|
6
|
+
export interface MidiTrackHash {
|
|
7
|
+
track: any;
|
|
8
|
+
lastMeasure: number;
|
|
9
|
+
timeSignature?: TimeSignature;
|
|
10
|
+
tempo?: SmoTempoText;
|
|
11
|
+
keySignature?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Convert a {@link SmoScore} object to MIDI
|
|
15
|
+
* @category serialization
|
|
16
|
+
*/
|
|
17
|
+
export declare class SmoToMidi {
|
|
18
|
+
/**
|
|
19
|
+
* @param score
|
|
20
|
+
* @returns Midi byte array that can be sent to a file upload widget
|
|
21
|
+
*/
|
|
22
|
+
static convert(score: SmoScore): Uint8Array<ArrayBufferLike>;
|
|
23
|
+
}
|