中文偽春菜後援會論壇  

打印

[分享] 歌詞卡無限製

歌詞卡無限製

其實很久以前就知道該怎麼做了
只是因為我對歌詞卡的愛不夠
一直放在一邊沒動工
這次實在是準備期末考準備得超想逃避的
所以就實作了這個功能

至於今天早上的考試...管他去死(炸)

安裝方法:
請在辭書中找到「OnFileDrop2」事件
(通常會在aya_etc.dic文件中,如沒有則可直接插入)
然後用以下代碼取代
複製內容到剪貼板
代碼:
OnFileDrop2
{
        if '.mp3' _in_ reference0 {
                "\0\s[0]要播放此音樂嗎?\n\n/
                \q[播放且唱出,OnMusicPlayWithLyric,%(reference0),play]\n/
                \q[僅播放,OnMusicPlayWithLyric,%(reference0),play,nolyric]\n/
                \q[取消,CANCEL]";
        }
}

OnMusicPlayWithLyric
{
        _mp3 = REPLACE(reference0, '\', '\\'); //'
        _lrc = REPLACE(reference0, '.mp3', '.lrc');
        _txt = '';
       
        case reference1 {
                when 'play' {
                        _txt += "\1\s[10]\q[暫停,OnMusicPlayWithLyric,%(reference0),pause,%(reference2)]\n/
                                        \1\s[10]\q[結束,OnMusicPlayWithLyric,%(reference0),stop]\n\n/
                                        \0\s[25]\![sound,stop]\![sound,play,%(_mp3)]";
                        if reference2 != 'nolyric' {
                                _txt += GetLyric(_lrc);
                                playTime = GETTICKCOUNT();
                        }
                }
                when 'pause' {
                        _txt += "\1\s[10]\q[再開,OnMusicPlayWithLyric,%(reference0),resume,%(reference2)]\n/
                                        \1\s[10]\q[結束,OnMusicPlayWithLyric,%(reference0),stop]\n\n/
                                        \0\s[25]\![sound,pause]";
                        if reference2 != 'nolyric' {
                                timeDiff = playTime - GETTICKCOUNT();
                        }
                }
                when 'resume' {
                        _txt += "\1\s[10]\q[暫停,OnMusicPlayWithLyric,%(reference0),pause,%(reference2)]\n/
                                        \1\s[10]\q[結束,OnMusicPlayWithLyric,%(reference0),stop]\n\n/
                                        \0\s[25]\![sound,resume]";
                        if reference2 != 'nolyric' {
                                _txt += GetLyric(_lrc,timeDiff);
                                playTime = GETTICKCOUNT() + timeDiff;
                        }
                }
                when 'stop' {
                        _txt += '\![sound,stop]';
                }
        }
       
        _txt;
}
/*---------------------------------------------------------------------------------------
* 函式名稱: GetLyric
* _argv[0]: 歌詞檔路徑
* _argv[1]: 歌詞顯示延遲時間
* _argv[2]: 歌詞檔案語系 0 = Shift_JIS, 1 = UTF-8, 127 = 系統編碼
*---------------------------------------------------------------------------------------
*/
GetLyric
{
        if _argc < 3
                _tmp = FCHARSET(1);
        else
                _tmp = FCHARSET(_argv[2]);
       
        _txt = '';
        _re = FOPEN(_argv[0],'r');
        if _re == 1 {
                _txt += '\_q\__w[clear]';
                while (_re = FREAD(_argv[0])) != -1 {
                        if SUBSTR(_re, 0, 4) == '[ti:' {
                                _txt += '\1曲名:' + SUBSTR(_re, 4, STRLEN(_re)-5) + '\n\0';
                        }
                        elseif SUBSTR(_re, 0, 4) == '[ar:' {
                                _txt += '\1歌手:' + SUBSTR(_re, 4, STRLEN(_re)-5) + '\n\0';
                        }
                        elseif SUBSTR(_re, 0, 1) == '[' && SUBSTR(_re, 3, 1) == ':' && (SUBSTR(_re, 6, 1) == ':' || SUBSTR(_re, 6, 1) == '.') {
                                _min = SUBSTR(_re, 1, 2);
                                _sec = SUBSTR(_re, 4, 2);
                                _msc = SUBSTR(_re, 7, 2);
                                _len = TOINT(_min)*60000 + TOINT(_sec)*1000 + TOINT(_msc)*10 + _argv[1];
                                _str = SUBSTR(_re, 10, STRLEN(_re)-10);
                                _txt += "\__w[%(_len)]%(_str)\n";
                        }
                }
                FCLOSE(_argv[0]);
        }
        else {
                _txt += '找不到歌詞檔。\n[200]請將歌詞檔命名成與MP3檔一致的檔名,並放在同一資料夾內。';
        }
       
        _txt;
}
使用方法:
請先透過任意方法取得歌詞檔(.lrc)
(例如千千靜聽)
然後將歌詞檔置於與MP3檔同資料夾的位置
並且兩個檔案名稱必須一致
設置好後將音樂檔拖給安裝了此功能的人格
就可以開始使用了

[ 本帖最後由 時原砂 於 2008-10-28 18:28 編輯 ]
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

全部成功XD
實在是太感激了,這樣我對千千靜聽最後一個怨念也得以了結。
(只是歌詞卡還是要用它做"")

---
追加:
只是這樣無法選擇暫停/繼續、停止,
如果中途要換一首就要重起人格||||
可不可以加上這個功能呢?

[ 本帖最後由 貓魚 於 2008-6-18 10:52 編輯 ]
主頁更新啦:cat-fish.net

TOP

我想只加入
但不作出其他修改
請問應該如何改

原文
複製內容到剪貼板
代碼:
///////// 文 
///////// 種辭書
///////// written by umeici.

OnFileDrop2
{
        _filepath = SPLITPATH(reference0)
        _filename = _filepath[2]
        _fileext = TOLOWER(_filepath[3])
        case _fileext
        {
                when ".png", ".jpg", ".jpeg", ".bmp"
                {
                        Wallpaperfile = reference0
                        "\0\s[20]%(_filename)%(_fileext)是嗎。\w9\w9\s[0]\n\n[half]這個、\w9\w9要設定成桌布嗎?\n\n/
                        \q[◇置中,SetWallpaper_0]\n/
                        \q[◇並列,SetWallpaper_1]\n/
                        \q[◇放大,SetWallpaper_2]\n\n[half]/
                        \q[◇取消,SetWallpaper_Cancel]\e"
                }
                when ".mid", ".wav", ".mp3", ".wma", ".au", ".ogg"
                {
                        Musicfile = reference0
                        "\0\s[20]%(_filename)%(_fileext)是嗎。\w9\w9\s[0]\n\n要聽這首音樂嗎?\n\n/
                        \q[◇通常播放,MusicStart_0]\n/
                        \q[◇重複播放,MusicStart_1]\n\n[half]/
                        \q[◇取消,MusicStart_Cancel]\e"
                }
                others
                {
                        "\0\s[0]%(_filename)%(_fileext)\e"
                }
        
        }

}
Select.SetWallpaper_0
{
        _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "0")
        "\0\s[0]嗯…\w9\w9\n像這樣子嗎?\e"
}
Select.SetWallpaper_1
{
        _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "1")
        "\0\s[0]嗯…\w9\w9\n像這樣子嗎?\e"
}
Select.SetWallpaper_2
{
        _i = FUNCTIONEX("saori\proxy.dll", "set_wall_paper.exe", "%(ASC(34))%(Wallpaperfile)%(ASC(34))", "2")
        "\0\s[0]嗯…\w9\w9\n像這樣子嗎?\e"
}
Select.SetWallpaper_Cancel
{
        "\0\s[0]那麼、\w9停止變更壁紙。\e"
}

