Skip to content

Instantly share code, notes, and snippets.

@maimainoue
Created August 16, 2015 19:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maimainoue/4e9f7d5d9c49540335f5 to your computer and use it in GitHub Desktop.
Save maimainoue/4e9f7d5d9c49540335f5 to your computer and use it in GitHub Desktop.
Cueファイル読み込み
// Cueファイル読み込み
Cue.readCue = function(param,cb) {
var strText;
var self = this;
var data;
var trackMode = false;
var tmpTrackNo=0;
var indexNo;
var error;
var di = {};
di.track = [];
var data = '';
//console.dir(param);
if( param.fileName != '' ) {
try {
data = fs.readFileSync(param.fileName);
} catch(e) {
console.log(e);
return;
}
} else {
// ファイルが設定されてない場合はrawにCueの内容が設定されているはず。
data = param.raw;
}
if( param.encode == undefined || param.encode == 'utf-8' ) {
data = data.toString();
} else {
//console.log('encode:'+param.encode);
data = jconv.convert(data,param.encode,'utf-8').toString();
}
//console.log(data);
data.replace(/\r/g,'').split('\n').forEach(function (strText) {
//console.log(strText);
arrText = strText.ltrim().split(" ");
if( !trackMode ) {
// 全体情報
switch( arrText[0] ) {
case "REM" :
switch( arrText[1] ) {
case "DISCID" :
di.discId = arrText[2];
break;
case "ACCURATERIPID" :
di.accurateRipId = arrText[2];
break;
case "DATE" :
di.date = arrText[2];
break;
case "DISCNUMBER" :
di.discNumber = arrText[2];
break;
case "GENRE" :
di.genre = strText.match( /REM GENRE "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "TOTALDISCS" :
di.totalDiscs = arrText[2];
break;
case "COMMENT" :
di.comment = strText.match( /REM COMMENT "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "REPLAYGAIN_ALBUM_GAIN" :
di.replaygain_album_gain = arrText[2];
break;
case "REPLAYGAIN_ALBUM_PEAK" :
di.replaygain_album_peak = arrText[2];
break;
default :
break;
}
break;
case "PERFORMER" :
di.albumArtist = strText.match( /^[^ ]* "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "TITLE" :
di.albumTitle = strText.match( /^[^ ]* "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "CATALOG" :
di.catalog = arrText[1];
break;
case "FILE" :
di.wavFile = strText.match( /FILE "{0,1}([^"]*)"{0,1}/ )[1];
di.wavFileType = strText.match( /FILE "{0,1}[^"]*"{0,1} ([^ ]*)/ )[1];
trackMode = true;
break;
default :
//console.log('unknown:',arrText);
break;
}
} else {
// トラック情報
switch( arrText[0] ) {
case "TRACK" :
tmpTrackNo = strText.match( /TRACK ([0-9]{1,2})/ )[1].toInt();
di.trackCount = tmpTrackNo;
tmpTrackNo--; // 配列なので-1
di.track.push({});
di.track[tmpTrackNo].index = [];
di.track[tmpTrackNo].type = strText.match( /TRACK [0-9]{1,2} ([^"]*)/ )[1];
break;
case "PERFORMER" :
di.track[tmpTrackNo].artist = strText.match( /PERFORMER "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "TITLE" :
di.track[tmpTrackNo].title = strText.match( /TITLE "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "ISRC" :
di.track[tmpTrackNo].isrc = strText.match( /ISRC "{0,1}([^"]*)"{0,1}/ )[1];
break;
case "REM" :
switch( arrText[1] ) {
case "REPLAYGAIN_TRACK_GAIN" :
di.track[tmpTrackNo].replaygain_trackgain = arrText[2];
break;
case "REPLAYGAIN_TRACK_PEAK" :
di.track[tmpTrackNo].replaygain_track_peak = arrText[2];
break;
default :
break;
}
break;
case "INDEX" :
indexNo = strText.match( /INDEX ([0-9]{1,2}) .*/ )[1];
var idx = di.track[tmpTrackNo].index.push({});
di.track[tmpTrackNo].indexCount = idx;
idx--;
//console.log(idx)
di.track[tmpTrackNo].index[idx].id = indexNo;
di.track[tmpTrackNo].index[idx].time = strText.match( /INDEX [0-9]{1,2} (.*)/ )[1];
di.track[tmpTrackNo].index[idx].min = (strText.match( /INDEX [0-9]{1,2} ([0-9]{1,2}):[0-9]{1,2}:[0-9]{1,2}/ )[1]).toInt();
di.track[tmpTrackNo].index[idx].sec = (strText.match( /INDEX [0-9]{1,2} [0-9]{1,2}:([0-9]{1,2}):[0-9]{1,2}/ )[1]).toInt();
di.track[tmpTrackNo].index[idx].flame = (strText.match( /INDEX [0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:([0-9]{1,2})/ )[1]).toInt();
di.track[tmpTrackNo].index[idx].totalFlame =
(di.track[tmpTrackNo].index[idx].min * 60 * 75) +
(di.track[tmpTrackNo].index[idx].sec * 75) +
(di.track[tmpTrackNo].index[idx].flame);
break;
default :
//console.log('unknown:',arrText);
break;
}
}
});
//console.log(di);
cb(error,di);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment