@@ -4,6 +4,22 @@ import "dart:math" as math;
44
55enum TpsPlaybackStatus { idle, playing, paused, completed }
66
7+ abstract final class TpsPlaybackDefaults {
8+ static const defaultSpeedStepWpm = 10 ;
9+ static const defaultTickIntervalMs = 16 ;
10+ }
11+
12+ abstract final class TpsPlaybackEventNames {
13+ static const stateChanged = "stateChanged" ;
14+ static const wordChanged = "wordChanged" ;
15+ static const phraseChanged = "phraseChanged" ;
16+ static const blockChanged = "blockChanged" ;
17+ static const segmentChanged = "segmentChanged" ;
18+ static const statusChanged = "statusChanged" ;
19+ static const completed = "completed" ;
20+ static const snapshotChanged = "snapshotChanged" ;
21+ }
22+
723class TpsPosition {
824 const TpsPosition ({
925 required this .line,
@@ -1070,7 +1086,7 @@ class TpsPlayer {
10701086class TpsPlaybackSession {
10711087 TpsPlaybackSession (CompiledScript scriptOrPlayer, [TpsPlaybackSessionOptions options = const TpsPlaybackSessionOptions ()])
10721088 : player = TpsPlayer (scriptOrPlayer),
1073- tickIntervalMs = options.tickIntervalMs ?? 16 ,
1089+ tickIntervalMs = options.tickIntervalMs ?? TpsPlaybackDefaults .defaultTickIntervalMs ,
10741090 baseWpm = _normalizeBaseWpm (options.baseWpm),
10751091 speedStepWpm = _normalizeSpeedStep (options.speedStepWpm),
10761092 speedOffsetWpm = 0 {
@@ -1123,7 +1139,7 @@ class TpsPlaybackSession {
11231139 }
11241140
11251141 VoidCallback observeSnapshot (void Function (TpsPlaybackSnapshot ) listener, [bool emitCurrent = true ]) {
1126- final unsubscribe = on (" snapshotChanged" , (event) => listener (event as TpsPlaybackSnapshot ));
1142+ final unsubscribe = on (TpsPlaybackEventNames . snapshotChanged, (event) => listener (event as TpsPlaybackSnapshot ));
11271143 if (emitCurrent) {
11281144 listener (snapshot);
11291145 }
@@ -1306,7 +1322,7 @@ class TpsPlaybackSession {
13061322 }
13071323 }
13081324
1309- void _emitSnapshotChanged () => _emit (" snapshotChanged" , createSnapshot ());
1325+ void _emitSnapshotChanged () => _emit (TpsPlaybackEventNames . snapshotChanged, createSnapshot ());
13101326
13111327 int _readLiveElapsedMs () {
13121328 final deltaMs = ((_nowMs () - _playbackStartedAtMs) * playbackRate).round ();
@@ -1346,7 +1362,7 @@ class TpsPlaybackSession {
13461362 if (nextStatus == TpsPlaybackStatus .completed && previousStatus == TpsPlaybackStatus .playing) {
13471363 _clearTimer ();
13481364 }
1349- _emit (" statusChanged" , {
1365+ _emit (TpsPlaybackEventNames . statusChanged, {
13501366 "state" : currentState,
13511367 "previousStatus" : previousStatus,
13521368 "status" : nextStatus,
@@ -1363,22 +1379,22 @@ class TpsPlaybackSession {
13631379 currentState = nextState;
13641380 _updateStatus (resolvedStatus);
13651381 if (nextState.currentWord? .id != previousState.currentWord? .id) {
1366- _emit (" wordChanged" , {"state" : nextState, "previousState" : previousState, "status" : status});
1382+ _emit (TpsPlaybackEventNames . wordChanged, {"state" : nextState, "previousState" : previousState, "status" : status});
13671383 }
13681384 if (nextState.currentPhrase? .id != previousState.currentPhrase? .id) {
1369- _emit (" phraseChanged" , {"state" : nextState, "previousState" : previousState, "status" : status});
1385+ _emit (TpsPlaybackEventNames . phraseChanged, {"state" : nextState, "previousState" : previousState, "status" : status});
13701386 }
13711387 if (nextState.currentBlock? .id != previousState.currentBlock? .id) {
1372- _emit (" blockChanged" , {"state" : nextState, "previousState" : previousState, "status" : status});
1388+ _emit (TpsPlaybackEventNames . blockChanged, {"state" : nextState, "previousState" : previousState, "status" : status});
13731389 }
13741390 if (nextState.currentSegment? .id != previousState.currentSegment? .id) {
1375- _emit (" segmentChanged" , {"state" : nextState, "previousState" : previousState, "status" : status});
1391+ _emit (TpsPlaybackEventNames . segmentChanged, {"state" : nextState, "previousState" : previousState, "status" : status});
13761392 }
13771393 if (nextState.elapsedMs != previousState.elapsedMs || status != previousStatus) {
1378- _emit (" stateChanged" , {"state" : nextState, "previousState" : previousState, "status" : status});
1394+ _emit (TpsPlaybackEventNames . stateChanged, {"state" : nextState, "previousState" : previousState, "status" : status});
13791395 }
13801396 if (! previousState.isComplete && resolvedStatus == TpsPlaybackStatus .completed) {
1381- _emit (" completed" , {"state" : nextState, "previousState" : previousState, "status" : status});
1397+ _emit (TpsPlaybackEventNames . completed, {"state" : nextState, "previousState" : previousState, "status" : status});
13821398 }
13831399 _emitSnapshotChanged ();
13841400 return nextState;
@@ -1462,7 +1478,7 @@ class TpsStandalonePlayer {
14621478 VoidCallback on (String eventName, void Function (Object ? ) listener) => session.on (eventName, listener);
14631479 void off (String eventName, void Function (Object ? ) listener) => session.off (eventName, listener);
14641480 VoidCallback observeSnapshot (void Function (TpsPlaybackSnapshot ) listener, [bool emitCurrent = true ]) => session.observeSnapshot (listener, emitCurrent);
1465- VoidCallback onSnapshotChanged (void Function (TpsPlaybackSnapshot ) listener) => session.on (" snapshotChanged" , (event) => listener (event as TpsPlaybackSnapshot ));
1481+ VoidCallback onSnapshotChanged (void Function (TpsPlaybackSnapshot ) listener) => session.on (TpsPlaybackEventNames . snapshotChanged, (event) => listener (event as TpsPlaybackSnapshot ));
14661482 PlayerState play () => session.play ();
14671483 PlayerState pause () => session.pause ();
14681484 PlayerState stop () => session.stop ();
@@ -3561,7 +3577,7 @@ bool _isSpokenWord(_WordSeed word) => word.kind == "word" && word.cleanText.isNo
35613577int _clamp (int value, int minimum, int maximum) => math.min (math.max (value, minimum), maximum);
35623578int _clampWpm (int candidate, int fallback) => candidate.isFinite ? _clamp (candidate, TpsSpec .minimumWpm, TpsSpec .maximumWpm) : fallback;
35633579int _normalizeBaseWpm (int ? value) => _clampWpm (value ?? TpsSpec .defaultBaseWpm, TpsSpec .defaultBaseWpm);
3564- int _normalizeSpeedStep (int ? value) => value == null || value <= 0 ? 10 : value;
3580+ int _normalizeSpeedStep (int ? value) => value == null || value <= 0 ? TpsPlaybackDefaults .defaultSpeedStepWpm : value;
35653581int _normalizeSpeedOffset (int baseWpm, int offset) => _clamp (baseWpm + offset, TpsSpec .minimumWpm, TpsSpec .maximumWpm) - baseWpm;
35663582int _nowMs () => DateTime .now ().millisecondsSinceEpoch;
35673583TpsPlaybackStatus _resolveStatusAfterSeek (TpsPlaybackStatus current, int totalDurationMs, int elapsedMs) {
0 commit comments