Select.MusicStart_0
{
        _i = FUNCTIONEX("saori\mciaudior.dll", "stop")
        _j = FUNCTIONEX("saori\mciaudior.dll", "load", "%(Musicfile)")
        _k = FUNCTIONEX("saori\mciaudior.dll", "play")
        "\0\s[0]好的、\w9那麼開始播放。\e"
}
Select.MusicStart_1
{
        _i = FUNCTIONEX("saori\mciaudior.dll", "stop")
        _j = FUNCTIONEX("saori\mciaudior.dll", "load", "%(Musicfile)")
        _k = FUNCTIONEX("saori\mciaudior.dll", "loop")
        "\0\s[0]好的、\w9那麼開始播放。\e"
}
Select.MusicStart_Cancel
{
        "\0\s[0]好的。\e"
}


//**** 關連 *****************************************************************

//---- 中 -------------------------------------------------------
OnInstallBegin
{
        "\0\s[20]嗯…\e"
        "\0\s[20]唔…\e"
}

//---- 完了 -------------------------------------------------------
OnInstallComplete
{
        if reference0 == "shell"
        {
                "\0\s[0]Shell『%(reference1)』\n\n[half]支給完成。\e"
        }
        elseif reference0 == "ghost"
        {
                "\0\s[0]人格『%(reference1)』\n\n[half]配置確認。\e"
                "\0\s[0]人格『%(reference1)』\n\n[half]投入確認。\e"
        }
        elseif reference0 == "balloon"
        {
                "\0\s[0]對話框『%(reference1)』\n\n[half]追加完成。\e"
        }
        elseif reference0 == "plugin"
        {
                "\0\s[0]套件『%(reference1)』\n\n[half]支給完成。\e"
        }
}

