在网上下载了 WHITE ALBUM -綴られる冬の想い出- Original Soundtrack 这张专辑(flac),但却没有CUE。发现很多人都在求这个CUE,澄空的链接失效了,KFC上有人搞出来个,结果却没有共享。今天花了1个小时写了个生成CUE的小程序,把这张专辑的CUE生成出来了。
CD1
REM DATE 2010
REM COMMENT "CUECreator V1.0"
REM GENRE "Game"
PERFORMER "Aquaplus"
TITLE "White Album-綴られる冬の想い出-Original Soundtrack CD1"
FILE "KICA-1483.flac" WAVE
TRACK 01 AUDIO
TITLE "あの頃のように -Remix Version-"
PERFORMER "Aquaplus"
INDEX 01 0:00.00
TRACK 02 AUDIO
TITLE "雪の魔法 -GAME ver.-"
PERFORMER "Aquaplus"
INDEX 01 2:52.70
TRACK 03 AUDIO
TITLE "朝陽"
PERFORMER "Aquaplus"
INDEX 01 4:36.07
TRACK 04 AUDIO
TITLE "出逢いの街"
PERFORMER "Aquaplus"
INDEX 01 7:39.20
TRACK 05 AUDIO
TITLE "ひとときの休息"
PERFORMER "Aquaplus"
INDEX 01 9:54.60
TRACK 06 AUDIO
TITLE "森川由綺"
PERFORMER "Aquaplus"
INDEX 01 11:59.72
TRACK 07 AUDIO
TITLE "緒方理奈"
PERFORMER "Aquaplus"
INDEX 01 14:23.22
TRACK 08 AUDIO
TITLE "河島はるか"
PERFORMER "Aquaplus"
INDEX 01 17:19.58
TRACK 09 AUDIO
TITLE "澤倉美咲"
PERFORMER "Aquaplus"
INDEX 01 20:00.27
TRACK 10 AUDIO
TITLE "観月マナ"
PERFORMER "Aquaplus"
INDEX 01 22:51.62
TRACK 11 AUDIO
TITLE "篠塚弥生"
PERFORMER "Aquaplus"
INDEX 01 24:48.70
TRACK 12 AUDIO
TITLE "如月小夜子"
PERFORMER "Aquaplus"
INDEX 01 27:11.22
TRACK 13 AUDIO
TITLE "フランク長瀬"
PERFORMER "Aquaplus"
INDEX 01 29:11.20
TRACK 14 AUDIO
TITLE "WINTER VACATION"
PERFORMER "Aquaplus"
INDEX 01 31:22.58
TRACK 15 AUDIO
TITLE "聖夜"
PERFORMER "Aquaplus"
INDEX 01 33:46.42
TRACK 16 AUDIO
TITLE "TENSION"
PERFORMER "Aquaplus"
INDEX 01 36:01.49
TRACK 17 AUDIO
TITLE "星を見上げて"
PERFORMER "Aquaplus"
INDEX 01 38:11.26
TRACK 18 AUDIO
TITLE "ぬくもり"
PERFORMER "Aquaplus"
INDEX 01 41:34.06
TRACK 19 AUDIO
TITLE "FILL YOU"
PERFORMER "Aquaplus"
INDEX 01 43:37.40
TRACK 20 AUDIO
TITLE "あの頃のように"
PERFORMER "Aquaplus"
INDEX 01 45:24.27
TRACK 21 AUDIO
TITLE "冷たい雨"
PERFORMER "Aquaplus"
INDEX 01 46:50.72
CD2
REM DATE 2010
REM COMMENT "CUECreator V1.0"
REM GENRE "Game"
PERFORMER "Aquaplus"
TITLE "White Album-綴られる冬の想い出-Original Soundtrack CD2"
FILE "KICA-1484.flac" WAVE
TRACK 01 AUDIO
TITLE " WHITE ALBUM"
PERFORMER "Aquaplus"
INDEX 01 0:00.00
TRACK 02 AUDIO
TITLE " SOUND OF DESTINY"
PERFORMER "Aquaplus"
INDEX 01 4:41.47
TRACK 03 AUDIO
TITLE " 星を見上げて -Remix Version-"
PERFORMER "Aquaplus"
INDEX 01 9:41.57
TRACK 04 AUDIO
TITLE " WHITE ALBUM PIANO"
PERFORMER "Aquaplus"
INDEX 01 13:58.37
TRACK 05 AUDIO
TITLE " 君のかわり"
PERFORMER "Aquaplus"
INDEX 01 17:31.35
TRACK 06 AUDIO
TITLE " 深淵"
PERFORMER "Aquaplus"
INDEX 01 23:39.57
TRACK 07 AUDIO
TITLE " POWDER SNOW"
PERFORMER "Aquaplus"
INDEX 01 26:33.51
TRACK 08 AUDIO
TITLE " POWDER SNOW [Pure Version]"
PERFORMER "Aquaplus"
INDEX 01 31:46.44
为了赶工所有的表演者都写成Aquaplus了,其实雪の魔法 -GAME ver.、君のかわり、POWDER SNOW、POWDER SNOW [Pure Version]都是Suara唱的;WHITE ALBUM和SOUND OF DESTINY分别是平野绫跟水樹奈々唱的。昨天玩了一下这游戏,马上就发现这张专辑真是不错。
实际上,我是有这张专辑的MP3版的,128Kbps。幸好有这MP3才能很快生成一个歌曲名列表,像这样:
dir /b >list.txt
这段bat脚本需要在MP3所在目录下运行才可以。同时为了方便起见,生成的列表文本又重新转存为UTF-8编码。
今天在网上发现7天前有人在天使动漫上发过该专辑的cue,质量比我的更好。链接 以下是我的代码:
DefaultBuilder.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace CUEBuilder
{
/// <summary>
/// 摘要:生成CUE信息、将CUE信息写入文件
/// 作者:ReiJi
/// Email:joecaisc#gmail.com
/// 编写日期:2013.10.20
/// </summary>
public class DefaultBuilder
{
private string _albumPerformer="Unknow";
/// <summary>
/// 专辑表演者,默认为Unknow
/// </summary>
public string AlbumPerformer
{
get
{
return _albumPerformer;
}
set
{
_albumPerformer = value;
}
}
private string _albumTitle = "Unkonw";
/// <summary>
/// 专辑名称,默认为Unknow
/// </summary>
public string AlbumTitle
{
get
{
return _albumTitle;
}
set
{
_albumTitle = value;
}
}
private string _date = DateTime.Now.ToString("yyyy-MM-dd");
/// <summary>
/// 专辑发售时间,默认为当前时间
/// </summary>
public string Date
{
get
{
return _date;
}
set
{
_date = value;
}
}
private string _genre = "Other";
/// <summary>
/// 流派,默认为Other
/// </summary>
public string Genre
{
get
{
return _genre;
}
set
{
_genre = value;
}
}
/// <summary>
/// 光盘编号,默认为空
/// </summary>
private string DiscId { get; set; }
/// <summary>
/// 未分轨文件名,短文件名,如:KSDB-1923.flac
/// </summary>
public string Filename { get; set; }
/// <summary>
/// 抓轨日志信息文件路径
/// </summary>
public string ReferenceLog { get; set; }
/// <summary>
/// 曲目列表文件路径
/// </summary>
public string TitleList { get; set; }
/// <summary>
/// 实例化一个DefaultBuilder实例
/// </summary>
/// <param name="filename">未分轨文件名,短文件名,如:KSDB-1923.flac</param>
/// <param name="referenceLog"> 抓轨日志信息文件路径</param>
/// <param name="titleList">曲目列表文件路径</param>
public DefaultBuilder(string filename, string referenceLog, string titleList)
{
Filename = filename;
ReferenceLog = referenceLog;
TitleList = titleList;
}
/// <summary>
/// 实例化一个DefaultBuilder实例
/// </summary>
/// <param name="albumPerformer">专辑表演者</param>
/// <param name="albumTitle">专辑名称</param>
/// <param name="filename">未分轨文件名,短文件名,如:KSDB-1923.flac</param>
/// <param name="referenceLog"> 抓轨日志信息文件路径</param>
/// <param name="titleList">曲目列表文件路径</param>
public DefaultBuilder(string albumPerformer, string albumTitle, string filename, string referenceLog, string titleList)
: this(filename, referenceLog, titleList)
{
AlbumPerformer = albumPerformer;
AlbumTitle = albumTitle;
}
/// <summary>
/// 生成CUE信息
/// </summary>
/// <returns>生成的CUE信息</returns>
public string Build()
{
StringBuilder result = new StringBuilder();
result.Append(BuildREM());
result.Append(BuildTitle());
result.Append(BuildAudio());
return result.ToString();
}
/// <summary>
/// 生成CUE信息并保存到文件
/// </summary>
/// <param name="path">生成文件的保存路径</param>
public void BuildToFile(string path)
{
string content = Build();
StreamWriter sw = new StreamWriter(new FileStream(path, FileMode.Create), Encoding.UTF8);
sw.Write(content);
sw.Flush();
sw.Close();
Console.WriteLine("ALL DONE!");
}
/// <summary>
/// 生成REM信息
/// </summary>
/// <returns></returns>
protected string BuildREM()
{
StringBuilder sb = new StringBuilder();
sb.Append("REM DATE ").AppendLine(Date);
sb.Append("REM GENRE ").AppendLine(Genre);
sb.Append("REM DISCID ").AppendLine(DiscId);
sb.Append("REM COMMENT ").AppendLine(QuotoBraced("CUECreator V1.0"));
return sb.ToString();
}
/// <summary>
/// 生成专辑表演者、专辑名、未分轨文件
/// </summary>
/// <returns></returns>
protected string BuildTitle()
{
StringBuilder sb = new StringBuilder();
sb.Append("PERFORMER ").AppendLine(QuotoBraced(AlbumPerformer));
sb.Append("TITLE ").AppendLine(QuotoBraced(AlbumTitle));
sb.Append("FILE ").Append(QuotoBraced(Filename)).AppendLine(" WAVE");
return sb.ToString();
}
/// <summary>
/// 生成分轨的曲目信息
/// </summary>
/// <returns></returns>
protected string BuildAudio()
{
StreamReader refsr = new StreamReader(ReferenceLog, Encoding.UTF8);
StreamReader listsr = new StreamReader(TitleList);
StringBuilder result = new StringBuilder();
int count = 1;
while (!refsr.EndOfStream)
{
string[] timeInfo = GetTimeInfo(refsr.ReadLine());
string title = GetTitle(listsr.ReadLine());
result.Append(" TRACK ").Append(count.ToString("D2")).AppendLine(" AUDIO");
result.Append(" TITLE ").AppendLine(QuotoBraced(title));
result.Append(" PERFORMER ").AppendLine(QuotoBraced(AlbumPerformer));
result.Append(" INDEX 01 ").AppendLine(timeInfo[0]);
count++;
}
refsr.Close();
listsr.Close();
return result.ToString();
}
/// <summary>
/// 将所给字符串用""包裹
/// </summary>
/// <param name="str">原文本</param>
/// <returns></returns>
private string QuotoBraced(string str)
{
return "\"" + str + "\"";
}
/// <summary>
/// 根据抓轨日志获取曲目时间信息
/// </summary>
/// <param name="str">从文件中读取的信息</param>
/// <returns>result[0]为开始时间,result[1]为持续时间</returns>
protected string[] GetTimeInfo(string str)
{
string[] temp = str.Split('|');
string[] result = new string[2];
result[0] = temp[1].Trim();
result[1] = temp[2].Trim();
return result;
}
/// <summary>
/// 从文件中获取曲目名称
/// </summary>
/// <param name="str">从文件中读取的信息</param>
/// <returns></returns>
protected string GetTitle(string str)
{
string result = str.Substring(3);
result = result.Substring(0, result.Length - 4);
return result;
}
}
}
调用就很简单了:
DefaultBuilder builder = new DefaultBuilder("Aquaplus",
"White Album-綴られる冬の想い出-Original Soundtrack CD2",
"KICA-1484.flac",
@"D:\log2.txt",
@"D:\log.txt");
builder.Date = "2010-07-21";
builder.Genre = "Game";
builder.BuildToFile(@"D:\KICA-1484.cue");
没有评论:
发表评论