@nice2dev/ui-audio 1.0.3 → 1.0.4
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/dist/engine/daw-core.d.ts +277 -0
- package/dist/engine/daw-core.d.ts.map +1 -0
- package/dist/engine/effects-pro.d.ts +287 -0
- package/dist/engine/effects-pro.d.ts.map +1 -0
- package/dist/engine/karaoke-pro.d.ts +238 -0
- package/dist/engine/karaoke-pro.d.ts.map +1 -0
- package/dist/engine/midi-pro.d.ts +235 -0
- package/dist/engine/midi-pro.d.ts.map +1 -0
- package/dist/engine/notation.d.ts +227 -0
- package/dist/engine/notation.d.ts.map +1 -0
- package/dist/engine/sound-design.d.ts +385 -0
- package/dist/engine/sound-design.d.ts.map +1 -0
- package/dist/index.cjs +24 -24
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1098 -942
- package/package.json +2 -2
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Karaoke Editor Professional — lyrics alignment, syllable sync,
|
|
3
|
+
* pitch guide, gold notes, duet, backing track separation,
|
|
4
|
+
* translation, export, scoring, multiplayer, CDG/KBP, video,
|
|
5
|
+
* crowd mode, practice, voice training, song requests, hardware.
|
|
6
|
+
*
|
|
7
|
+
* PRO-3.4 — 17 items
|
|
8
|
+
*
|
|
9
|
+
* @module @nice2dev/ui-audio/engine/karaoke-pro
|
|
10
|
+
*/
|
|
11
|
+
export interface LyricWord {
|
|
12
|
+
id: string;
|
|
13
|
+
text: string;
|
|
14
|
+
startTime: number;
|
|
15
|
+
endTime: number;
|
|
16
|
+
/** Confidence from AI alignment (0-1) */
|
|
17
|
+
confidence?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface LyricLine {
|
|
20
|
+
id: string;
|
|
21
|
+
words: LyricWord[];
|
|
22
|
+
/** Singer identifier for duets */
|
|
23
|
+
singer?: string;
|
|
24
|
+
/** Display color override */
|
|
25
|
+
color?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface LyricsAlignment {
|
|
28
|
+
lines: LyricLine[];
|
|
29
|
+
/** Language code (BCP-47) */
|
|
30
|
+
language: string;
|
|
31
|
+
}
|
|
32
|
+
export interface LyricSyllable {
|
|
33
|
+
id: string;
|
|
34
|
+
text: string;
|
|
35
|
+
startTime: number;
|
|
36
|
+
endTime: number;
|
|
37
|
+
/** Expected pitch (Hz) for pitch guide */
|
|
38
|
+
pitch?: number;
|
|
39
|
+
/** Is this a gold note? */
|
|
40
|
+
isGold: boolean;
|
|
41
|
+
/** Is this a bonus/freestyle segment? */
|
|
42
|
+
isFreestyle: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface SyllableLine {
|
|
45
|
+
id: string;
|
|
46
|
+
syllables: LyricSyllable[];
|
|
47
|
+
singer: string;
|
|
48
|
+
}
|
|
49
|
+
export interface PitchGuidePoint {
|
|
50
|
+
time: number;
|
|
51
|
+
/** Expected pitch in Hz */
|
|
52
|
+
pitch: number;
|
|
53
|
+
/** Tolerance in cents */
|
|
54
|
+
tolerance: number;
|
|
55
|
+
}
|
|
56
|
+
export interface PitchGuideTrack {
|
|
57
|
+
id: string;
|
|
58
|
+
points: PitchGuidePoint[];
|
|
59
|
+
/** Default tolerance (cents) */
|
|
60
|
+
defaultTolerance: number;
|
|
61
|
+
}
|
|
62
|
+
export interface GoldNoteConfig {
|
|
63
|
+
/** Score multiplier for gold notes */
|
|
64
|
+
multiplier: number;
|
|
65
|
+
/** Visual effect type */
|
|
66
|
+
effect: 'glow' | 'sparkle' | 'star' | 'flame';
|
|
67
|
+
/** Gold note color */
|
|
68
|
+
color: string;
|
|
69
|
+
}
|
|
70
|
+
export interface DuetConfig {
|
|
71
|
+
/** Singer definitions */
|
|
72
|
+
singers: Array<{
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
color: string;
|
|
76
|
+
/** Microphone input */
|
|
77
|
+
inputDevice?: string;
|
|
78
|
+
}>;
|
|
79
|
+
/** Score independently or combined */
|
|
80
|
+
scoring: 'individual' | 'combined';
|
|
81
|
+
/** Split screen layout */
|
|
82
|
+
layout: 'split-horizontal' | 'split-vertical' | 'overlay';
|
|
83
|
+
}
|
|
84
|
+
export interface BackingTrackConfig {
|
|
85
|
+
/** Stem separation quality */
|
|
86
|
+
quality: 'fast' | 'standard' | 'high';
|
|
87
|
+
/** Suppress vocals amount (0-1) */
|
|
88
|
+
vocalSuppression: number;
|
|
89
|
+
/** Boost instrumental */
|
|
90
|
+
instrumentalBoost: number;
|
|
91
|
+
/** Keep backing vocals */
|
|
92
|
+
keepBackingVocals: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface LyricsTranslation {
|
|
95
|
+
sourceLanguage: string;
|
|
96
|
+
targetLanguage: string;
|
|
97
|
+
lines: Array<{
|
|
98
|
+
originalLineId: string;
|
|
99
|
+
translatedText: string;
|
|
100
|
+
/** Phonetic transcription (romanization) */
|
|
101
|
+
phonetic?: string;
|
|
102
|
+
}>;
|
|
103
|
+
}
|
|
104
|
+
export type KaraokeProFormat = 'kar' | 'cdg' | 'kbp' | 'lrc' | 'srt' | 'ass' | 'ultrastar' | 'nice-karaoke';
|
|
105
|
+
export interface KaraokeExportOptions {
|
|
106
|
+
format: KaraokeProFormat;
|
|
107
|
+
/** Include backing track */
|
|
108
|
+
includeAudio: boolean;
|
|
109
|
+
/** Include video background */
|
|
110
|
+
includeVideo: boolean;
|
|
111
|
+
/** Encoding (for text formats) */
|
|
112
|
+
encoding: 'utf-8' | 'shift-jis' | 'euc-kr';
|
|
113
|
+
}
|
|
114
|
+
export interface ScoringWeights {
|
|
115
|
+
pitchAccuracy: number;
|
|
116
|
+
timing: number;
|
|
117
|
+
vibrato: number;
|
|
118
|
+
bonus: number;
|
|
119
|
+
}
|
|
120
|
+
export interface KaraokeScore {
|
|
121
|
+
/** Total score (0-100) */
|
|
122
|
+
total: number;
|
|
123
|
+
pitchAccuracy: number;
|
|
124
|
+
timingAccuracy: number;
|
|
125
|
+
vibratoScore: number;
|
|
126
|
+
bonusPoints: number;
|
|
127
|
+
/** Per-line scores */
|
|
128
|
+
lineScores: Array<{
|
|
129
|
+
lineId: string;
|
|
130
|
+
score: number;
|
|
131
|
+
}>;
|
|
132
|
+
/** Grade */
|
|
133
|
+
grade: 'S' | 'A' | 'B' | 'C' | 'D' | 'F';
|
|
134
|
+
}
|
|
135
|
+
export declare function computeGrade(score: number): KaraokeScore['grade'];
|
|
136
|
+
export type MultiplayerMode = 'battle' | 'duo' | 'team' | 'pass-the-mic';
|
|
137
|
+
export interface MultiplayerSession {
|
|
138
|
+
id: string;
|
|
139
|
+
mode: MultiplayerMode;
|
|
140
|
+
players: Array<{
|
|
141
|
+
id: string;
|
|
142
|
+
name: string;
|
|
143
|
+
score: KaraokeScore | null;
|
|
144
|
+
}>;
|
|
145
|
+
currentRound: number;
|
|
146
|
+
totalRounds: number;
|
|
147
|
+
songQueue: string[];
|
|
148
|
+
}
|
|
149
|
+
export interface CdgImportResult {
|
|
150
|
+
/** Extracted lyrics with timing */
|
|
151
|
+
lyrics: LyricsAlignment;
|
|
152
|
+
/** Background graphics frames */
|
|
153
|
+
graphicsFrameCount: number;
|
|
154
|
+
/** Duration in seconds */
|
|
155
|
+
duration: number;
|
|
156
|
+
}
|
|
157
|
+
export interface VideoKaraokeConfig {
|
|
158
|
+
/** Video source URL */
|
|
159
|
+
videoUrl: string;
|
|
160
|
+
/** Lyrics overlay position */
|
|
161
|
+
lyricsPosition: 'top' | 'center' | 'bottom';
|
|
162
|
+
/** Lyrics style */
|
|
163
|
+
lyricsStyle: {
|
|
164
|
+
fontSize: number;
|
|
165
|
+
fontFamily: string;
|
|
166
|
+
activeColor: string;
|
|
167
|
+
inactiveColor: string;
|
|
168
|
+
outlineColor: string;
|
|
169
|
+
outlineWidth: number;
|
|
170
|
+
};
|
|
171
|
+
/** Show pitch visualizer */
|
|
172
|
+
showPitchGuide: boolean;
|
|
173
|
+
}
|
|
174
|
+
export interface CrowdModeConfig {
|
|
175
|
+
/** Max simultaneous singers */
|
|
176
|
+
maxSingers: number;
|
|
177
|
+
/** Audience voting */
|
|
178
|
+
audienceVoting: boolean;
|
|
179
|
+
/** Leaderboard */
|
|
180
|
+
showLeaderboard: boolean;
|
|
181
|
+
/** Song time limit (seconds) */
|
|
182
|
+
timeLimitPerSong: number;
|
|
183
|
+
}
|
|
184
|
+
export interface PracticeModeConfig {
|
|
185
|
+
/** Playback speed (0.25 - 2.0) */
|
|
186
|
+
speed: number;
|
|
187
|
+
/** Loop region */
|
|
188
|
+
loop: {
|
|
189
|
+
enabled: boolean;
|
|
190
|
+
startTime: number;
|
|
191
|
+
endTime: number;
|
|
192
|
+
};
|
|
193
|
+
/** Show pitch guide */
|
|
194
|
+
showPitchGuide: boolean;
|
|
195
|
+
/** Show timing helper */
|
|
196
|
+
showTimingHelper: boolean;
|
|
197
|
+
/** Auto-slow difficult sections */
|
|
198
|
+
autoSlow: boolean;
|
|
199
|
+
}
|
|
200
|
+
export type VoiceExerciseType = 'pitch-match' | 'interval' | 'scale' | 'breathing' | 'range-extension' | 'vibrato' | 'dynamics';
|
|
201
|
+
export interface VoiceExercise {
|
|
202
|
+
id: string;
|
|
203
|
+
type: VoiceExerciseType;
|
|
204
|
+
name: string;
|
|
205
|
+
description: string;
|
|
206
|
+
/** Expected pitches/durations */
|
|
207
|
+
steps: Array<{
|
|
208
|
+
pitch: number;
|
|
209
|
+
duration: number;
|
|
210
|
+
}>;
|
|
211
|
+
/** Difficulty 1-10 */
|
|
212
|
+
difficulty: number;
|
|
213
|
+
}
|
|
214
|
+
export interface SongRequest {
|
|
215
|
+
id: string;
|
|
216
|
+
songId: string;
|
|
217
|
+
songTitle: string;
|
|
218
|
+
requestedBy: string;
|
|
219
|
+
timestamp: number;
|
|
220
|
+
priority: 'normal' | 'high' | 'vip';
|
|
221
|
+
status: 'queued' | 'playing' | 'completed' | 'skipped';
|
|
222
|
+
}
|
|
223
|
+
export interface SongRequestQueue {
|
|
224
|
+
requests: SongRequest[];
|
|
225
|
+
currentIndex: number;
|
|
226
|
+
autoAdvance: boolean;
|
|
227
|
+
}
|
|
228
|
+
export interface KaraokeMachineConfig {
|
|
229
|
+
/** Hardware connection */
|
|
230
|
+
connectionType: 'usb' | 'bluetooth' | 'midi' | 'network';
|
|
231
|
+
/** Device identifier */
|
|
232
|
+
deviceId: string;
|
|
233
|
+
/** Microphone inputs */
|
|
234
|
+
microphoneCount: number;
|
|
235
|
+
/** Supported features */
|
|
236
|
+
features: Array<'echo' | 'key-change' | 'vocal-cancel' | 'recording' | 'scoring'>;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=karaoke-pro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"karaoke-pro.d.ts","sourceRoot":"","sources":["../../src/engine/karaoke-pro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIDI & Piano Roll Pro — advanced note editing, quantize,
|
|
3
|
+
* chord recognition, scale lock, arpeggiator, transforms,
|
|
4
|
+
* expression maps, MPE, step sequencer, drum grid, chord pads,
|
|
5
|
+
* MIDI learn, clock, SysEx, file import/export.
|
|
6
|
+
*
|
|
7
|
+
* PRO-3.3 — 15 items
|
|
8
|
+
*
|
|
9
|
+
* @module @nice2dev/ui-audio/engine/midi-pro
|
|
10
|
+
*/
|
|
11
|
+
export interface MidiProNote {
|
|
12
|
+
id: string;
|
|
13
|
+
pitch: number;
|
|
14
|
+
velocity: number;
|
|
15
|
+
/** Start in ticks */
|
|
16
|
+
startTick: number;
|
|
17
|
+
/** Duration in ticks */
|
|
18
|
+
durationTicks: number;
|
|
19
|
+
/** Channel 1-16 */
|
|
20
|
+
channel: number;
|
|
21
|
+
/** Release velocity */
|
|
22
|
+
releaseVelocity?: number;
|
|
23
|
+
/** MPE per-note data */
|
|
24
|
+
mpe?: {
|
|
25
|
+
pitchBend: number;
|
|
26
|
+
slide: number;
|
|
27
|
+
pressure: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export type CcLaneType = 'cc' | 'pitch-bend' | 'aftertouch' | 'poly-aftertouch' | 'program-change';
|
|
31
|
+
export interface CcEvent {
|
|
32
|
+
id: string;
|
|
33
|
+
type: CcLaneType;
|
|
34
|
+
/** CC number (0-127) or -1 for non-CC types */
|
|
35
|
+
ccNumber: number;
|
|
36
|
+
value: number;
|
|
37
|
+
tick: number;
|
|
38
|
+
channel: number;
|
|
39
|
+
}
|
|
40
|
+
export type QuantizeGrid = '1/1' | '1/2' | '1/4' | '1/8' | '1/16' | '1/32' | '1/4T' | '1/8T' | '1/16T' | '1/4D' | '1/8D';
|
|
41
|
+
export interface QuantizeSettings {
|
|
42
|
+
grid: QuantizeGrid;
|
|
43
|
+
/** How strongly to quantize (0-100) */
|
|
44
|
+
strength: number;
|
|
45
|
+
/** Swing amount (-100 to +100) */
|
|
46
|
+
swing: number;
|
|
47
|
+
/** Humanize — random offset (ticks) */
|
|
48
|
+
humanize: number;
|
|
49
|
+
/** Only quantize start, end, or both */
|
|
50
|
+
target: 'start' | 'end' | 'both';
|
|
51
|
+
/** Groove template name (optional) */
|
|
52
|
+
grooveTemplate?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Apply quantize to a set of notes (pure function). */
|
|
55
|
+
export declare function quantizeNotes(notes: MidiProNote[], settings: QuantizeSettings, ticksPerBeat: number): MidiProNote[];
|
|
56
|
+
export interface ChordInfo {
|
|
57
|
+
root: string;
|
|
58
|
+
quality: string;
|
|
59
|
+
bass?: string;
|
|
60
|
+
symbol: string;
|
|
61
|
+
intervals: number[];
|
|
62
|
+
}
|
|
63
|
+
/** Detect chord from MIDI note numbers. */
|
|
64
|
+
export declare function detectChord(noteNumbers: number[]): ChordInfo | null;
|
|
65
|
+
export type ScaleName = 'major' | 'minor' | 'dorian' | 'phrygian' | 'lydian' | 'mixolydian' | 'aeolian' | 'locrian' | 'harmonic-minor' | 'melodic-minor' | 'pentatonic-major' | 'pentatonic-minor' | 'blues' | 'chromatic' | 'whole-tone';
|
|
66
|
+
export declare const SCALE_INTERVALS: Record<ScaleName, number[]>;
|
|
67
|
+
/** Snap a MIDI pitch to the nearest scale tone. */
|
|
68
|
+
export declare function snapToScale(pitch: number, rootNote: number, scale: ScaleName): number;
|
|
69
|
+
export type ArpDirection = 'up' | 'down' | 'up-down' | 'down-up' | 'random' | 'order';
|
|
70
|
+
export interface ArpPattern {
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
direction: ArpDirection;
|
|
74
|
+
/** Number of octaves */
|
|
75
|
+
octaves: number;
|
|
76
|
+
/** Gate length (0-1 relative to step) */
|
|
77
|
+
gate: number;
|
|
78
|
+
/** Rate as note value */
|
|
79
|
+
rate: QuantizeGrid;
|
|
80
|
+
/** Swing amount */
|
|
81
|
+
swing: number;
|
|
82
|
+
/** Step velocities (optional override) */
|
|
83
|
+
velocityPattern?: number[];
|
|
84
|
+
/** Tie/rest pattern (true = play, false = rest) */
|
|
85
|
+
gatePattern?: boolean[];
|
|
86
|
+
}
|
|
87
|
+
export type MidiTransformType = 'transpose' | 'invert' | 'retrograde' | 'retrograde-invert' | 'randomize-velocity' | 'randomize-timing' | 'legato' | 'staccato' | 'thin' | 'quantize-pitch';
|
|
88
|
+
export interface MidiTransform {
|
|
89
|
+
type: MidiTransformType;
|
|
90
|
+
params: Record<string, number>;
|
|
91
|
+
}
|
|
92
|
+
export declare function applyMidiTransform(notes: MidiProNote[], transform: MidiTransform): MidiProNote[];
|
|
93
|
+
export interface ArticulationSwitch {
|
|
94
|
+
id: string;
|
|
95
|
+
name: string;
|
|
96
|
+
/** Key-switch note */
|
|
97
|
+
keyswitch?: number;
|
|
98
|
+
/** CC value */
|
|
99
|
+
cc?: {
|
|
100
|
+
number: number;
|
|
101
|
+
value: number;
|
|
102
|
+
};
|
|
103
|
+
/** Program change */
|
|
104
|
+
programChange?: number;
|
|
105
|
+
color: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ExpressionMap {
|
|
108
|
+
id: string;
|
|
109
|
+
name: string;
|
|
110
|
+
/** Instrument description */
|
|
111
|
+
instrument: string;
|
|
112
|
+
articulations: ArticulationSwitch[];
|
|
113
|
+
}
|
|
114
|
+
export interface MpeConfig {
|
|
115
|
+
enabled: boolean;
|
|
116
|
+
/** Number of member channels (1-15) */
|
|
117
|
+
memberChannels: number;
|
|
118
|
+
/** Master channel (usually 1) */
|
|
119
|
+
masterChannel: number;
|
|
120
|
+
/** Pitch bend range (semitones, typically 48) */
|
|
121
|
+
pitchBendRange: number;
|
|
122
|
+
}
|
|
123
|
+
export interface StepSequencerStep {
|
|
124
|
+
active: boolean;
|
|
125
|
+
pitch: number;
|
|
126
|
+
velocity: number;
|
|
127
|
+
/** Gate length (0-1) */
|
|
128
|
+
gate: number;
|
|
129
|
+
/** Probability of playing (0-1) */
|
|
130
|
+
probability: number;
|
|
131
|
+
/** Ratchet — number of sub-repeats */
|
|
132
|
+
ratchet: number;
|
|
133
|
+
/** Slide / legato to next step */
|
|
134
|
+
slide: boolean;
|
|
135
|
+
/** Per-step swing offset */
|
|
136
|
+
swingOffset: number;
|
|
137
|
+
}
|
|
138
|
+
export interface StepSequencerPattern {
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
steps: StepSequencerStep[];
|
|
142
|
+
/** Steps per pattern */
|
|
143
|
+
length: number;
|
|
144
|
+
/** Rate */
|
|
145
|
+
rate: QuantizeGrid;
|
|
146
|
+
}
|
|
147
|
+
export interface DrumPad {
|
|
148
|
+
id: string;
|
|
149
|
+
name: string;
|
|
150
|
+
/** MIDI note number */
|
|
151
|
+
note: number;
|
|
152
|
+
/** Sample reference */
|
|
153
|
+
sampleRef?: string;
|
|
154
|
+
color: string;
|
|
155
|
+
/** Mute group — pads in same group cut each other */
|
|
156
|
+
muteGroup?: number;
|
|
157
|
+
}
|
|
158
|
+
export interface DrumPattern {
|
|
159
|
+
id: string;
|
|
160
|
+
name: string;
|
|
161
|
+
pads: DrumPad[];
|
|
162
|
+
/** Grid: [padIndex][stepIndex] = velocity (0 = off) */
|
|
163
|
+
grid: number[][];
|
|
164
|
+
steps: number;
|
|
165
|
+
rate: QuantizeGrid;
|
|
166
|
+
}
|
|
167
|
+
export interface ChordPad {
|
|
168
|
+
id: string;
|
|
169
|
+
label: string;
|
|
170
|
+
notes: number[];
|
|
171
|
+
voicing: 'close' | 'open' | 'drop2' | 'drop3' | 'spread';
|
|
172
|
+
/** Bass note (for slash chords) */
|
|
173
|
+
bassNote?: number;
|
|
174
|
+
color: string;
|
|
175
|
+
}
|
|
176
|
+
export interface MidiMapping {
|
|
177
|
+
id: string;
|
|
178
|
+
/** CC number or note */
|
|
179
|
+
source: {
|
|
180
|
+
type: 'cc' | 'note';
|
|
181
|
+
number: number;
|
|
182
|
+
channel: number;
|
|
183
|
+
};
|
|
184
|
+
/** Target parameter ID */
|
|
185
|
+
targetParamId: string;
|
|
186
|
+
/** Value range mapping */
|
|
187
|
+
min: number;
|
|
188
|
+
max: number;
|
|
189
|
+
/** Invert direction */
|
|
190
|
+
inverted: boolean;
|
|
191
|
+
}
|
|
192
|
+
export interface MidiClockConfig {
|
|
193
|
+
/** Send MIDI clock */
|
|
194
|
+
sendClock: boolean;
|
|
195
|
+
/** Receive / sync to external clock */
|
|
196
|
+
receiveClock: boolean;
|
|
197
|
+
/** BPM (for internal clock) */
|
|
198
|
+
bpm: number;
|
|
199
|
+
/** PPQ — pulses per quarter note */
|
|
200
|
+
ppq: 24 | 48 | 96 | 240 | 480;
|
|
201
|
+
/** Send start/stop/continue */
|
|
202
|
+
sendTransport: boolean;
|
|
203
|
+
/** Offset (ms) for latency compensation */
|
|
204
|
+
offset: number;
|
|
205
|
+
}
|
|
206
|
+
export interface SysExPatch {
|
|
207
|
+
id: string;
|
|
208
|
+
name: string;
|
|
209
|
+
deviceName: string;
|
|
210
|
+
/** Raw SysEx bytes */
|
|
211
|
+
data: Uint8Array;
|
|
212
|
+
/** Bank/program number */
|
|
213
|
+
bank?: number;
|
|
214
|
+
program?: number;
|
|
215
|
+
}
|
|
216
|
+
export type MidiFileType = 0 | 1 | 2;
|
|
217
|
+
export interface MidiFileInfo {
|
|
218
|
+
type: MidiFileType;
|
|
219
|
+
trackCount: number;
|
|
220
|
+
ticksPerBeat: number;
|
|
221
|
+
/** Duration in seconds */
|
|
222
|
+
duration: number;
|
|
223
|
+
/** Tempo events */
|
|
224
|
+
tempoEvents: Array<{
|
|
225
|
+
tick: number;
|
|
226
|
+
bpm: number;
|
|
227
|
+
}>;
|
|
228
|
+
/** Time signature events */
|
|
229
|
+
timeSignatures: Array<{
|
|
230
|
+
tick: number;
|
|
231
|
+
numerator: number;
|
|
232
|
+
denominator: number;
|
|
233
|
+
}>;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=midi-pro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"midi-pro.d.ts","sourceRoot":"","sources":["../../src/engine/midi-pro.ts"],"names":[],"mappings":"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"}
|