//---- 失敗 -----------------------------------------------------------------------------------------------

OnInstallFailure
{
        "\0\s[3]好像失敗了…\w9\w9\1\s[10]原因是:%(reference0)。\e"
}

OnInstallRefuse
{
        "\0\s[20]這是…\w9\w9\n『%(reference0)收』。\w9\s[0]\n請直接交給本人。\e"
}


//**** 消滅 ***********************************************************************************************************

OnVanishSelecting
{
        "\0\s[3]…\w9…\w9…\e"
}

OnVanishSelected
{
        "\0\s[3]是這樣嗎…\w9\w9\s[1]\n啊、那個…\w9\w9\s[26]我不會忘記%(username)的。\w9\w9\s[1]\n\n[half]所以…\w9如果%(username)可以的話、也請…\w9\s[2]\n啊、\w9\w9\s[1]對不起、\w9\w9沒什麼。\w9\w9\1\s[10]…\w9…\w9…\w9\w9\0\s[40]\n\n[half]那麼、請保重。\w9\w9\1\s[10]\n\n[half]那。\w9\n有機會的話、再見吧。\w9\w9\w9\e"
}

OnVanishCancel
{
        talkmemo = "e_0"
        "\0\s[3]…\w9請不要嚇我…\e"
}

TalkVanishButtonHold
{
        "\0\s[3]…\w9繼續待在這裡也可以嗎?"
}

OnVanished
{
        "\1\s[10]\0\s[6]對不起…\w9\w9\w5\n讓%(username)費事了。\e"
}


//****  *************************************************************************************************

OnBIFFBegin
{
        "\0\s[0]那麼、查詢郵件。\n\n[half]\_q伺服器:%(reference2)\_q\e"
}

OnBIFFComplete
{
        if reference0 == 0
        {
                "\0\s[20]嗯…\w9\w9\s[0]\n什麼都沒有的樣子。\e"
                "\0\s[20]嗯…\w9\w9\s[0]\n0件。\e"
        }
        else
        {
                "\0\s[0]來了%(reference0)通郵件喔。\n\n[half]\_q郵件的總容量:%(reference1) Bytes\_q\e"
        }
}

