MusicPlayer2 icon indicating copy to clipboard operation
MusicPlayer2 copied to clipboard

关于ksc歌词的疑惑

Open HaguMei opened this issue 1 year ago • 4 comments

自己制作了ksc歌词,关联歌词并打开“歌词卡拉OK样式显示”: ●遇到有空格的歌词时,空格前的歌词能够正常像卡拉OK一样逐字显示,但空格之后的却直接跳过了 屏幕截图 2023-10-14 150811

●没有空格的歌词可以正常逐字显示 屏幕截图 2023-10-14 151023

请问,ksc歌词的脚本语法不支持一句歌词里有空格吗?望解答!

附上歌词文件:

karaoke := CreateKaraokeObject; karaoke.rows := 2; karaoke.clear;

karaoke.internalnumber := 0; karaoke.songname := '告白气球'; karaoke.singer := '周杰伦'; karaoke.audioorder := 1; karaoke.wordcount := 4; karaoke.songclass := ''; karaoke.langclass := ''; karaoke.pinyin := 'gbqq'; karaoke.songstyle := ''; karaoke.tag('userid', ''); karaoke.tag('quality', '');

karaoke.add('00:03.701', '00:05.511', '告白气[球 ][- ]周杰[伦 ][(][Jay ][Chou][)]', '150,151,151,151,151,151,150,151,151,151,151,151'); karaoke.add('00:06.210', '00:07.864', '词:方文山', '330,331,331,331,331'); karaoke.add('00:09.365', '00:11.387', '曲:周杰伦', '404,404,405,404,405'); karaoke.add('00:12.762', '00:14.931', '编曲:林迈可', '361,362,361,362,361,362'); karaoke.add('00:23.505', '00:26.174', '塞纳河[畔 ]左岸的咖啡', '164,137,101,569,166,157,239,512,624'); karaoke.add('00:26.379', '00:29.276', '我手一[杯 ]品尝你的美', '115,107,89,552,202,116,259,307,1150'); karaoke.add('00:29.276', '00:34.151', '留下唇印的嘴', '274,310,370,333,329,3259'); karaoke.add('00:34.151', '00:36.854', '花店玫[瑰 ]名字写错谁', '135,113,102,577,145,200,271,486,674'); karaoke.add('00:36.854', '00:39.980', '告白气[球 ]风吹到对街', '142,175,117,450,138,133,553,305,1113'); karaoke.add('00:39.980', '00:43.943', '微笑在天上飞', '216,317,347,341,362,2380'); karaoke.add('00:43.943', '00:46.574', '你说你有点难追', '300,314,314,348,326,339,690'); karaoke.add('00:46.574', '00:49.264', '想让我知难而退', '298,372,324,330,314,337,715'); karaoke.add('00:49.264', '00:51.906', '礼物不需挑最贵', '314,351,286,335,312,391,653'); karaoke.add('00:51.906', '00:54.592', '只要香榭的落叶', '319,367,348,308,361,298,685'); karaoke.add('00:54.592', '00:57.229', '[喔 ]营造浪漫的约会', '358,315,326,359,286,347,272,374'); karaoke.add('00:57.229', '00:59.940', '不害怕搞砸一切', '329,386,329,322,308,337,700'); karaoke.add('00:59.940', '01:04.979', '拥有你就拥有全世界', '352,311,326,340,334,676,317,328,2055'); karaoke.add('01:04.979', '01:08.268', '亲爱[的 ]爱上你', '253,317,953,391,753,622'); karaoke.add('01:08.268', '01:11.251', '从那天起', '932,330,741,980'); karaoke.add('01:11.251', '01:15.586', '甜蜜的很轻易', '702,291,671,301,353,2017'); karaoke.add('01:15.586', '01:18.949', '亲爱[的 ]别任性', '281,349,977,332,691,733'); karaoke.add('01:18.949', '01:21.966', '你的眼睛', '965,307,685,1060'); karaoke.add('01:21.966', '01:28.147', '在说我愿意', '1236,1236,1236,1236,1237'); karaoke.add('01:48.852', '01:51.416', '塞纳河[畔 ]左岸的咖啡', '151,129,102,513,136,132,571,158,672'); karaoke.add('01:51.416', '01:54.566', '我手一[杯 ]品尝你的美', '145,145,263,457,144,150,152,722,972'); karaoke.add('01:54.566', '01:59.492', '留下唇印的嘴', '283,342,333,353,338,3277'); karaoke.add('01:59.492', '02:02.119', '花店玫[瑰 ]名字写错谁', '173,151,142,468,282,189,278,139,805'); karaoke.add('02:02.119', '02:05.339', '告白气[球 ]风吹到对街', '155,175,133,587,165,171,143,299,1392'); karaoke.add('02:05.339', '02:09.251', '微笑在天上飞', '250,288,372,345,331,2326'); karaoke.add('02:09.251', '02:11.927', '你说你有点难追', '305,361,309,348,313,333,707'); karaoke.add('02:11.927', '02:14.585', '想让我知难而退', '301,350,336,339,341,319,672'); karaoke.add('02:14.585', '02:17.257', '礼物不需挑最贵', '334,311,328,315,330,370,684'); karaoke.add('02:17.257', '02:19.901', '只要香榭的落叶', '309,318,353,343,323,347,651'); karaoke.add('02:19.901', '02:22.604', '[喔 ]营造浪漫的约会', '359,361,307,195,190,257,354,680'); karaoke.add('02:22.604', '02:25.260', '不害怕搞砸一切', '366,296,315,347,328,301,703'); karaoke.add('02:25.260', '02:30.370', '拥有你就拥[有 ]全世界', '341,326,315,315,346,710,289,324,2144'); karaoke.add('02:30.370', '02:33.557', '亲爱[的 ]爱上你', '231,275,992,348,712,629'); karaoke.add('02:33.557', '02:36.614', '从那天起', '1029,278,673,1077'); karaoke.add('02:36.614', '02:40.894', '甜蜜的很轻易', '712,198,720,309,342,1999'); karaoke.add('02:40.894', '02:44.285', '亲爱[的 ]别任性', '281,342,1008,347,723,690'); karaoke.add('02:44.285', '02:47.231', '你的眼睛', '946,317,679,1004'); karaoke.add('02:47.231', '02:51.685', '在说我愿意', '648,304,691,716,2095'); karaoke.add('02:51.685', '02:54.964', '亲爱[的 ]爱上你', '236,307,1003,350,680,703'); karaoke.add('02:54.964', '02:57.988', '恋爱日记', '775,403,717,1129'); karaoke.add('02:57.988', '03:02.290', '飘香水的回忆', '607,281,675,321,343,2075'); karaoke.add('03:02.290', '03:05.612', '一整[瓶 ]的梦境', '275,317,1004,349,695,682'); karaoke.add('03:05.612', '03:08.529', '全都有你', '904,322,728,963'); karaoke.add('03:08.529', '03:12.964', '搅拌在一起', '731,234,744,676,2050'); karaoke.add('03:12.964', '03:16.313', '亲爱的别任性', '263,340,998,334,705,709'); karaoke.add('03:16.313', '03:21.299', '你的眼睛', '964,281,688,3053'); karaoke.add('03:21.299', '03:27.254', '在说我愿意', '692,349,723,1184,3007');

