@ugfoundation/swaralipi-js 0.9.2 → 0.10.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.
- package/README.md +17 -0
- package/dist/{batch-IHEXFEGC.js → batch-3PHPNX2P.js} +4 -4
- package/dist/{batch-IHEXFEGC.js.map → batch-3PHPNX2P.js.map} +1 -1
- package/dist/{chunk-TZBDIRIA.js → chunk-FGMULPL2.js} +3 -3
- package/dist/{chunk-TZBDIRIA.js.map → chunk-FGMULPL2.js.map} +1 -1
- package/dist/{chunk-F23LZMIU.js → chunk-I5GJWSD2.js} +3 -3
- package/dist/{chunk-F23LZMIU.js.map → chunk-I5GJWSD2.js.map} +1 -1
- package/dist/{chunk-SEN266BY.js → chunk-JEJYMKKZ.js} +26 -3
- package/dist/chunk-JEJYMKKZ.js.map +1 -0
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/convert/index.cjs +1 -1
- package/dist/convert/index.cjs.map +1 -1
- package/dist/convert/index.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/player/index.cjs +436 -50
- package/dist/player/index.cjs.map +1 -1
- package/dist/player/index.d.cts +76 -11
- package/dist/player/index.d.ts +76 -11
- package/dist/player/index.js +412 -51
- package/dist/player/index.js.map +1 -1
- package/dist/{schedule-BaovCtmf.d.ts → schedule-BUopqmWm.d.ts} +27 -1
- package/dist/{schedule-CU-VECDH.d.cts → schedule-IBu8lr-3.d.cts} +27 -1
- package/dist/spec/index.cjs +1 -1
- package/dist/spec/index.cjs.map +1 -1
- package/dist/spec/index.d.cts +1 -1
- package/dist/spec/index.d.ts +1 -1
- package/dist/spec/index.js +1 -1
- package/dist/viewer/index.cjs +145 -6
- package/dist/viewer/index.cjs.map +1 -1
- package/dist/viewer/index.d.cts +21 -4
- package/dist/viewer/index.d.ts +21 -4
- package/dist/viewer/index.js +145 -7
- package/dist/viewer/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-SEN266BY.js.map +0 -1
package/dist/player/index.d.cts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import { S as Swaralipi, T as Taal, O as Octave, a as SvaraLetter, N as Note } from '../schema-Cf_epUIC.cjs';
|
|
2
2
|
import { a as LaySpeeds, T as TaalId } from '../lay-CfDlPhH2.cjs';
|
|
3
3
|
export { b as LAYS, c as LAY_SPEEDS, L as Lay, p as printedLay, r as resolveLaySpeeds, d as rowLay } from '../lay-CfDlPhH2.cjs';
|
|
4
|
-
import { I as InstrumentId, a as InstrumentDef, S as Schedule, D as DrumVoice, T as TempoSegment } from '../schedule-
|
|
5
|
-
export { A as ARC_RAW_RE, b as DEFAULT_SOUNDS_BASE, c as DRUM_KIT_BASE, G as GRACE_STEP, d as GlideLeg, e as INSTRUMENTS, M as MEEND_HOLD, P as PlayEvent, f as SALAMANDER_BASE, g as SAMPLED_TAALS, h as ScheduleOptions, i as TABLA_BPMS, j as TABLA_VARIATIONS, k as TONEJS_INSTRUMENTS_BASE, l as ToneModule, m as buildSchedule, n as createBuffers, o as drumPattern, p as
|
|
4
|
+
import { I as InstrumentId, a as InstrumentDef, S as Schedule, D as DrumVoice, T as TempoSegment } from '../schedule-IBu8lr-3.cjs';
|
|
5
|
+
export { A as ARC_RAW_RE, b as DEFAULT_SOUNDS_BASE, c as DRUM_KIT_BASE, G as GRACE_STEP, d as GlideLeg, e as INSTRUMENTS, L as Line, M as MEEND_HOLD, P as PlayEvent, f as SALAMANDER_BASE, g as SAMPLED_TAALS, h as ScheduleOptions, i as TABLA_BPMS, j as TABLA_VARIATIONS, k as TONEJS_INSTRUMENTS_BASE, l as ToneModule, m as buildSchedule, n as createBuffers, o as drumPattern, p as eventAt, q as glideTargets, r as graceTouches, s as instrumentSampleUrl, t as isArcRaw, u as meendContinuations, v as nearestSampleKey, w as nearestTablaBpm, x as normalizeBase, y as probeUrl, z as quantizeLoopEnd, B as santoorUrls, C as scheduleLines, E as subsetUrls, F as tablaBpms, H as tablaUrl, J as triggerGlide } from '../schedule-IBu8lr-3.cjs';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'tone';
|
|
8
8
|
|
|
9
9
|
type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused';
|
|
10
10
|
type RhythmMode = 'tabla' | 'drums' | 'metronome' | 'none';
|
|
11
|
+
/** Repeated lines, as `part.row` paths (the viewer's `data-row`), inclusive. */
|
|
12
|
+
interface LineRange {
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
}
|
|
16
|
+
/** What the practice controls show: the repeated lines, whether the learner
|
|
17
|
+
* sings each pass back, and whether the pass now sounding is theirs. */
|
|
18
|
+
interface PracticeState {
|
|
19
|
+
loop: LineRange | null;
|
|
20
|
+
echo: boolean;
|
|
21
|
+
yourTurn: boolean;
|
|
22
|
+
}
|
|
11
23
|
interface PlayerOptions {
|
|
12
24
|
/** Base URL for the project's samples (santoor/tabla/tanpura/metronome).
|
|
13
25
|
* Defaults to `DEFAULT_SOUNDS_BASE` (the project's CORS-enabled CDN), so the
|
|
@@ -52,8 +64,12 @@ interface PlayerOptions {
|
|
|
52
64
|
/** Called when the preview cap stops playback (so the consumer can show an
|
|
53
65
|
* upsell). Not called on a normal stop()/end. */
|
|
54
66
|
onLimit?: () => void;
|
|
55
|
-
/** Called with the active note's `part.row.note` path, or null when idle.
|
|
56
|
-
|
|
67
|
+
/** Called with the active note's `part.row.note` path, or null when idle.
|
|
68
|
+
* `yourTurn` is true while the melody is silent for the learner to sing
|
|
69
|
+
* (see `setEcho`): the note is where they should be, not what is sounding. */
|
|
70
|
+
onHighlight?: (path: string | null, yourTurn?: boolean) => void;
|
|
71
|
+
/** Called whenever the repeat, the sing-back or the learner's turn changes. */
|
|
72
|
+
onLoop?: (state: PracticeState) => void;
|
|
57
73
|
/** The same path, but fired on the AUDIO clock — Tone's worker ticker, the one
|
|
58
74
|
* that fires the notes themselves — so it keeps arriving while the page is
|
|
59
75
|
* hidden. `onHighlight` cannot: it runs on Tone.Draw, i.e.
|
|
@@ -74,8 +90,10 @@ interface PlayerOptions {
|
|
|
74
90
|
* dependency on the viewer module). `highlight` returns the highlighted node
|
|
75
91
|
* (or null) so bindSheet can optionally scroll it into view. */
|
|
76
92
|
interface HighlightTarget {
|
|
77
|
-
highlight(path: string): HTMLElement | null;
|
|
93
|
+
highlight(path: string, yourTurn?: boolean): HTMLElement | null;
|
|
78
94
|
clearHighlights(): void;
|
|
95
|
+
/** Shade the repeated lines, and mark the learner's turn on them. */
|
|
96
|
+
markLoop?(loop: LineRange | null, yourTurn: boolean): void;
|
|
79
97
|
}
|
|
80
98
|
interface BindSheetOptions {
|
|
81
99
|
/** Keep the active note visible while playing by calling `scrollIntoView`
|
|
@@ -112,6 +130,12 @@ declare class SwaralipiPlayer {
|
|
|
112
130
|
/** Seconds played so far, off the Transport's own clock — so it holds while
|
|
113
131
|
* paused, and reads 0 before the first play and after stop(). */
|
|
114
132
|
get positionSec(): number;
|
|
133
|
+
/** The note last played or sought (`part.row.note`), or null. */
|
|
134
|
+
get cursor(): string | null;
|
|
135
|
+
/** The repeated lines, or null. */
|
|
136
|
+
get loop(): LineRange | null;
|
|
137
|
+
/** Whether each repeat is followed by a silent pass for the learner. */
|
|
138
|
+
get echo(): boolean;
|
|
115
139
|
/** Set the document to play. Stops any current playback. */
|
|
116
140
|
load(doc: Swaralipi): void;
|
|
117
141
|
/**
|
|
@@ -123,11 +147,42 @@ declare class SwaralipiPlayer {
|
|
|
123
147
|
* `variation` picks a tabla loop variation. Stops any current playback.
|
|
124
148
|
*/
|
|
125
149
|
loadTaal(taal: Taal): void;
|
|
126
|
-
/** Start (or resume) playback
|
|
127
|
-
*
|
|
128
|
-
|
|
150
|
+
/** Start (or resume) playback — from `from` (`part.row.note`, or `part.row`
|
|
151
|
+
* for a line's start) when given, which also jumps there mid-play. Must be
|
|
152
|
+
* triggered from a user gesture so the browser permits `AudioContext`
|
|
153
|
+
* resume. */
|
|
154
|
+
play(from?: string): Promise<void>;
|
|
129
155
|
/** Pause; `play()` resumes from the same position. */
|
|
130
156
|
pause(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Move the playhead to `path` (`part.row.note`, or `part.row` for a line's
|
|
159
|
+
* start). Playing, it jumps and keeps playing; paused or stopped, the next
|
|
160
|
+
* `play()` starts there. A repeat follows the playhead: seeking outside the
|
|
161
|
+
* repeated lines moves the repeat to the new line.
|
|
162
|
+
*/
|
|
163
|
+
seek(path: string): void;
|
|
164
|
+
/**
|
|
165
|
+
* Repeat lines `from`..`to` (`part.row`, either order, inclusive; `to`
|
|
166
|
+
* defaults to `from`). With no argument, the line under the playhead.
|
|
167
|
+
* `null` stops repeating, and ends the sing-back with it. A playhead
|
|
168
|
+
* outside the new repeat moves to its start; live while playing.
|
|
169
|
+
*/
|
|
170
|
+
setLoop(from?: string | null, to?: string): void;
|
|
171
|
+
/**
|
|
172
|
+
* Follow every pass of the repeat with a silent one: the tabla and tanpura
|
|
173
|
+
* keep time and the highlight keeps moving, but the melody rests so the
|
|
174
|
+
* learner can sing the line back — the teacher sings, the student answers.
|
|
175
|
+
* Turning it on with nothing repeating repeats the current line.
|
|
176
|
+
*/
|
|
177
|
+
setEcho(on: boolean): void;
|
|
178
|
+
/**
|
|
179
|
+
* Move by whole lines. Like a player's previous-track button, a step back
|
|
180
|
+
* from more than a matra into the line restarts that line first.
|
|
181
|
+
* `±Infinity` goes to the first / last line.
|
|
182
|
+
*/
|
|
183
|
+
stepLine(delta: number): void;
|
|
184
|
+
/** Move by single notes (rests and holds included — each is a column). */
|
|
185
|
+
stepNote(delta: number): void;
|
|
131
186
|
/**
|
|
132
187
|
* Stop and rewind to the start. When sounding, the accompaniment (tabla /
|
|
133
188
|
* metronome / tanpura, which otherwise loop) is gently faded out over
|
|
@@ -144,8 +199,18 @@ declare class SwaralipiPlayer {
|
|
|
144
199
|
setTanpura(on: boolean): void;
|
|
145
200
|
/** Override the taal (null restores auto-detection from `meta.taal`). */
|
|
146
201
|
setTaal(id: TaalId | null): void;
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
202
|
+
/**
|
|
203
|
+
* Wire highlight output to a `<swaralipi-sheet>` (or any highlight target).
|
|
204
|
+
* Pass `{ autoScroll }` to keep the active note in view while playing.
|
|
205
|
+
*
|
|
206
|
+
* A sheet element also becomes the practice surface: a tap on a line plays
|
|
207
|
+
* from the note under it (Shift stretches the repeat to that line), and
|
|
208
|
+
* while it has focus — only then, so no key is taken from the page — Space
|
|
209
|
+
* plays/pauses, ↑/↓ move by line, ←/→ by note, Home/End jump to the first /
|
|
210
|
+
* last line, R repeats the line, T turns sing-back on/off, Esc stops the
|
|
211
|
+
* repeat and Shift+↑/↓ stretch it. To gate a tap-to-play (a play quota, say),
|
|
212
|
+
* `preventDefault()` its `swaralipi-seek` event in a capturing listener.
|
|
213
|
+
*/
|
|
149
214
|
bindSheet(target: HighlightTarget, opts?: BindSheetOptions): void;
|
|
150
215
|
/**
|
|
151
216
|
* Check whether an instrument's samples are reachable (its CDN is up / the
|
|
@@ -342,4 +407,4 @@ declare function sampleFileName(midi: number): string;
|
|
|
342
407
|
*/
|
|
343
408
|
declare function sCurve(x: number, steepness?: number): number;
|
|
344
409
|
|
|
345
|
-
export { type AudioExportOptions, type AudioExportResult, type AudioFormat, type BindSheetOptions, DrumVoice, InstrumentDef, InstrumentId, LaySpeeds, type MidiExportOptions, type MidiExportResult, OCTAVE_OFFSET, type PlayerOptions, type PlayerState, type RhythmMode, SHUDDHA, Schedule, SwaralipiPlayer, TempoSegment, encodeMidi, encodeMp3, encodeWav, exportAudio, exportMidi, midiToSampleName, parseTonic, sCurve, sampleFileName, svaraSemitone, svaraToMidi };
|
|
410
|
+
export { type AudioExportOptions, type AudioExportResult, type AudioFormat, type BindSheetOptions, DrumVoice, InstrumentDef, InstrumentId, LaySpeeds, type LineRange, type MidiExportOptions, type MidiExportResult, OCTAVE_OFFSET, type PlayerOptions, type PlayerState, type PracticeState, type RhythmMode, SHUDDHA, Schedule, SwaralipiPlayer, TempoSegment, encodeMidi, encodeMp3, encodeWav, exportAudio, exportMidi, midiToSampleName, parseTonic, sCurve, sampleFileName, svaraSemitone, svaraToMidi };
|
package/dist/player/index.d.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import { S as Swaralipi, T as Taal, O as Octave, a as SvaraLetter, N as Note } from '../schema-Cf_epUIC.js';
|
|
2
2
|
import { a as LaySpeeds, T as TaalId } from '../lay-CZIzR9cM.js';
|
|
3
3
|
export { b as LAYS, c as LAY_SPEEDS, L as Lay, p as printedLay, r as resolveLaySpeeds, d as rowLay } from '../lay-CZIzR9cM.js';
|
|
4
|
-
import { I as InstrumentId, a as InstrumentDef, S as Schedule, D as DrumVoice, T as TempoSegment } from '../schedule-
|
|
5
|
-
export { A as ARC_RAW_RE, b as DEFAULT_SOUNDS_BASE, c as DRUM_KIT_BASE, G as GRACE_STEP, d as GlideLeg, e as INSTRUMENTS, M as MEEND_HOLD, P as PlayEvent, f as SALAMANDER_BASE, g as SAMPLED_TAALS, h as ScheduleOptions, i as TABLA_BPMS, j as TABLA_VARIATIONS, k as TONEJS_INSTRUMENTS_BASE, l as ToneModule, m as buildSchedule, n as createBuffers, o as drumPattern, p as
|
|
4
|
+
import { I as InstrumentId, a as InstrumentDef, S as Schedule, D as DrumVoice, T as TempoSegment } from '../schedule-BUopqmWm.js';
|
|
5
|
+
export { A as ARC_RAW_RE, b as DEFAULT_SOUNDS_BASE, c as DRUM_KIT_BASE, G as GRACE_STEP, d as GlideLeg, e as INSTRUMENTS, L as Line, M as MEEND_HOLD, P as PlayEvent, f as SALAMANDER_BASE, g as SAMPLED_TAALS, h as ScheduleOptions, i as TABLA_BPMS, j as TABLA_VARIATIONS, k as TONEJS_INSTRUMENTS_BASE, l as ToneModule, m as buildSchedule, n as createBuffers, o as drumPattern, p as eventAt, q as glideTargets, r as graceTouches, s as instrumentSampleUrl, t as isArcRaw, u as meendContinuations, v as nearestSampleKey, w as nearestTablaBpm, x as normalizeBase, y as probeUrl, z as quantizeLoopEnd, B as santoorUrls, C as scheduleLines, E as subsetUrls, F as tablaBpms, H as tablaUrl, J as triggerGlide } from '../schedule-BUopqmWm.js';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import 'tone';
|
|
8
8
|
|
|
9
9
|
type PlayerState = 'idle' | 'loading' | 'ready' | 'playing' | 'paused';
|
|
10
10
|
type RhythmMode = 'tabla' | 'drums' | 'metronome' | 'none';
|
|
11
|
+
/** Repeated lines, as `part.row` paths (the viewer's `data-row`), inclusive. */
|
|
12
|
+
interface LineRange {
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
}
|
|
16
|
+
/** What the practice controls show: the repeated lines, whether the learner
|
|
17
|
+
* sings each pass back, and whether the pass now sounding is theirs. */
|
|
18
|
+
interface PracticeState {
|
|
19
|
+
loop: LineRange | null;
|
|
20
|
+
echo: boolean;
|
|
21
|
+
yourTurn: boolean;
|
|
22
|
+
}
|
|
11
23
|
interface PlayerOptions {
|
|
12
24
|
/** Base URL for the project's samples (santoor/tabla/tanpura/metronome).
|
|
13
25
|
* Defaults to `DEFAULT_SOUNDS_BASE` (the project's CORS-enabled CDN), so the
|
|
@@ -52,8 +64,12 @@ interface PlayerOptions {
|
|
|
52
64
|
/** Called when the preview cap stops playback (so the consumer can show an
|
|
53
65
|
* upsell). Not called on a normal stop()/end. */
|
|
54
66
|
onLimit?: () => void;
|
|
55
|
-
/** Called with the active note's `part.row.note` path, or null when idle.
|
|
56
|
-
|
|
67
|
+
/** Called with the active note's `part.row.note` path, or null when idle.
|
|
68
|
+
* `yourTurn` is true while the melody is silent for the learner to sing
|
|
69
|
+
* (see `setEcho`): the note is where they should be, not what is sounding. */
|
|
70
|
+
onHighlight?: (path: string | null, yourTurn?: boolean) => void;
|
|
71
|
+
/** Called whenever the repeat, the sing-back or the learner's turn changes. */
|
|
72
|
+
onLoop?: (state: PracticeState) => void;
|
|
57
73
|
/** The same path, but fired on the AUDIO clock — Tone's worker ticker, the one
|
|
58
74
|
* that fires the notes themselves — so it keeps arriving while the page is
|
|
59
75
|
* hidden. `onHighlight` cannot: it runs on Tone.Draw, i.e.
|
|
@@ -74,8 +90,10 @@ interface PlayerOptions {
|
|
|
74
90
|
* dependency on the viewer module). `highlight` returns the highlighted node
|
|
75
91
|
* (or null) so bindSheet can optionally scroll it into view. */
|
|
76
92
|
interface HighlightTarget {
|
|
77
|
-
highlight(path: string): HTMLElement | null;
|
|
93
|
+
highlight(path: string, yourTurn?: boolean): HTMLElement | null;
|
|
78
94
|
clearHighlights(): void;
|
|
95
|
+
/** Shade the repeated lines, and mark the learner's turn on them. */
|
|
96
|
+
markLoop?(loop: LineRange | null, yourTurn: boolean): void;
|
|
79
97
|
}
|
|
80
98
|
interface BindSheetOptions {
|
|
81
99
|
/** Keep the active note visible while playing by calling `scrollIntoView`
|
|
@@ -112,6 +130,12 @@ declare class SwaralipiPlayer {
|
|
|
112
130
|
/** Seconds played so far, off the Transport's own clock — so it holds while
|
|
113
131
|
* paused, and reads 0 before the first play and after stop(). */
|
|
114
132
|
get positionSec(): number;
|
|
133
|
+
/** The note last played or sought (`part.row.note`), or null. */
|
|
134
|
+
get cursor(): string | null;
|
|
135
|
+
/** The repeated lines, or null. */
|
|
136
|
+
get loop(): LineRange | null;
|
|
137
|
+
/** Whether each repeat is followed by a silent pass for the learner. */
|
|
138
|
+
get echo(): boolean;
|
|
115
139
|
/** Set the document to play. Stops any current playback. */
|
|
116
140
|
load(doc: Swaralipi): void;
|
|
117
141
|
/**
|
|
@@ -123,11 +147,42 @@ declare class SwaralipiPlayer {
|
|
|
123
147
|
* `variation` picks a tabla loop variation. Stops any current playback.
|
|
124
148
|
*/
|
|
125
149
|
loadTaal(taal: Taal): void;
|
|
126
|
-
/** Start (or resume) playback
|
|
127
|
-
*
|
|
128
|
-
|
|
150
|
+
/** Start (or resume) playback — from `from` (`part.row.note`, or `part.row`
|
|
151
|
+
* for a line's start) when given, which also jumps there mid-play. Must be
|
|
152
|
+
* triggered from a user gesture so the browser permits `AudioContext`
|
|
153
|
+
* resume. */
|
|
154
|
+
play(from?: string): Promise<void>;
|
|
129
155
|
/** Pause; `play()` resumes from the same position. */
|
|
130
156
|
pause(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Move the playhead to `path` (`part.row.note`, or `part.row` for a line's
|
|
159
|
+
* start). Playing, it jumps and keeps playing; paused or stopped, the next
|
|
160
|
+
* `play()` starts there. A repeat follows the playhead: seeking outside the
|
|
161
|
+
* repeated lines moves the repeat to the new line.
|
|
162
|
+
*/
|
|
163
|
+
seek(path: string): void;
|
|
164
|
+
/**
|
|
165
|
+
* Repeat lines `from`..`to` (`part.row`, either order, inclusive; `to`
|
|
166
|
+
* defaults to `from`). With no argument, the line under the playhead.
|
|
167
|
+
* `null` stops repeating, and ends the sing-back with it. A playhead
|
|
168
|
+
* outside the new repeat moves to its start; live while playing.
|
|
169
|
+
*/
|
|
170
|
+
setLoop(from?: string | null, to?: string): void;
|
|
171
|
+
/**
|
|
172
|
+
* Follow every pass of the repeat with a silent one: the tabla and tanpura
|
|
173
|
+
* keep time and the highlight keeps moving, but the melody rests so the
|
|
174
|
+
* learner can sing the line back — the teacher sings, the student answers.
|
|
175
|
+
* Turning it on with nothing repeating repeats the current line.
|
|
176
|
+
*/
|
|
177
|
+
setEcho(on: boolean): void;
|
|
178
|
+
/**
|
|
179
|
+
* Move by whole lines. Like a player's previous-track button, a step back
|
|
180
|
+
* from more than a matra into the line restarts that line first.
|
|
181
|
+
* `±Infinity` goes to the first / last line.
|
|
182
|
+
*/
|
|
183
|
+
stepLine(delta: number): void;
|
|
184
|
+
/** Move by single notes (rests and holds included — each is a column). */
|
|
185
|
+
stepNote(delta: number): void;
|
|
131
186
|
/**
|
|
132
187
|
* Stop and rewind to the start. When sounding, the accompaniment (tabla /
|
|
133
188
|
* metronome / tanpura, which otherwise loop) is gently faded out over
|
|
@@ -144,8 +199,18 @@ declare class SwaralipiPlayer {
|
|
|
144
199
|
setTanpura(on: boolean): void;
|
|
145
200
|
/** Override the taal (null restores auto-detection from `meta.taal`). */
|
|
146
201
|
setTaal(id: TaalId | null): void;
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
202
|
+
/**
|
|
203
|
+
* Wire highlight output to a `<swaralipi-sheet>` (or any highlight target).
|
|
204
|
+
* Pass `{ autoScroll }` to keep the active note in view while playing.
|
|
205
|
+
*
|
|
206
|
+
* A sheet element also becomes the practice surface: a tap on a line plays
|
|
207
|
+
* from the note under it (Shift stretches the repeat to that line), and
|
|
208
|
+
* while it has focus — only then, so no key is taken from the page — Space
|
|
209
|
+
* plays/pauses, ↑/↓ move by line, ←/→ by note, Home/End jump to the first /
|
|
210
|
+
* last line, R repeats the line, T turns sing-back on/off, Esc stops the
|
|
211
|
+
* repeat and Shift+↑/↓ stretch it. To gate a tap-to-play (a play quota, say),
|
|
212
|
+
* `preventDefault()` its `swaralipi-seek` event in a capturing listener.
|
|
213
|
+
*/
|
|
149
214
|
bindSheet(target: HighlightTarget, opts?: BindSheetOptions): void;
|
|
150
215
|
/**
|
|
151
216
|
* Check whether an instrument's samples are reachable (its CDN is up / the
|
|
@@ -342,4 +407,4 @@ declare function sampleFileName(midi: number): string;
|
|
|
342
407
|
*/
|
|
343
408
|
declare function sCurve(x: number, steepness?: number): number;
|
|
344
409
|
|
|
345
|
-
export { type AudioExportOptions, type AudioExportResult, type AudioFormat, type BindSheetOptions, DrumVoice, InstrumentDef, InstrumentId, LaySpeeds, type MidiExportOptions, type MidiExportResult, OCTAVE_OFFSET, type PlayerOptions, type PlayerState, type RhythmMode, SHUDDHA, Schedule, SwaralipiPlayer, TempoSegment, encodeMidi, encodeMp3, encodeWav, exportAudio, exportMidi, midiToSampleName, parseTonic, sCurve, sampleFileName, svaraSemitone, svaraToMidi };
|
|
410
|
+
export { type AudioExportOptions, type AudioExportResult, type AudioFormat, type BindSheetOptions, DrumVoice, InstrumentDef, InstrumentId, LaySpeeds, type LineRange, type MidiExportOptions, type MidiExportResult, OCTAVE_OFFSET, type PlayerOptions, type PlayerState, type PracticeState, type RhythmMode, SHUDDHA, Schedule, SwaralipiPlayer, TempoSegment, encodeMidi, encodeMp3, encodeWav, exportAudio, exportMidi, midiToSampleName, parseTonic, sCurve, sampleFileName, svaraSemitone, svaraToMidi };
|