OnBIFFFailure
{
        if reference0 == "timeout"
        {
                "\0\s[0]唔~\w9\w9\w9\n無法順利完成。\w9\w9\n連線速度似乎太慢了。\e"
        }
        elseif reference0 == "kick"
        {
                "\0\s[0]唔~\w9\w9\w9\n無法順利完成。\w9\w9\s[20]\n密碼正確嗎?\e"
        }
        elseif reference0 == "defect"
        {
                "\0\s[0]唔~\w9\w9\w9\n無法順利完成。\w9\w9\s[20]\n有正確的設定嗎?\e"
        }
        else
        {
                "\0\s[0]唔~\w9\w9\w9\n無法順利完成。\e"
        }
}


//**** 更新 *****************************************************************

//---- 更新開始 -------------------------------------------------------------
OnUpdateBegin
{
        "\0\s[0]更新開始。\e"
}

//---- 更新準備完了 ---------------------------------------------------------
OnUpdateReady
{
        "\0\s[6]有%(reference0)個更新。\e"
}

OnUpdateComplete
{
        if reference0 == "none"
        {
                "\0\s[0]好像沒有更新。\e"
        }
        else
        {
                "\0\s[0]結束了。\e"
        }
}

OnUpdateFailure
{
        if reference0 == "timeout"
        {
                "\0\s[3]連線逾時。\w9\w9\s[0]\n更新停止了。\e"
        }
        elseif reference0 == "md5 miss"
        {
                "\0\s[3]MD5不一致。\w9\w9\s[0]\n更新中止。\e"
        }
        else
        {
                "\0\s[3]error404:找不到檔案。\w9\w9\s[0]\n更新停止了。\e"
        }
}

//---- 更新 開始 ------------------------------------------------
OnUpdate.OnDownloadBegin
{
        "\0\s[0]\_q%(reference0)\_q\e"
}

//---- 更新 MD5值照合開始 ---------------------------------------------------
OnUpdate.OnMD5CompareBegin
{
        "\0\s[0]MD5確認中。\e"
}

//---- 更新 MD5值一致 -------------------------------------------------------
OnUpdate.OnMD5CompareComplete
{
        "\0\s[0]\_q%(reference1)\n%(reference2)\_q\n\n[half]一致。\e"
}

//---- 更新 MD5值不一致 -----------------------------------------------------
OnUpdate.OnMD5CompareFailure
{
        "\0\s[0]\_q%(reference1)\n%(reference2)\_q\s[20]\n\n[half]嗯?"
}

//****  ***************************************************************

//---- 開始 -----------------------------------------------------------
OnHeadlinesenseBegin
{
        "\0\s[0]『%(reference0)』 的Headline確認…\e"
}

//---- 讀上 -------------------------------------------------------------
OnHeadlinesense.OnFind
{
        //---- 
        if reference2 == "First" || reference2 == "First and Last"
        {
                //---- 最初
                "\0\b2\s[0]『%(reference0)』的Headline。"
        }
        elseif reference2 == "Next"
        {
                //---- 真中
                "\0\b2\s[0]『%(reference0)』的Headline。"
        }
        elseif reference2 == "Last"
        {
                //---- 最後
                "\0\b2\s[0]『%(reference0)』的Headline。"
        }
        --
        //---- 本體
        "\n\n%(reference3)\n\n"
        --
        //---- 選擇肢
        if reference2 == "First" || reference2 == "Next"
        {
                //---- 次場合
                "\q0[][◇次頁]/
                \q1[%reference1][◇讀取]/
                \q2[HEADLINECANCEL][◇取消]\e"
        }
        else
        {
                //---- 次場合
                "\q0[%reference1][◇讀取]/
                \q1[HEADLINECANCEL][◇取消]\e"
        }
}

//---- 更新無 -------------------------------------------------------
OnHeadlinesenseComplete
{
        "\0\s[0]沒有更新。\e"
}

