prevent initially rendering non-sync romaji generated lyrics on karaoke lyrics

This commit is contained in:
jeffvli
2026-07-11 18:50:03 -07:00
parent bafc14b55a
commit 0270e9e9e5
4 changed files with 39 additions and 17 deletions
@@ -193,11 +193,13 @@ export const KaraokeLyricLine = memo(
[fontSize, alignment], [fontSize, alignment],
); );
const hasSyncedRomaji = romajiCueLines != null; const hasSyncedRomajiOverlay = romajiCueLines !== undefined;
const hasSyncedPronunciation = hasSyncedOverlayCueLines(pronunciationCueLines); const hasSyncedPronunciation = hasSyncedOverlayCueLines(pronunciationCueLines);
const hasSyncedTranslation = hasSyncedOverlayCueLines(translationCueLines); const hasSyncedTranslation = hasSyncedOverlayCueLines(translationCueLines);
const pronunciationFallbackText = const pronunciationFallbackText =
!hasSyncedRomaji && !hasSyncedPronunciation ? (pronunciationText ?? romajiText) : null; !hasSyncedRomajiOverlay && !hasSyncedPronunciation
? (pronunciationText ?? romajiText)
: null;
return ( return (
<Box <Box
+22 -10
View File
@@ -136,7 +136,10 @@ export const Lyrics = ({ fadeOutNoLyricsMessage = true, settingsKey = 'default'
}, [data, indexToUse, preferLocalLyrics]); }, [data, indexToUse, preferLocalLyrics]);
const { data: furiganaConvertedLyrics } = useFuriganaLyrics(lyrics?.lyrics, !!enableFurigana); const { data: furiganaConvertedLyrics } = useFuriganaLyrics(lyrics?.lyrics, !!enableFurigana);
const { data: romajiConvertedLyrics } = useRomajiLyrics(lyrics?.lyrics, !!enableRomaji); const { data: romajiConvertedLyrics, isFetching: isFetchingRomaji } = useRomajiLyrics(
lyrics?.lyrics,
!!enableRomaji,
);
const rawSyncedLyrics = useMemo(() => { const rawSyncedLyrics = useMemo(() => {
if (!synced || !lyrics || !('lyrics' in lyrics) || !Array.isArray(lyrics.lyrics)) { if (!synced || !lyrics || !('lyrics' in lyrics) || !Array.isArray(lyrics.lyrics)) {
@@ -226,12 +229,15 @@ export const Lyrics = ({ fadeOutNoLyricsMessage = true, settingsKey = 'default'
const displayOffsetMs = isLyricsDisabled ? 0 : currentOffsetMs; const displayOffsetMs = isLyricsDisabled ? 0 : currentOffsetMs;
const useServerPronunciation = !!pronunciationLyricsOverlay; const useServerPronunciation = !!pronunciationLyricsOverlay;
const { data: syncedRomajiLyrics } = useSyncedRomajiLyrics( const shouldGenerateSyncedRomaji =
rawSyncedLyrics,
!!enableRomaji && !!enableRomaji &&
!!rawSyncedLyrics && !!rawSyncedLyrics &&
lyricsHasWordCues(rawSyncedLyrics) && lyricsHasWordCues(rawSyncedLyrics) &&
!useServerPronunciation, !useServerPronunciation;
const { data: syncedRomajiLyrics, isFetching: isFetchingSyncedRomaji } = useSyncedRomajiLyrics(
rawSyncedLyrics,
shouldGenerateSyncedRomaji,
); );
const isKaraoke = useMemo(() => { const isKaraoke = useMemo(() => {
@@ -253,12 +259,11 @@ export const Lyrics = ({ fadeOutNoLyricsMessage = true, settingsKey = 'default'
offsetMs: displayOffsetMs, offsetMs: displayOffsetMs,
pronunciationLyrics: pronunciationLyricsOverlay, pronunciationLyrics: pronunciationLyricsOverlay,
romajiLyrics: romajiLyrics:
enableRomaji && !useServerPronunciation enableRomaji && !useServerPronunciation && !shouldGenerateSyncedRomaji
? (romajiConvertedLyrics as SynchronizedLyricsProps['romajiLyrics']) ? (romajiConvertedLyrics as SynchronizedLyricsProps['romajiLyrics'])
: null, : null,
settingsKey, settingsKey,
syncedRomajiLyrics: syncedRomajiLyrics: shouldGenerateSyncedRomaji ? (syncedRomajiLyrics ?? null) : null,
enableRomaji && !useServerPronunciation ? (syncedRomajiLyrics ?? null) : null,
translatedLyrics: translatedLyrics:
showTranslation && !translationLyricsOverlay ? translatedLyrics : null, showTranslation && !translationLyricsOverlay ? translatedLyrics : null,
translationLyrics: translationLyricsOverlay, translationLyrics: translationLyricsOverlay,
@@ -271,6 +276,7 @@ export const Lyrics = ({ fadeOutNoLyricsMessage = true, settingsKey = 'default'
isKaraoke, isKaraoke,
pronunciationLyricsOverlay, pronunciationLyricsOverlay,
romajiConvertedLyrics, romajiConvertedLyrics,
shouldGenerateSyncedRomaji,
syncedRomajiLyrics, syncedRomajiLyrics,
settingsKey, settingsKey,
showTranslation, showTranslation,
@@ -428,8 +434,14 @@ export const Lyrics = ({ fadeOutNoLyricsMessage = true, settingsKey = 'default'
return []; return [];
}, [data?.local]); }, [data?.local]);
const isWaitingForRomaji =
!!enableRomaji &&
!!lyrics &&
(isFetchingRomaji || (shouldGenerateSyncedRomaji && isFetchingSyncedRomaji));
const isLoadingLyrics = const isLoadingLyrics =
shouldFetchLyrics && (isWaitingToFetchLyrics || isLoading || isRefetching); shouldFetchLyrics &&
(isWaitingToFetchLyrics || isLoading || isRefetching || isWaitingForRomaji);
const hasNoLyrics = !displayLyrics; const hasNoLyrics = !displayLyrics;
const [shouldFadeOut, setShouldFadeOut] = useState(false); const [shouldFadeOut, setShouldFadeOut] = useState(false);
@@ -68,17 +68,17 @@
} }
.karaoke-word.karaoke-overlay-pronunciation { .karaoke-word.karaoke-overlay-pronunciation {
font-size: 0.8em; font-size: inherit;
font-weight: 600; font-weight: 600;
} }
.karaoke-word.karaoke-overlay-translation { .karaoke-word.karaoke-overlay-translation {
font-size: 0.85em; font-size: inherit;
font-weight: 500; font-weight: 500;
} }
.karaoke-word.karaoke-overlay-generic { .karaoke-word.karaoke-overlay-generic {
font-size: 0.8em; font-size: inherit;
font-weight: 500; font-weight: 500;
} }
@@ -360,11 +360,15 @@ export const SynchronizedKaraokeLyrics = ({
lineStartMs, lineStartMs,
idx, idx,
); );
const lineLevelRomaji =
syncedRomajiLyrics == null && romajiLyrics?.[idx]
? getLyricLineText(romajiLyrics[idx])
: undefined;
const pronunciationText = getOverlayText( const pronunciationText = getOverlayText(
pronunciationLyrics, pronunciationLyrics,
lineStartMs, lineStartMs,
idx, idx,
romajiLyrics?.[idx] ? getLyricLineText(romajiLyrics[idx]) : undefined, lineLevelRomaji,
); );
const translationText = getOverlayText( const translationText = getOverlayText(
translationLyrics, translationLyrics,
@@ -407,7 +411,11 @@ export const SynchronizedKaraokeLyrics = ({
lineIndex={idx} lineIndex={idx}
pronunciationCueLines={pronunciationCueLines} pronunciationCueLines={pronunciationCueLines}
pronunciationText={pronunciationText} pronunciationText={pronunciationText}
romajiCueLines={syncedRomajiLyrics?.[idx] ?? null} romajiCueLines={
syncedRomajiLyrics != null
? (syncedRomajiLyrics[idx] ?? null)
: undefined
}
translatedText={translationText} translatedText={translationText}
translationCueLines={translationCueLines} translationCueLines={translationCueLines}
/> />