@uimaxbai/am-lyrics 1.5.0 → 1.5.2
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/src/AmLyrics.d.ts.map +1 -1
- package/dist/src/am-lyrics.js +78 -25
- package/dist/src/am-lyrics.js.map +1 -1
- package/dist/src/react.js +78 -25
- package/dist/src/react.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
- package/src/AmLyrics.ts +116 -29
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AmLyrics.d.ts","sourceRoot":"","sources":["../../src/AmLyrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAO,MAAM,KAAK,CAAC;AAyGjD,qBAAa,QAAS,SAAQ,UAAU;IACtC,MAAM,CAAC,MAAM,0BAm5CX;IAGF,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,OAAO,CAAC,cAAc,CAAmC;IAGzD,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,cAAc,SAAa;IAG3B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAG/B,UAAU,UAAQ;IAGlB,WAAW,UAAQ;IAGnB,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,eAAe,CAAS;YAElB,kBAAkB;YAKlB,iBAAiB;YAsBjB,iBAAiB;YAKjB,gBAAgB;IAyC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,YAAY,CAAK;IAEzB,IACI,WAAW,CAAC,KAAK,EAAE,MAAM,EA0C5B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAGD,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,MAAM,CAAC,CAAe;IAE9B,OAAO,CAAC,iBAAiB,CAAgB;IAEzC,OAAO,CAAC,qBAAqB,CAAkC;IAE/D,OAAO,CAAC,2BAA2B,CAAkC;IAErE,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,sBAAsB,CAAkC;IAGhE,OAAO,CAAC,YAAY,CAAuB;IAG3C,OAAO,CAAC,gBAAgB,CAA+B;IAGvD,OAAO,CAAC,kBAAkB,CAAK;IAE/B,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO,CAAC,sBAAsB,CAAS;IAEvC,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,OAAO,CAAC,kBAAkB,CAGZ;IAEd,OAAO,CAAC,wBAAwB,CAGlB;IAGd,OAAO,CAAC,eAAe,CAAC,CAAc;IAEtC,OAAO,CAAC,qBAAqB,CAAuB;IAEpD,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,oBAAoB,CAAS;IAErC,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,gBAAgB,CAAC,CAAgC;IAGzD,OAAO,CAAC,iBAAiB,CAAqB;IAG9C,OAAO,CAAC,eAAe,CAAqB;IAG5C,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,eAAe,CAAkC;IAGzD,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,gBAAgB,CAAS;IAGjC,OAAO,CAAC,cAAc,CAWL;IAGjB,OAAO,CAAC,aAAa,CAA0B;IAE/C,OAAO,CAAC,wBAAwB,CAA4B;IAE5D,OAAO,CAAC,qBAAqB,CAA4B;IAGzD,OAAO,CAAC,oBAAoB,CAGZ;IAEhB,OAAO,CAAC,mBAAmB,CAAK;IAEhC,OAAO,CAAC,cAAc,CAAqB;IAE3C,OAAO,CAAC,sBAAsB,CAAC,CAAgC;IAE/D,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAG5D,OAAO,CAAC,oBAAoB,CAAC,CAAkB;IAG/C,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,cAAc,CAA0B;IAGhD,OAAO,CAAC,kBAAkB,CAAC,CAAuB;IAGlD,OAAO,CAAC,sBAAsB,CAAuB;IAGrD,OAAO,CAAC,qBAAqB,CAAqB;IAElD,OAAO,CAAC,sBAAsB,CAAqB;IAEnD,OAAO,CAAC,qBAAqB,CAAqB;IAGlD,OAAO,CAAC,sBAAsB,CAAoC;IAElE,OAAO,CAAC,qBAAqB,CAAmC;IAEhE,iBAAiB;IAKjB,oBAAoB;YA2CN,WAAW;
|
|
1
|
+
{"version":3,"file":"AmLyrics.d.ts","sourceRoot":"","sources":["../../src/AmLyrics.ts"],"names":[],"mappings":"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"}
|
package/dist/src/am-lyrics.js
CHANGED
|
@@ -319,7 +319,7 @@ class GoogleService {
|
|
|
319
319
|
}
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
const VERSION = '1.5.
|
|
322
|
+
const VERSION = '1.5.2';
|
|
323
323
|
const INSTRUMENTAL_THRESHOLD_MS = 7000; // Show dots for gaps >= 7s
|
|
324
324
|
const FETCH_TIMEOUT_MS = 8000; // Timeout for all lyrics fetch requests
|
|
325
325
|
const SEEK_THRESHOLD_MS = 500;
|
|
@@ -597,20 +597,23 @@ class AmLyrics extends i {
|
|
|
597
597
|
if (biniResult && biniResult.lines.length > 0) {
|
|
598
598
|
collectedSources.push(biniResult);
|
|
599
599
|
}
|
|
600
|
-
|
|
600
|
+
const hasWordSync = (sources) => sources.some(s => s.lines.some(l => l.isWordSynced || (l.text && l.text.length > 1)));
|
|
601
|
+
if (collectedSources.length === 0 || !hasWordSync(collectedSources)) {
|
|
601
602
|
const unisonResult = await AmLyrics.fetchLyricsFromUnison(resolvedMetadata.metadata);
|
|
602
603
|
if (unisonResult && unisonResult.lines.length > 0) {
|
|
603
604
|
collectedSources.push(unisonResult);
|
|
604
605
|
}
|
|
605
606
|
}
|
|
606
|
-
if (collectedSources.length === 0) {
|
|
607
|
+
if (collectedSources.length === 0 || !hasWordSync(collectedSources)) {
|
|
607
608
|
const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(title, artist, resolvedMetadata.catalogIsrc, resolvedMetadata.metadata, true);
|
|
608
609
|
if (youLyResults && youLyResults.length > 0) {
|
|
609
610
|
collectedSources.push(...youLyResults);
|
|
610
611
|
}
|
|
611
612
|
}
|
|
612
613
|
}
|
|
613
|
-
|
|
614
|
+
const hasLineSync = (sources) => sources.some(s => s.lines.some(l => l.timestamp > 0 || l.endtime > 0));
|
|
615
|
+
if ((collectedSources.length === 0 || !hasLineSync(collectedSources)) &&
|
|
616
|
+
resolvedMetadata?.metadata) {
|
|
614
617
|
// Fallback: LRCLIB
|
|
615
618
|
const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(resolvedMetadata.metadata);
|
|
616
619
|
if (lrclibResult && lrclibResult.lines.length > 0) {
|
|
@@ -761,6 +764,23 @@ class AmLyrics extends i {
|
|
|
761
764
|
const resolvedMetadata = await this.resolveSongMetadata();
|
|
762
765
|
if (resolvedMetadata?.metadata) {
|
|
763
766
|
const newSources = [];
|
|
767
|
+
// Try Unison if not fetched
|
|
768
|
+
if (!this.availableSources.some(s => s.source.toLowerCase().includes('unison'))) {
|
|
769
|
+
const unisonResult = await AmLyrics.fetchLyricsFromUnison(resolvedMetadata.metadata);
|
|
770
|
+
if (unisonResult && unisonResult.lines.length > 0) {
|
|
771
|
+
newSources.push(unisonResult);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
// Try YouLyPlus (KPoe) if we don't have Apple or QQ
|
|
775
|
+
if (!this.availableSources.some(s => s.source.toLowerCase().includes('apple') ||
|
|
776
|
+
s.source.toLowerCase().includes('qq'))) {
|
|
777
|
+
const title = resolvedMetadata.metadata.title?.trim() || '';
|
|
778
|
+
const artist = resolvedMetadata.metadata.artist?.trim() || '';
|
|
779
|
+
const youLyResults = await AmLyrics.fetchLyricsFromYouLyPlus(title, artist, resolvedMetadata.catalogIsrc, resolvedMetadata.metadata, true);
|
|
780
|
+
if (youLyResults && youLyResults.length > 0) {
|
|
781
|
+
newSources.push(...youLyResults);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
764
784
|
// Try LRCLIB if not fetched
|
|
765
785
|
if (!this.availableSources.some(s => s.source.toLowerCase().includes('lrclib'))) {
|
|
766
786
|
const lrclibResult = await AmLyrics.fetchLyricsFromLrclib(resolvedMetadata.metadata);
|
|
@@ -2036,6 +2056,15 @@ class AmLyrics extends i {
|
|
|
2036
2056
|
const currentGap = this.findInstrumentalGapAt(newTime);
|
|
2037
2057
|
if (currentGap) {
|
|
2038
2058
|
this.lastInstrumentalIndex = currentGap.insertBeforeIndex;
|
|
2059
|
+
// Un-highlight the previous line immediately when gap dots are playing
|
|
2060
|
+
if (currentGap.insertBeforeIndex > 0) {
|
|
2061
|
+
const prevLine = this._getLineElement(currentGap.insertBeforeIndex - 1);
|
|
2062
|
+
if (prevLine &&
|
|
2063
|
+
prevLine.classList.contains('persist-highlight') &&
|
|
2064
|
+
!prevLine.classList.contains('active')) {
|
|
2065
|
+
AmLyrics.unfinishSyllables(prevLine);
|
|
2066
|
+
}
|
|
2067
|
+
}
|
|
2039
2068
|
}
|
|
2040
2069
|
else if (this.lastInstrumentalIndex !== null) {
|
|
2041
2070
|
this.lastInstrumentalIndex = null;
|
|
@@ -2182,7 +2211,18 @@ class AmLyrics extends i {
|
|
|
2182
2211
|
}
|
|
2183
2212
|
// 1. Compute scroll lookahead based on gap to next line (YouLyPlus style)
|
|
2184
2213
|
let scrollLookAheadMs = 350;
|
|
2185
|
-
|
|
2214
|
+
let currentAudioIndex = -1;
|
|
2215
|
+
for (let i = 0; i < this.lyrics.length; i += 1) {
|
|
2216
|
+
if (this.lyrics[i].timestamp > this.currentTime) {
|
|
2217
|
+
currentAudioIndex = i - 1;
|
|
2218
|
+
break;
|
|
2219
|
+
}
|
|
2220
|
+
}
|
|
2221
|
+
if (currentAudioIndex === -1 && this.lyrics.length > 0) {
|
|
2222
|
+
if (this.currentTime >= this.lyrics[this.lyrics.length - 1].timestamp) {
|
|
2223
|
+
currentAudioIndex = this.lyrics.length - 1;
|
|
2224
|
+
}
|
|
2225
|
+
}
|
|
2186
2226
|
if (currentAudioIndex !== -1 &&
|
|
2187
2227
|
currentAudioIndex + 1 < this.lyrics.length) {
|
|
2188
2228
|
const currentLine = this.lyrics[currentAudioIndex];
|
|
@@ -2193,29 +2233,32 @@ class AmLyrics extends i {
|
|
|
2193
2233
|
// 2. Find scroll target at predictive time
|
|
2194
2234
|
const predictiveTime = this.currentTime + scrollLookAheadMs;
|
|
2195
2235
|
const predictiveActiveIndices = this.findActiveLineIndices(predictiveTime);
|
|
2196
|
-
let
|
|
2236
|
+
let targetElement = null;
|
|
2197
2237
|
if (predictiveActiveIndices.length > 0) {
|
|
2198
|
-
|
|
2238
|
+
const targetLineIdx = this.getPrimaryScrollLineIndex(predictiveActiveIndices, predictiveTime);
|
|
2239
|
+
if (targetLineIdx !== null && targetLineIdx !== -1) {
|
|
2240
|
+
targetElement = this._getLineElement(targetLineIdx);
|
|
2241
|
+
}
|
|
2199
2242
|
}
|
|
2200
|
-
|
|
2243
|
+
if (!targetElement) {
|
|
2201
2244
|
// Fallback: closest line before predictiveTime
|
|
2202
|
-
|
|
2245
|
+
const targetLineIdx = this.getLineIndexAtTime(predictiveTime, 0);
|
|
2246
|
+
if (targetLineIdx !== null && targetLineIdx !== -1) {
|
|
2247
|
+
targetElement = this._getLineElement(targetLineIdx);
|
|
2248
|
+
}
|
|
2203
2249
|
}
|
|
2204
|
-
if (
|
|
2205
|
-
return;
|
|
2206
|
-
const targetLine = this._getLineElement(targetLineIndex);
|
|
2207
|
-
if (!targetLine)
|
|
2250
|
+
if (!targetElement)
|
|
2208
2251
|
return;
|
|
2209
2252
|
// Unblur the upcoming target line early (pre-active) so background
|
|
2210
2253
|
// vocals start their max-height/opacity transition in sync with scroll.
|
|
2211
|
-
if (!
|
|
2212
|
-
|
|
2213
|
-
if (!this.preActiveLineElements.includes(
|
|
2214
|
-
this.preActiveLineElements.push(
|
|
2254
|
+
if (!targetElement.classList.contains('active')) {
|
|
2255
|
+
targetElement.classList.add('pre-active');
|
|
2256
|
+
if (!this.preActiveLineElements.includes(targetElement)) {
|
|
2257
|
+
this.preActiveLineElements.push(targetElement);
|
|
2215
2258
|
}
|
|
2216
2259
|
}
|
|
2217
2260
|
const scrollDuration = scrollLookAheadMs;
|
|
2218
|
-
this.focusLine(
|
|
2261
|
+
this.focusLine(targetElement, forceScroll, scrollDuration);
|
|
2219
2262
|
}
|
|
2220
2263
|
_getTextWidth(text, font) {
|
|
2221
2264
|
if (!this._textWidthCanvas) {
|
|
@@ -3520,7 +3563,17 @@ class AmLyrics extends i {
|
|
|
3520
3563
|
syllable.style.removeProperty('--pre-wipe-delay');
|
|
3521
3564
|
const chars = syllable.querySelectorAll('span.char');
|
|
3522
3565
|
for (let ci = 0; ci < chars.length; ci += 1) {
|
|
3523
|
-
chars[ci]
|
|
3566
|
+
const charEl = chars[ci];
|
|
3567
|
+
const currentAnim = charEl.style.animation || '';
|
|
3568
|
+
if (currentAnim.includes('grow-dynamic') ||
|
|
3569
|
+
currentAnim.includes('rise-char')) {
|
|
3570
|
+
const parts = currentAnim.split(',').map(p => p.trim());
|
|
3571
|
+
const transformAnim = parts.find(p => p.includes('grow-dynamic') || p.includes('rise-char'));
|
|
3572
|
+
charEl.style.animation = transformAnim || '';
|
|
3573
|
+
}
|
|
3574
|
+
else {
|
|
3575
|
+
charEl.style.animation = '';
|
|
3576
|
+
}
|
|
3524
3577
|
}
|
|
3525
3578
|
}
|
|
3526
3579
|
}
|
|
@@ -4869,21 +4922,21 @@ AmLyrics.styles = i$3 `
|
|
|
4869
4922
|
.lyrics-line.active:not(.lyrics-gap)
|
|
4870
4923
|
.lyrics-word:not(.growable)
|
|
4871
4924
|
.lyrics-syllable.highlight {
|
|
4872
|
-
transform:
|
|
4925
|
+
transform: translate3d(0, var(--char-rise-y, -1.12px), 0);
|
|
4873
4926
|
}
|
|
4874
4927
|
|
|
4875
4928
|
.lyrics-line.persist-highlight:not(.lyrics-gap)
|
|
4876
4929
|
.lyrics-word:not(.growable)
|
|
4877
4930
|
.lyrics-syllable.finished {
|
|
4878
|
-
transform:
|
|
4931
|
+
transform: translate3d(0, var(--char-rise-y, -1.12px), 0);
|
|
4879
4932
|
}
|
|
4880
4933
|
|
|
4881
4934
|
.lyrics-word.growable .lyrics-syllable.cleanup .char {
|
|
4882
|
-
transform:
|
|
4935
|
+
transform: translate3d(0, var(--char-rise-y, -1.12px), 0);
|
|
4883
4936
|
}
|
|
4884
4937
|
|
|
4885
4938
|
.lyrics-word.char-rise .lyrics-syllable.cleanup .char {
|
|
4886
|
-
transform:
|
|
4939
|
+
transform: translate3d(0, var(--char-rise-y, -1.12px), 0);
|
|
4887
4940
|
}
|
|
4888
4941
|
|
|
4889
4942
|
.lyrics-line.persist-highlight
|
|
@@ -4894,7 +4947,7 @@ AmLyrics.styles = i$3 `
|
|
|
4894
4947
|
.lyrics-word.char-rise
|
|
4895
4948
|
.lyrics-syllable.finished
|
|
4896
4949
|
.char {
|
|
4897
|
-
transform:
|
|
4950
|
+
transform: translate3d(0, var(--char-rise-y, -1.12px), 0);
|
|
4898
4951
|
}
|
|
4899
4952
|
|
|
4900
4953
|
/* Background vocal overrides — placed AFTER main rules so they win
|
|
@@ -4988,6 +5041,7 @@ AmLyrics.styles = i$3 `
|
|
|
4988
5041
|
background-clip: text;
|
|
4989
5042
|
-webkit-background-clip: text;
|
|
4990
5043
|
backface-visibility: hidden;
|
|
5044
|
+
transform-origin: 50% 80%;
|
|
4991
5045
|
transition:
|
|
4992
5046
|
color 0.7s,
|
|
4993
5047
|
background-color 0.7s,
|
|
@@ -5025,7 +5079,6 @@ AmLyrics.styles = i$3 `
|
|
|
5025
5079
|
background-position:
|
|
5026
5080
|
-0.5em 0%,
|
|
5027
5081
|
-0.25em 0%;
|
|
5028
|
-
transform-origin: 50% 80%;
|
|
5029
5082
|
transition:
|
|
5030
5083
|
transform 0.7s ease,
|
|
5031
5084
|
color 0.18s;
|