中文偽春菜後援會論壇  

打印

[分享] 人格内建歌词卡模组。。。雏形版(第3次更新:囧龟速)

人格内建歌词卡模组。。。雏形版(第3次更新:囧龟速)

之前在旧馆发过制作歌词卡用的一段程式。。。

现在完善了一些。。。

为了能正常运行一些功能,

翻了很多的saori以及SSP相关的资料,

至少能正常的跑了。。。(笑)

可是别太期待这段代码会有非常好的表现,

因为并没有加入除错机制。。。

所以现在完成的仅仅是个能用的雏形。。。

已完成的功能:

1.把丢给人格的一种格式的lrc文件处理成伪春菜用格式;

2.播放歌的时候同步播放歌词;(歌名与歌词卡名字必须相同)
使用步骤当然是先做好歌词卡,然后再用橘花的播放功能来播放

想到但是未完成的功能:

1.已做歌词卡“数据库”,避免歌词卡重复制作;

2.伪春菜播放歌的时候搜索“数据库文件”中是否有对应的歌词卡,有则同步播放;

3.如果“数据库”中没有对应的歌词卡时可到网站搜索并自动下载来做成伪春菜用歌词卡;(喘气)这个有难度,就当前的Saori而言= =

4.暂时还没想到。。。XD

与code的战争才刚刚打响,

更庞大的工程还在后面。。。(远目)

以下是目前能够正常运行的代码。。。

大部分的地方都加了注释,

应该能看明白一些。。。

可以的话。。。请完善她吧~~~(殴)

这里以橘花为例子,

(迷之声:其实我是萌御姐的啊!!>。<)

因为改动了非常多的地方,

下文可能会有遗漏,

请大家指正。。。m(_ _)m

p.s新人的话还是先暂停往下看,

因为可能会造成你的人格无法正常运行等无法预料的后果。

(拍手)那觉得自己有能力进行手术的同学们!

先需要准备一些手术用具(被踹飞)

繁琐的手术要开始了(化作天边的星辰)

一共需要准备的各种saori:

ssu.dll、edittext.dll、ki.dll、mciaudior.dll

橘花已经有了ki.dll跟mciaudior.dll,

剩下的这2个因为有版权的关系。。。

可能在公开场合发布了作者会生气吧。。。

嗯。大家知道怎么做了吧?呐呐?(笑)

下面是运作的方法和原理。。。

不想看的可以直接去下载附件里面已经修改完成的txt文件。

嘛、、、接下来

首先。。。国际惯例。。。

修改misaka.ini

加入

LrcMaker.txt
LrcPlay.txt

在ai_0.txt的$_Variable中加入
複製內容到剪貼板
代碼:
//---歌词卡显示预设变量
{$LrcMinute=0}
{$LrcSecond=0}
{$LrcMillisecond=0}
{$LrcMinute1=0}
{$LrcSecond1=0}
{$LrcMillisecond1=0}
{$LrcTemp=0}
{$LrcTemp1=0}
{$LrcLineNumber=0}
{$LrcTotalLine=0}
{$LrcTxtTemp=0}
{$LrcAppearTime=0}
{$FileNameTemp=0}
{$pathTemp=""}
{$LrcFileName=0}
其实自己设置的太多了,

没有留意到底有多少是没被用到的。。。@_@