HaguMei avatar Oct 14 '23 07:10 HaguMei

我没有查到ksc歌词语法文档,现在解析代码的是根据我找到的几个(很少,可能没有代表性)ksc歌词写的,可能有问题 其中用[ ]把数个字组合的语法如果使用就全部使用,不使用就全不使用,所以我没考虑部分使用的情况 我不知道ksc标准是怎么样的,需要支持这种部分使用[ ]的情况吗(代码上没问题,容易做)

另一点是我考虑到[ ]有可能用来支持英文显示, 但我不清楚部分使用[ ]的情况下有英文一定会使用[ ]的保证吗 是否需要进行英文分词还是字时间标签精确到字母

我现在是把不存在[ ]的中文歌词视为特例(也就是不含[]时按逐字(字符)分割)写的代码 如果有其他ksc歌词请打包发给我(多多益善)

lrisora avatar Oct 14 '23 09:10 lrisora

首先,我没有更多的ksc歌词,因为我制作ksc歌词的目的是想适配musicplayer2,达到一个歌词逐字显示的效果,当我发现这个问题之后我就没有制作了。

其次,我也找过资料,了解到要想显示的字符(也就是歌词)与它的 ASCII 编码有关: ●不管是中文还是英文,当 ASCII 值小于128时,会用“[ ]”括起来,反之则不会。 就比如在中文输入法输入的字符不会括起来,而在英文输入法输入的字符则会。但空格比较特殊,都会括起来。 ●当多个字符在一起同一个时间显示时,也会用“[ ]”括起来。 例如:[you]、[you ]、[我 ],注意我加了空格在里面,括起来的作用是把它当作一个词来显示,所以英文不需要把时间标签精确 到字母。

讲的可能不标准,大概就是这么回事,这是我从B站的一个UP那里学的,附链接:https://www.bilibili.com/video/BV1We4y1e7qy?vd_source=b1b8cefdc7230cc7399f00c7c6fbc395 他讲的可能更好一些,有中文歌词和英文歌词的案例。

希望以上有助于你更改代码。

最后有个题外话,如果可以关联krc歌词就好了,能同时显示原文和译文,以及日语歌词的罗马音,并且是精准逐字。 因为平时听歌喜欢开后台,看着桌面歌词,打游戏或是工作,对歌词的显示比较看重,当然这是题外话,不用在意。

以上,希望能够帮上忙!!!

HaguMei avatar Oct 14 '23 19:10 HaguMei

只是逐字歌词的话我更推荐ESLyric的扩展lrc,语法明确也没有多余的标签,MusicPlayer2支持“ / ”后附加翻译 现有程序兼容0.3版本, #625 已添加ESLyric0.5读取支持,并修正ksc读取(按照视频里那个软件的做法(没有源码,我猜的,可能还有问题)) 不过如果在MusicPlayer2内调整偏移量保存的话仍会按照ESLyric0.3格式保存, 因为我觉得没必要支持0.5版本,差距不大

不知道ksc怎样支持翻译还是不能支持翻译, 支持罗马音比较难搞,lrc/ksc好像都没有现有的语法能够存储,也没有能够提供罗马音歌词下载的数据源,暂时不会做

=================

软件可以关联ksc,不过逻辑是这样的(搜索歌词不区分lrc/ksc,仅仅只是使用第一个匹配到的歌词) 软件第一次见到歌曲文件时会试着搜索匹配歌词,如果找到则将路径存入媒体库或将“歌词不存在”存入媒体库 之后每次都从媒体库读取,不再搜索歌词文件, 例外是开启播放时如果发现原本的歌词文件不存在那么会搜索一次歌词, 如果歌曲条目被从媒体库去除那么软件会忘记见过歌曲,此时再次打开曲目时会搜索歌词

lrisora avatar Oct 15 '23 07:10 lrisora

好的,感谢大大的解答!!!

HaguMei avatar Oct 15 '23 12:10 HaguMei