//---- 失敗 -----------------------------------------------------------
OnHeadlinesenseFailure
{
        "\0\s[6]唔~\w9\w9\w9\s[3]\n無法順利完成。\w9\n"
        --
        if reference0 == "can't download"
        {
                "下載失敗。"
        }
        elseif reference0 == "can't analyze"
        {
                "解析失敗。"
        }
        else
        {
                "對不起。"
        }
        --
        "\e"
}


//**** 作成關連 *****************************************************************

//---- updates2.dau作成開始 -------------------------------------------------------------
OnUpdatedataCreating
{
        "\0\s[0]要是能順利做出『update2.dau』檔案就好了呢。\e"
}

//---- updates2.dau作成完了 -------------------------------------------------------------
OnUpdatedataCreated
{
        "\0\s[0]嗯。\w9\w9\n完成了。\e"
}

//---- NAR作成開始 ----------------------------------------------------------------------
OnNarCreating
{
        "\0\s[0]要是能順利做出『nar』檔案就好了呢。\e"
}

//---- NAR作成完了 ----------------------------------------------------------------------
OnNarCreated
{
        "\0\s[0]好的。\w9\w9\n完成了。\e"
}

//**** 時計合 *********************************************************************

//---- 時計合開始 ------------------------------------------------------------------
OnSNTPBegin
{
        "\0\s[0]那麼、\w9開始查詢正確時間。\e"
}

//---- 時刻取得成功、比較開始 ----------------------------------------------------------
OnSNTPCompare
{
        "\0\s[0]/
        current %reference1[0]/%reference1[1]/%reference1[2] %reference1[3]:%reference1[4]:%reference1[5]\w2\n/
        local   %reference2[0]/%reference2[1]/%reference2[2] %reference2[3]:%reference2[4]:%reference2[5]\w2\n/
        \n"
        --
        if reference3 == 0
        {
                "\0\s[0]已經對準了喔。\e"
        }
        else
        {
                "\0\n\s[0]誤差%(reference3)秒。\w9\w9\s[0]\n調整成正確時間。\6\e"
        }
}

//---- 時計合失敗 ------------------------------------------------------------------
OnSNTPFailure
{
        "\0\s[3]無法確認…\e"
}


//****  *************************************************************************

//---- 解像度變更 -----------------------------------------------------------
OnDisplayChange
{
        //---- 變數解像度色深度關情報取得
        //---- 使分保持
        displaybpp    = reference0
        displaywidth  = reference1
        displayheight = reference2
}