然后是$_Constant中加入
複製內容到剪貼板
代碼:
//歌词卡用
{$loadsaori("lrc\edittext.dll")}
{$loadsaori("saori\ssu.dll")}
ai_1.txt、ai_2.txt、ai_2t.txt、ai_3.txt最顶端的
複製內容到剪貼板
代碼:
#_Common
{$if ({$mode}==0)}
修改为
複製內容到剪貼板
代碼:
#_Common
{$if (({$mode}==0) && ({$LrcShow}==0))}
接着在ai_1.txt中加入以下
複製內容到剪貼板
代碼:
//启动时获取Lrc文件存放完整路径,此段专属SSP跟Crow语法。。。
$OnNotify_OnNotifySelfInfo
{
{$pathTemp={$reference(4)}}
{$pathTemp={$substringl({$pathTemp},{$index(shell,{$pathTemp})})}}
{$pathTemp={$saori("ssu.dll","replace","{$pathTemp}","/","\")}}
{$pathTemp={$pathTemp}ghost\master\lrc\}
}

//---丢入LRC文件---
$OnFileDrop2;{$if ({$insentence({$reference(0)},".lrc")})}
{
{$filename={$reference(0)}}
\0\s[0]是歌词卡文件哦,\w8制作歌词卡中{$LrcMaker}
\e
}

$OnFileDrop2;{$if ({$insentence({$reference(0)},".LRC")})}
{
{$filename={$reference(0)}}
\0\s[0]是歌词卡文件哦,\w8制作歌词卡中{$LrcMaker}
\e
}
ai_2.txt中的
複製內容到剪貼板
代碼:
$Select.MusicStart_0
\0\s[0]{$saori("mciaudior.dll","stop")}{$saori("mciaudior.dll","load","{$filename}")}{$saori("mciaudior.dll","play")}好的、\w9那麽开始播放。\e
[code]
修改为:
[code]
$Select.MusicStart_0
{
{$LrcShow=1}
{$LrcPlay}\e
}
然后把附件里面的LrcMaker.txt跟LrcPlay.txt放到ghost\master文件夹下

LrcMaker.txt的内容在这里:
複製內容到剪貼板
代碼:
#_Common
{$if (({$mode}==0) && ({$LrcShow}==1))}

$LrcMaker
{
//复制LRC文件到人格目录下
{$saori("ki.dll","filecopy","{$filename}","{$pathTemp}")}
{$filename={$extractfilename({$filename})}}
//以LRC标准格式来说,从第5行开始搜索
//{$LrcTemp={$saori("edittext.dll","{$filename}","GetLine2","4")}}
//读取LRC文件中一共有几行。
{$LrcTotalLine={$saori("edittext.dll","{$filename}","GetLineNum")}}
{$LrcLineNumber=4}
{$LrcLineCreating}
\e
}

//完成一行的构建
//如果预读的行小于总行数
$LrcLineCreating
{
{$if ({$LrcLineNumber}<{$LrcTotalLine}) { {$Creating} } else { {$CreatingFalse} } }
}

$Creating
{
//从第4行开始读取
{$LrcTemp={$saori("edittext.dll","01 - 梦里花.lrc","GetLine2","{$LrcLineNumber}")}}
//分析第N行的内容并保存
{$GetLyrics}
{$GetTime}
{$Time1={$LrcAppearTime}}
//算出一行的延迟时间
{$LrcLineNumber++}
{$GetLyricsDelay}
//保存一行
{$SaveLyris}
//保存后继续返回处理下一行
{$LrcLineCreating}
}

$CreatingFalse
{
{$if ({$LrcLineNumber}=={$LrcTotalLine}) { {$LastLrc} } else { {$LastLrcNo} } }
}

$LastLrc
{
{$LrcTemp1={$saori("edittext.dll","{$filename}","GetLine2","{$LrcLineNumber}+1")}}
{$saori("edittext.dll","{$FileNameTemp}.txt","Append","{$Temp}","//结束")}
//给Lrc完成索引文件,未完成功能
//{$saori("edittext.dll","LrcList.txt","Append","0","{$FileNameTemp}")}
}

$LastLrcNo
{
\0\s[0]保存失败\n\e
}


$GetLyrics
{
{$LrcTxtTemp={$substring({$LrcTemp},11,{$length({$LrcTemp}-11)})}}
}

$GetTime
{
{$GetMinute}
{$GetSecond}
{$GetMillisecond}
{$GetLineAppearTime}
}

//计算歌词出现时间
$GetLineAppearTime
{
{$LrcAppearTime={$calc({$LrcMinute}*60000+{$LrcSecond}*1000+{$LrcMillisecond}*10)}}
}

//保存一行
$SaveLyris
{
{$Temp={$calc({$LrcLineNumber}-1)}}
{$LrcTemp1="{$LrcTxtTemp}\_w[{$LrcAppearTime}]\n"}
//获取Lrc除去Lrc后缀之后的名字
{$FileNameTemp={$substringl({$filename},{$calc({$length({$filename})}-4)})}}
{$saori("edittext.dll","{$FileNameTemp}.txt","Append","{$Temp}","{$LrcTemp1}")}
}


//算出上下一句之间的间隔延迟时间,可以取到倒数第2行
$GetLyricsDelay
{
{$if ({$LrcLineNumber}<{$LrcTotalLine}) { {$GetLyricsDelayOK} } else { {$GetLyricsDelayFalse} } }
}

$GetLyricsDelayOK
{
{$LrcTemp={$saori("edittext.dll","{$filename}","GetLine2","{$LrcLineNumber}")}}
{$GetTime}
{$Time2={$LrcAppearTime}}
{$LrcAppearTime={$calc({$Time2}-{$Time1})}}
}

//X固定出上下一句之间的间隔延迟时间,取最后1行
$GetLyricsDelayFalse
{$if ({$LrcLineNumber}=={$LrcTotalLine})}
{
//{$LrcAppearTime=5000}
}

//取分存分
$GetMinute
{
{$LrcMinute={$substring({$LrcTemp},2,2)}}
//判断是否是10以下数字,是10以下则重新赋值为个位数
{$if ({$substringfirst({$LrcMinute})}==0) { {$LrcMinute={$substringlast({$LrcMinute})}} } }
}

//取秒存秒
$GetSecond
{
{$LrcSecond={$substring({$LrcTemp},5,2)}}
//判断是否是10以下数字,是10以下则重新赋值为个位数
{$if ({$substringfirst({$LrcSecond})}==0) { {$LrcSecond={$substringlast({$LrcSecond})}} } }
}

//取毫秒存毫秒
$GetMillisecond
{
{$LrcMillisecond={$substring({$LrcTemp},8,2)}}
//判断是否是10以下数字,是10以下则重新赋值为个位数
{$if ({$substringfirst({$LrcMillisecond})}==0) { {$LrcMillisecond={$substringlast({$LrcMillisecond})}} } }
}
以下是LrcPlay.txt的内容(测试用临时写的。。。)
複製內容到剪貼板
代碼:
#_Common
{$if (({$mode}==0) && ({$LrcShow}==1))}

$LrcPlay
{
{$saori("mciaudior.dll","stop")}{$saori("mciaudior.dll","load","{$filename}")}{$saori("mciaudior.dll","play")}
//去掉路径,以及.mp3获取歌名,
{$FileNameTemp={$substringl({$extractfilename({$filename})},{$calc({$length({$extractfilename({$filename})})}-4)})}}
//读取txt文件中一共有几行。
{$LrcTotalLine={$saori("edittext.dll","{$FileNameTemp}.txt","GetLineNum")}}
//初始化行计数器
{$TxtLineNumber=0}
{$GetLineLyrics}
}

//获取一行歌词
$GetLineLyrics
{
//判断计数器的值是否与总行数相等
{$if ({$TxtLineNumber}<{$LrcTotalLine}) { {$GontinueGetLyrics} } else { {$EndOfTxt} } }
}

//继续获取一行歌词
$GontinueGetLyrics
{
{$LrcTemp={$saori("edittext.dll","{$FileNameTemp}.txt","GetLine2","{$TxtLineNumber}")}}
\0\s[21,3]\c\_q{$LrcTemp}\_q\n
{$TxtLineNumber++}
{$GetLineLyrics}
}

$EndOfTxt
{
\0\s[0]呼。。。结束了。。
\e
}



//---------------------
$OnBoot
{
\1\s[10]\0\s[7]歌没唱完就让我走了!\w9\w5\0\s[-1]\1\s[10]喂!\w8\n你去拿手雷干吗!!??\w8\n给我回来!!!\w8\n\0\s[35]不高兴了。\w8\n
{$LrcShow=0}\e
}

$OnClose
{
\0\s[3]啊!\w3等等!{$ValClear}\w8\-\e
}

$OnGhostChanging
{
\0\s[7]真扫兴{$ValClear}\w8\w9\e
}

//---- 双击事件 -------------------


$OnMouseDoubleClick
{
\0\s[0]不需要我唱了吗?\n\n
\q[嗯,辛苦你了,LrcStop]\n
\q[你走音了,LrcPlayReset]\n
\e
}

$OnChoiceSelect,{$if ({$reference(0)}==LrcStop)}
{
{$saori("mciaudior.dll","stop")}
\0\s[0]真扫兴。\1\s[10]你还是适合拿枪吧。
{$LrcShow=0}
\e
}

$OnChoiceSelect,{$if ({$reference(0)}==LrcPlayReset)}
{
{$LrcPlay}
}

//**** 変数初期化 *****************************************************************************************************

$ValClear
{
{$temp=""}{$temp1=""}{$temp2=""}{$temp3=""}{$temp4=""}{$temp5=""}
{$WorkKind=""}{$TimeWork=""}{$timezone=""}
{$DisplayBpp=""}{$DisplayWidth=""}{$DisplayHeight=""}
{$talkcount=""}{$TestTalk=""}{$lastchangedghost=""}
{$TestTalk=""}
}
大致是以上这样了。。。可能会有遗漏的地方。。。

请大家对着附件里面的看了。。。囧

p.s橘花042506版因为用的美坂版本比较低,无法使用这些代码。

而且有几个bug,感谢CG的ucggamer告诉我这些。。。m(_ _)m

引用之前在CG发的。。。虽然被无视了。。。

[引用]
附上使用了新版本的伪AI后出现沟通无法进行的解决方案。

旧版语法:
$Select.Communicate
\![open,communicatebox]\0\s[26]?\e
改成
新版语法:
$Select.Communicate
{
\![open,inputbox,communicatebox,-1]
\0\s[26]?\e
}

旧版:

$_OnGhostCommunicateReceive;{$if ({$sender}==User)}
{$UserCommunicate}\w9\w9\e

新版:
$OnUserInput,{$if ({$reference(0)}=="communicatebox")}
{
\1\s[10]
{$UserCommunicate}\w9\w9\e
}

然后用记事本的Ctrl+H把{$inlastsentence(替换成{$insentence({$reference(1)},就可以了。

旧版的橘花原作者写代码时忽略了语法的正确性,

赋值写错了。。。请大家手动修正下,

用记事本打开ai_1.txt

然后Ctrl+H

查找内容为($temp)

替换内容为({$temp})

[引用]

0.0.101.13870版本美坂的已经加附件里面。。。

弄了这么多迷糊了。。。

闪去玩FF7CC  XD。。。(殴)

闪回。。。欢迎大家提意见啊。。。>。<

10.19 修正了几个小问题。。。第一个档无法正常使用的话请下载下面的...Or2

10.27 囧,拖了这么久。。。好多天都死在战地2142里了。。。(踹)XD

总之。。。附件已经更新到0.003了,做了啥改动里面有写的哈。。。

[ 本帖最後由 KS喵 於 2007-10-28 01:42 編輯 ]

附件

master-1.rar (114.96 KB)

2007-10-18 23:29, 下載次數: 8798

内建歌词卡模组(橘花用v0.002).rar (263.5 KB)

2007-10-19 23:37, 下載次數: 8922

内建歌词卡模组(橘花用v0.003).rar (353.15 KB)

2007-10-28 01:42, 下載次數: 9525

TOP

忘记说明歌词卡格式了。。。目前只能食用以下格式内容的Lrc
複製內容到剪貼板
代碼:
[ti:梦里花]
[ar:张韶涵]
[al:梦里花]
[by:Tenkin]      <-----前面一共4行
[00:00.00]唯一纯白的茉莉花
[00:06.87]盛开在琥珀色月牙
[00:13.55]就算失去所有爱的力量
[00:20.51]我也不曾害怕
[00:24.59]
[00:27.03]歌名:梦里花
[00:29.11]歌手:张韶涵
[00:32.15]专辑:梦里花
[00:34.41]Edited by Tenkin
[00:36.29]www.zhangshaohan.com
[00:38.19]
[00:39.71]天空透露着微光 照亮虚无迷惘
[00:46.76]在残垣废墟之中 寻找唯一梦想
[00:52.94]
[00:53.42]古老的巨石神像 守护神秘时光
[00:59.73]清澈的蓝色河流 指引真实方向
[01:05.93]穿越过风沙 划破了手掌
[01:12.35]坚定着希望 去闯
[01:17.94]
[01:18.41]唯一纯白的茉莉花
[01:24.91]盛开在琥珀色月牙
[01:31.38]就算失去所有爱的力量
[01:38.34]我也不曾害怕
[01:45.58]
[01:58.10]古老的巨石神像 守护神秘时光
[02:04.77]清澈的蓝色河流 指引真实方向
[02:10.83]穿越过风沙 划破了手掌
[02:17.31]坚定着希望 去闯
[02:24.46]
[02:26.81]唯一纯白的茉莉花
[02:33.11]盛开在琥珀色月牙
[02:39.46]就算失去所有爱的力量
[02:46.21]我也不曾害怕
[02:52.67]
[02:54.16]穿越千年的石版画
[02:59.06]刻画着永恒的天堂
[03:05.53]轻轻拭去满布全身的伤
[03:12.57]我从不曾绝望
[03:18.81]lrc歌词修正:张子烨 ye.0055.cn
[03:21.23]MSN:tenkin@live.com
              <-----最后1行在这里不是在上面
在喂食橘花之前请先用记事本打开要喂食的lrc文件。。。

去除看到下图里面的小方块。。。

否则读到这个档的时候SSP会跳错。。。Or2

lrc档中有下面的这个格式禁止喂食。。。
複製內容到剪貼板
代碼:
[02:10.76][00:10.24]你说我像一个小孩
请自己改成能食用的格式再喂食吧。。。(擦汗)

我尽力改进吧。。。

[ 本帖最後由 KS喵 於 2007-10-18 23:00 編輯 ]

附件

01 - 梦里花.rar (775 Bytes)

2007-10-18 22:58, 下載次數: 8900

正常可用格式范例

TOP

蠻實用的東西
某種程度上也算是人品爆發了...

不過現在連最新版的橘花都改用AYA了
繼續使用美坂會有未來嗎...?
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

美坂上能完成的话。。。

转aya5也不是难事吧,

毕竟aya5比美坂实用很多。。。

TOP

歡迎將此作品放到偽春菜wiki上喔~
一起來補完這個計劃吧
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP



當前時區 GMT+8, 現在時間是 2023-3-27 00:30

Processed in 0.021181 second(s), 9 queries, Gzip enabled.

清除 Cookies - 聯繫我們 - 中文偽春菜後援會 - Archiver - WAP - TOP - 界面風格