Lyric Lines With 0ms Duration Words Remains Highlighted In (e)LRCs

Issue description:

In some lrc files I own, some lyric lines contains a 0ms duration word (e.g. [00:00.00]<00:00.00>結<00:00.00>束<00:00.00>バ<00:00.00>ン<00:00.00>ド <00:00.00>- <00:00.00>ひ<00:00.00>と<00:00.00>り<00:00.00>ぼ<00:00.00>っ<00:00.00>ち<00:00.00>東<00:00.00>京<00:00.00>, [00:00.78]<00:00.78>作<00:00.78>曲:<00:00.78>永<00:00.78>井<00:00.78>正<00:00.78>道<00:00.78> & ...<01:55.39>?<01:55.39>). And this seems to cause the renderer to stuck highlighting the lines containing those as the “current” line for as long as the track is displayed.

I believe it should be handled gracefully (e.g., by forcing it to 1ms), as the current behavior is quite confusing in my opinion.

Logs:

Upload description: azu0609

Additional information:

 
The source lrc file used here is:

[00:00.00]<00:00.00>結<00:00.00>束<00:00.00>バ<00:00.00>ン<00:00.00>ド <00:00.00>- <00:00.00>ひ<00:00.00>と<00:00.00>り<00:00.00>ぼ<00:00.00>っ<00:00.00>ち<00:00.00>東<00:00.00>京<00:00.00>
[00:00.00]<00:00.00>作<00:00.15>词:<00:00.31>樋<00:00.46>口<00:00.62>愛<00:00.78>
[00:00.78]<00:00.78>作<00:00.78>曲:<00:00.78>永<00:00.78>井<00:00.78>正<00:00.78>道<00:00.78>
[00:00.78]<00:00.78>编<00:00.82>曲<00:00.88>:<00:00.90>三<00:00.95>井<00:00.97>律<00:01.01>郎<00:01.03>
[00:01.03]<00:01.03>ひ<00:01.17>と<00:01.43>り<00:01.69>ぼ<00:01.83>っ<00:01.97>ち<00:02.17>東<00:02.45>京<00:03.24>
[00:03.24]<00:03.24>優<00:03.54>し<00:03.70>く<00:03.87>な<00:04.02>い<00:04.16>街<00:04.47>に<00:04.60>降<00:04.90>り<00:05.07>た<00:05.51>
[00:05.75]<00:05.75>人<00:06.06>の<00:06.22>波<00:06.53>に<00:06.68>乗<00:06.81>っ<00:06.94>て<00:07.11>抜<00:07.30>け<00:07.48>る<00:07.64>駅<00:07.95>の<00:08.20>改<00:08.54>札<00:09.95>
[00:10.70]<00:10.70>す<00:10.99>れ<00:11.19>違<00:11.64>う<00:11.99>人<00:12.41>の<00:12.96>
[00:13.21]<00:13.21>知<00:13.38>ら<00:13.53>な<00:13.69>い<00:13.85>匂<00:14.19>い<00:14.39>に<00:14.56>な<00:14.71>ぜ<00:14.97>か<00:15.49>
[00:15.76]<00:15.76>懐<00:16.07>か<00:16.28>し<00:16.41>い<00:16.55>思<00:16.87>い<00:17.03>出<00:17.18>が<00:17.43>巡<00:17.88>っ<00:17.98>て<00:18.35>る<00:18.74>
[00:20.43]<00:20.43>蘇<00:21.13>る<00:21.43>
[00:28.52]<00:28.52>駅<00:28.86>前<00:29.23>フ<00:29.31>ァ<00:29.38>ス<00:29.53>ト<00:29.68>フ<00:29.80>ー<00:29.91>ド<00:30.32>
[00:30.63]<00:30.63>揚<00:30.81>げ<00:30.97>た<00:31.13>て<00:31.29>の<00:31.45>ポ<00:31.61>テ<00:31.77>ト<00:31.94>は<00:32.10>ラ<00:32.25>ッ<00:32.40>キ<00:32.79>ー<00:33.18>
[00:33.18]<00:33.18>緩<00:33.53>や<00:33.73>か<00:33.87>に<00:34.02>下<00:34.39>る<00:34.54>坂<00:34.89>道<00:35.50>を<00:35.76>歩<00:36.05>い<00:36.24>て<00:37.41>
[00:38.37]<00:38.37>踏<00:38.67>切<00:39.31>の<00:39.53>音<00:40.67> <00:40.67>遠<00:40.91>く<00:41.13>聴<00:41.28>こ<00:41.42>え<00:41.57>た<00:41.72>気<00:41.87>が<00:42.16>す<00:42.43>る<00:42.85>
[00:43.11]<00:43.11>そ<00:43.29>れ<00:43.47>で<00:43.65>も<00:43.83>
[00:43.83]<00:43.83>う<00:43.99>し<00:44.14>ろ<00:44.31>振<00:44.45>り<00:44.61>向<00:44.77>か<00:44.92>ず<00:45.12>に<00:45.29>進<00:45.62>む<00:45.78>よ<00:46.53>
[00:47.91]<00:47.91>い<00:48.07>く<00:48.24>よ<00:49.06>?<00:49.06>せ<00:49.38>ー<00:49.71>の<00:50.48> <00:50.48>重<00:50.91>い<00:51.20>ド<00:51.69>ア<00:52.56>を<00:52.84>押<00:53.08>せ<00:53.40>ば<00:53.80>
[00:54.12]<00:54.12>変<00:54.43>わ<00:55.04>れ<00:55.70>る<00:55.98>よ<00:56.51>う<00:57.05>な<00:57.22>気<00:57.55>が<00:57.84>し<00:58.12>て<00:59.64>
[01:00.34]<01:00.34>ギ<01:00.67>タ<01:00.85>ー<01:01.04>の<01:01.64>音<01:02.12>が<01:02.84> <01:02.84>熱<01:03.39>く<01:03.71>な<01:03.91>る<01:04.20>の<01:04.48>は<01:05.07>
[01:05.32]<01:05.32>わ<01:05.47>た<01:05.63>し<01:05.77>の<01:05.92>中<01:06.32>に<01:06.49>青<01:06.97>い<01:07.49>炎<01:08.17>が<01:08.27>あ<01:08.43>る<01:09.36>か<01:09.58>ら<01:10.13>
[01:10.31]<01:10.31>重<01:10.66>な<01:11.18>る<01:11.42>声<01:11.98>が<01:12.45> <01:12.70>耳<01:13.48>に<01:13.76>届<01:14.19>い<01:14.38>て<01:14.56>る<01:15.02>間<01:15.70>は<01:16.25>
[01:16.86]<01:16.86>さ<01:17.06>み<01:17.48>し<01:17.73>く<01:18.05>な<01:18.38>い<01:18.56>ん<01:18.74>だ<01:18.89>よ<01:19.54>
[01:20.40]<01:20.40>ち<01:20.49>ょ<01:20.58>っ<01:20.67>と<01:21.38>優<01:21.79>し<01:22.04>く<01:22.39>見<01:22.52>え<01:22.67>た<01:22.91>東<01:23.17>京<01:23.73>
[01:33.49]<01:33.49>さ<01:33.66>み<01:33.88>し<01:34.04>が<01:34.32>り<01:34.55>東<01:34.85>京<01:35.61>
[01:35.61]<01:35.61>み<01:35.77>ん<01:35.93>な<01:36.14>ひ<01:36.34>と<01:36.48>り<01:36.62>き<01:36.78>り<01:36.95>な<01:37.15>ん<01:37.34>だ<01:37.92>
[01:38.22]<01:38.22>だ<01:38.38>か<01:38.54>ら<01:38.77>ま<01:38.91>た<01:39.05>誰<01:39.35>か<01:39.50>と<01:39.63>
[01:39.63]<01:39.63>つ<01:39.84>な<01:40.01>が<01:40.23>り<01:40.37>合<01:40.66>い<01:40.84>た<01:41.00>い<01:41.27>の<01:42.33>
[01:43.44]<01:43.44>な<01:43.58>ん<01:43.71>だ<01:43.86>っ<01:44.00>て<01:44.25>い<01:44.51>い<01:44.76>よ<01:45.28>
[01:45.65]<01:45.65>好<01:45.84>き<01:45.99>な<01:46.15>も<01:46.30>の<01:46.45>や<01:46.58>こ<01:46.74>と<01:46.89>な<01:47.33>ら<01:47.63>ハ<01:47.78>ッ<01:47.93>ピ<01:48.33>ー<01:48.73>
[01:48.73]<01:48.73>絶<01:48.94>対<01:49.42>共<01:49.67>通<01:50.00>言<01:50.30>語<01:50.61>が<01:50.80>あ<01:50.98>る<01:51.38>よ<01:52.13>
[01:52.93]<01:52.93>あ<01:53.12>の<01:53.41>さ<01:54.12> <01:54.12>な<01:54.41>あ<01:54.70>に<01:55.39>?<01:55.39>
[01:55.39]<01:55.39>言<01:55.62>え<01:55.91>な<01:56.20>い<01:56.55>夢<01:57.53>ば<01:57.81>か<01:58.09>り<01:58.39>だ<01:58.85>
[01:59.12]<01:59.12>け<01:59.64>ど<02:00.37> <02:00.37>い<02:00.69>つ<02:00.99>か<02:02.36>聞<02:02.56>い<02:02.75>て<02:03.21>ね<02:05.00>
[02:05.36]<02:05.36>き<02:05.50>っ<02:05.64>と<02:06.98>君<02:08.08>に<02:08.31>な<02:08.47>ら<02:09.65>
[02:10.37]<02:10.37>ギ<02:10.59>タ<02:10.93>ー<02:11.26>の<02:11.42>音<02:11.95>が<02:12.51> <02:12.78>歪<02:13.36>ん<02:13.69>で<02:13.87>る<02:14.16>の<02:14.42>は<02:15.00>
[02:15.29]<02:15.29>わ<02:15.46>た<02:15.61>し<02:15.76>の<02:15.89>中<02:16.29>に<02:16.47>青<02:16.90>い<02:17.47>炎<02:18.18>が<02:18.36>あ<02:18.54>る<02:19.37>か<02:19.56>ら<02:20.12>
[02:20.31]<02:20.31>重<02:20.89>な<02:21.19>る<02:21.39>声<02:21.96>を<02:22.49>
[02:23.03]<02:23.03>す<02:23.20>ぐ<02:23.41>に<02:23.70>届<02:24.19>け<02:24.48>に<02:24.87>ゆ<02:25.14>く<02:25.41>か<02:25.66>ら<02:26.56>
[02:26.84]<02:26.84>さ<02:27.02>み<02:27.41>し<02:27.67>く<02:27.94>さ<02:28.13>せ<02:28.39>な<02:28.60>い<02:28.78>よ<02:29.43>
[02:30.40]<02:30.40>も<02:30.60>う<02:30.80>ち<02:30.97>ょ<02:31.13>っ<02:31.30>と<02:31.49>だ<02:31.75>け<02:32.03>ま<02:32.25>っ<02:32.47>て<02:32.66>て<02:33.00>東<02:33.22>京<02:33.72>
[02:44.06]<02:44.06>大<02:44.46>都<02:44.74>会<02:45.32> <02:45.32>空<02:45.76>に<02:45.93>向<02:46.19>か<02:46.59>っ<02:46.98>て<02:47.96>
[02:48.86]<02:48.86>伸<02:49.10>び<02:49.37>て<02:49.57>い<02:49.77>く<02:50.17>ビ<02:50.50>ル<02:50.80>に<02:51.05>夕<02:51.51>焼<02:51.89>け<02:52.85>
[02:53.13]<02:53.13>駆<02:53.34>け<02:53.51>出<02:53.79>せ<02:54.45> <02:54.45>目<02:54.63>を<02:54.81>開<02:55.15>け<02:55.52>
[02:55.70]<02:55.70>影<02:56.26> <02:56.26>引<02:56.48>き<02:56.80>連<02:57.42>れ<02:57.76>て<02:58.00>ゆ<02:58.39>け<02:58.91>
[02:59.40]<02:59.40>ひ<02:59.58>と<02:59.72>り<03:00.28>じ<03:00.41>ゃ<03:00.55>な<03:00.80>い<03:03.44>
[03:05.53]<03:05.53>ギ<03:05.79>タ<03:05.92>ー<03:06.05>の<03:06.56>音<03:07.01>が<03:07.47> <03:07.76>熱<03:08.37>く<03:08.68>な<03:08.86>る<03:09.18>の<03:09.44>は<03:10.01>
[03:10.30]<03:10.30>わ<03:10.47>た<03:10.62>し<03:10.75>の<03:10.90>中<03:11.30>に<03:11.50>青<03:11.99>い<03:12.50>炎<03:13.19>が<03:13.23>あ<03:13.39>る<03:14.30>か<03:14.58>ら<03:15.08>
[03:15.28]<03:15.28>重<03:15.85>な<03:16.16>る<03:16.39>声<03:16.93>が<03:17.39> <03:17.72>耳<03:18.48>に<03:18.76>届<03:19.20>い<03:19.38>て<03:19.63>る<03:20.02>間<03:20.75>は<03:21.33>
[03:21.78]<03:21.78>さ<03:22.02>み<03:22.42>し<03:22.70>く<03:23.10>な<03:23.42>い<03:23.62>ん<03:23.81>だ<03:23.97>よ<03:24.64>
[03:25.49]<03:25.49>ち<03:25.58>ょ<03:25.68>っ<03:25.77>と<03:26.25>優<03:26.71>し<03:26.97>く<03:27.32>見<03:27.48>え<03:27.75>た<03:27.95>東<03:28.11>京<03:28.55>
[03:30.43]<03:30.43>誰<03:30.92>も<03:31.32>が<03:31.51>ひ<03:31.75>と<03:32.02>り<03:32.41>ぼ<03:32.55>っ<03:32.69>ち<03:32.87>東<03:33.13>京<03:33.66>

 

Reproduction steps:

 

  1. Have a lrc file containing 0ms duration words
  2. Play it to the end
  3. Observe
     

Media provider:

Jellyfin

Screenshots:

     

You are connected to Jellyfin so there’s no parsing, it use the already managed data from Jellyfin and have no reason to touch it.

Why do you have such data in the files ?

no idea, but what I meant is it’ll probably be a better idea to dismiss the highlight after the timestamp in those cases because the line just gets stuck highlighted forever once it passes the problematic line currently.

Again try with a local file with those lrc and you’ll see they word as expected :wink:

Anyway I’ll add a workaround for Jellyfin.