Ferry-200 / coriander_player

Windows端本地音乐播放器,使用Material You配色。Dart (Flutter) + Rust (lofty, windows-rs) + C (bass lib) 多语言项目。绝赞开发中。
https://ferry-200.github.io/coriander_player_website/
GNU General Public License v3.0
510 stars 22 forks source link

[疑问] 逐字歌词如何添加翻译? #73

Closed Wenti-D closed 1 month ago

Wenti-D commented 1 month ago

LRC 格式的歌词是同一时间标签的第二句为翻译,逐字歌词也是吗?以及,逐字歌词的翻译显然不可能也逐字,这该如何处理?

Ferry-200 commented 1 month ago

不清楚。但是可以确定的是,逐字的接口只返回逐字歌词原文。所以应该是把 lrc 的翻译和逐字的原文合起来。

不过现在根本没做合并这个步骤,毕竟到现在还没找到接口(

最近就在忙这个问题。做开源之夏积累了一些经验,准备把 music api 这个依赖剔除掉。这个包似乎没有遵守标准的结构,不能通过 github 引用。当时我竟然脑子一热自己把内容复制下来自己维护了一份🤣

如果要显示翻译,应该是只让第一行有逐字效果,第二行就显示普通的文本。这是很容易实现的。

Wenti-D commented 1 month ago

如果要显示翻译,应该是只让第一行有逐字效果,第二行就显示普通的文本。这是很容易实现的。

对,绝绝绝大部分情况如此。但我最近尝试了给外文歌,在保持原意的情况下,填中文词,所以(可能只有我)存在显示逐字翻译的需求(

Ferry-200 commented 1 month ago

先明确一点:逐字歌词的基本单位不是行,而是字(词)。所以,几乎不可能让翻译使用和原文同步的逐字效果(字数和语序都会限制这一点)。所以似乎只能匀速?

如果硬要与原文同步,那就会出现两种情况:翻译比原文长时,在原文被填满的同时,翻译的最后一段会被直接填满;反之,翻译先被填满,然后原文继续动画。

似乎很难达到预期的效果。

Wenti-D commented 1 month ago

如果硬要与原文同步

(假定这是在讨论重新填中文词的情形)既然重新填词了,那么势必不会与原文逐字同步,但是至少可以保证一行还是一行。这样来说重新填词的逐字歌词,除了一行的时间之外,其他都会与原文不一样,相当于一个独立的新歌词了吧。

Ferry-200 commented 1 month ago

如果硬要与原文同步

(假定这是在讨论重新填中文词的情形)既然重新填词了,那么势必不会与原文逐字同步,但是至少可以保证一行还是一行。这样来说重新填词的逐字歌词,除了一行的时间之外,其他都会与原文不一样,相当于一个独立的新歌词了吧。

意思是做个假的逐字,也就是匀速就行? 或者是更进一步:自己创立一个逐字歌词格式,支持标翻译的时间戳。 或者你这边来个妥协:把填词当成原文,把原文当成翻译。

后两点都需要我支持读取本地的逐字歌词。

Wenti-D commented 1 month ago

意思是做个假的逐字,也就是匀速就行?

不是,是翻译词如果逐字的话,独立处理,不随原词时间。

这样看来,不如令翻译词可以从本地读取一个独立的歌词文件来显示呢。

Ferry-200 commented 1 month ago

所以你是希望可以同时加载两份逐字歌词,然后它们的动画也是独立的?

我怎么觉得这应该是打轴软件应该做的事😂

Wenti-D commented 1 month ago

所以你是希望可以同时加载两份逐字歌词,然后它们的动画也是独立的?

还真是( 经过我十分钟的思考我发现这可能是能符合我要求的最简单的方法(?)

我怎么觉得这应该是打轴软件应该做的事😂

我不到啊阿巴阿巴


说实话我这个需求估计鲜有别的人也有,如果不太好弄的话,做到「加载普通 LRC 一样的翻译」就行了其实。

Ferry-200 commented 1 month ago

或者对逐字歌词做一个小拓展,类似于 lrc 那样,相同时间戳的第二行当成翻译。你可以像其他行一样的格式写这一行,只不过它的长度由相同时间戳的第一行(原文)定。

这样最差的情况就是翻译的最后一个字词会被拉得很长以跟原文一起结束(相对来说)。

不过这种歌词文件应该会导致其他播放器的错误(

Wenti-D commented 1 month ago

或者对逐字歌词做一个小拓展,类似于 lrc 那样,相同时间戳的第二行当成翻译。你可以像其他行一样的格式写这一行,只不过它的长度由相同时间戳的第一行(原文)定。

这样拓展可能不太好,失去通用性了。甚至不如额外载入独立的文件。 (题外话,现在的 LRC 翻译词方案使得别的播放器总是高亮显示在翻译词上,乐。但我也一时半会没有更好的方案)

Ferry-200 commented 1 month ago

说实话我这个需求估计鲜有别的人也有,如果不太好弄的话,做到「加载普通 LRC 一样的翻译」就行了其实。

弄应该是可以弄,就是确实很奇怪,所以就当作未计划吧(

其实我觉得你自己做都能做得到,就写一个小工具。逐字歌词的效果其实就是一层遮罩,这点用 css 很好做的。

Ferry-200 commented 1 month ago

或者对逐字歌词做一个小拓展,类似于 lrc 那样,相同时间戳的第二行当成翻译。你可以像其他行一样的格式写这一行,只不过它的长度由相同时间戳的第一行(原文)定。

这样拓展可能不太好,失去通用性了。甚至不如额外载入独立的文件。 (题外话,现在的 LRC 翻译词方案使得别的播放器总是高亮显示在翻译词上,乐。但我也一时半会没有更好的方案)

lrc 的确实会影响到一些没做适配的播放器。但是这个方案已经被(至少在中文区)很广泛地使用了,所以也只好跟随了。

Wenti-D commented 1 month ago

行嘞,总之期待能够为逐字歌词额外加载普通 LRC 一样的翻译。

Ferry-200 commented 1 month ago

重新开启,因为将会被 #89 修复