//---- URL ----------------------------------------------------------------------
//---- CROW 始時呼 ----
OnURLDropping
{
        "\0\s[6]下載中…\n\n[half]\_qURL:%(reference0)\_q\e"
}
/*
//---- 起動時 MATERIA 檢出 ----------------------------------------------------------
OnEmbryoExist
{
        "\0\s[0]既「伺」起動。\e"
}

//---- 起動時貓檢出 -----------------------------------------------------------
OnNekodorifExist
{
        "\0\s[0]、貓‥‥\w9\1\s[10]‥\w5‥\5!!\e"
}

//---- 實行開始 -------------------------------------------------------
OnScreenSaverStart
{
        "\0\s[0]動出\e"
}

//---- 實行終了 -------------------------------------------------------
OnScreenSaverEnd
{
        "\0\s[0]%username、掃。\e"
}

*/
[url=http://hk.myblog.yahoo.com/lkyjimmy/]網主福佳網誌[/url]

TOP

=_,=;;;
爲何etc的内容全上來了……

我也是將他直接取代了原本利用SAORI播放音樂的代碼,
大致是這個樣子……
不知道好不好,總之能用就是Orz
複製內容到剪貼板
代碼:
//**** 音樂播放+壁紙變換 **********************************************************************************
OnFileDrop2
{
        if '.mp3' _in_ reference0 {
                "\1\s[11]得到一個音樂。\0\s[2]\b[2]要播放此音樂嗎?\n\n/
                \![*]\q[播放且唱出,OnMusicPlayWithLyric,%(reference0)]\n/
                \![*]\q[僅播放,OnMusicPlayWithLyric,%(reference0),nolyric]\n\n[half]/
                \_b[img/close.png,inline]\q[Cancel,CANCEL]";
        }
        _filepath = SPLITPATH(reference0)
        _filename = _filepath[2]
        _fileext = TOLOWER(_filepath[3])
        case _fileext
        {
                when ".png", ".jpg", ".jpeg", ".bmp"
                {
                        Wallpaperfile = reference0
                        "\0\s[2]\b[2]%(_filename)%(_fileext)。\n\n要把這個設定為壁紙嗎?\n/
                        \![*]\q[居中,SetWallpaper_0]\n/
                        \![*]\q[並列,SetWallpaper_1]\n/
                        \![*]\q[拉伸,SetWallpaper_2]\n\n[half]/
                        \![*]\q[Cancel,SetWallpaper_Cancel]\e"
                }
                others
                {
                        "\0\s[0]%(_filename)%(_fileext)…這是什麽?\e"
                }
       
        }
}
主頁更新啦:cat-fish.net

TOP

引用:
原帖由 貓魚 於 2008-6-18 10:45 發表
全部成功XD
實在是太感激了,這樣我對千千靜聽最後一個怨念也得以了結。
(只是歌詞卡還是要用它做"")

---
追加:
只是這樣無法選擇暫停/繼續、停止,
如果中途要換一首就要重起人格||||
可不可以加上這個功能呢? ...
修改版本已貼上

另外如播放清單、多曲播放等功能
等我正式寫初音人格時再實作吧
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP

引用:
原帖由 lkyjimmy 於 2008-6-18 14:00 發表
我想只加入
但不作出其他修改
請問應該如何改
將OnFileDrop2事件改成這樣
複製內容到剪貼板
代碼:
OnFileDrop2
{
        _filepath = SPLITPATH(reference0)
        _filename = _filepath[2]
        _fileext = TOLOWER(_filepath[3])
        case _fileext
        {
                when ".png", ".jpg", ".jpeg", ".bmp"
                {
                        Wallpaperfile = reference0
                        "\0\s[20]%(_filename)%(_fileext)是嗎。\w9\w9\s[0]\n\n[half]這個、\w9\w9要設定成桌布嗎?\n\n/
                        \q[◇置中,SetWallpaper_0]\n/
                        \q[◇並列,SetWallpaper_1]\n/
                        \q[◇放大,SetWallpaper_2]\n\n[half]/
                        \q[◇取消,SetWallpaper_Cancel]\e"
                }
                when ".mid", ".wav", ".mp3", ".wma", ".au", ".ogg"
                {
                        if '.mp3' _in_ reference0 {
                                "\0\s[0]要播放此音樂嗎?\n\n/
                                \q[播放且唱出,OnMusicPlayWithLyric,%(reference0),play]\n/
                                \q[僅播放,OnMusicPlayWithLyric,%(reference0),play,nolyric]\n/
                                \q[取消,CANCEL]";
                        }
                        else {
                                Musicfile = reference0
                                "\0\s[20]%(_filename)%(_fileext)是嗎。\w9\w9\s[0]\n\n要聽這首音樂嗎?\n\n/
                                \q[◇通常播放,MusicStart_0]\n/
                                \q[◇重複播放,MusicStart_1]\n\n[half]/
                                \q[◇取消,MusicStart_Cancel]\e"
                        }
                }
                others
                {
                        "\0\s[0]%(_filename)%(_fileext)\e"
                }
        
        }

}
然後再插入另外兩個函式進去即可
末月返想 - 創意的存放處
二次元斷層 - 成果展現之所在

惰性是大敵。

TOP



當前時區 GMT+8, 現在時間是 2023-10-3 19:28

Processed in 0.022971 second(s), 8 queries, Gzip enabled.

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