Skip to content

Instantly share code, notes, and snippets.

@tcdw
Last active April 9, 2016 13:36
Show Gist options
  • Select an option

  • Save tcdw/c674dbc5cf9885376f51 to your computer and use it in GitHub Desktop.

Select an option

Save tcdw/c674dbc5cf9885376f51 to your computer and use it in GitHub Desktop.
NintSPC TXT Optimizer
// NintSPC TXT Optimizer by tcdw
// FreeBSD License
var fs = require('fs');
var fileName = "card-33.txt";
var panfix = false; // Fix Pannings for Kirby series SPC?
var smw = false; // Fix Drums calling for SMW SPC?
var scanInst = true; // Scan used instruments and drums and remove unused things?
var delAllComments = true; // Delete all comments?
var results = "";
var lineSpliter = "\r\n";
replace = function(a, b, c) { // Replace ALL
return a.split(b).join(c);
}
dec2Hex = function(x) {
return ((x < 16) ? ('0' + x.toString(16)).slice(-2) : (x.toString(16)).slice(-2)).toUpperCase();
}
fs.readFile(fileName, "utf8", function(err, asd) {
if (err) throw err;
tmpTXT = replace(asd, "\r", "");
tmpTXT = "#0" + tmpTXT.split("#0")[1];
asa = new Array();
if (panfix) {
tmpTXT = replace(tmpTXT, "y", "inv");
for (i = 20; i > -1; i--) {
tmpTXT = replace(tmpTXT, "inv" + i, "y" + (20 - i));
}
}
if (smw) {
for (i = 0; i < 30; i++) {
num = i < 10 ? "0" + i : i;
tmpTXT = replace(tmpTXT, "PATCH0" + num, "@" + i + " h0");
}
for (i = 0; i < 10; i++) {
tmpTXT = replace(tmpTXT, "PERC00" + i + "N", "@" + (21 + i) + " h0 c");
tmpTXT = replace(tmpTXT, "PERC00" + i + "X", "@" + (21 + i) + " h0 c");
}
}
tmpTXT = replace(tmpTXT, "VCMD_PATCH", "$DA");
tmpTXT = replace(tmpTXT, "VCMD_PANPOT", "$DB");
tmpTXT = replace(tmpTXT, "VCMD_PAN_FADE", "$DC");
tmpTXT = replace(tmpTXT, "VCMD_VIBRATO_ON", "$DE");
tmpTXT = replace(tmpTXT, "VCMD_VIBRATO_OFF", "$DF");
tmpTXT = replace(tmpTXT, "VCMD_MASTER_VOL_FADE", "$E1");
tmpTXT = replace(tmpTXT, "VCMD_MASTER_VOLUME", "$E0");
tmpTXT = replace(tmpTXT, "VCMD_SET_TEMPO", "$E2");
tmpTXT = replace(tmpTXT, "VCMD_TEMPO_FADE", "$E3");
tmpTXT = replace(tmpTXT, "VCMD_GLOBAL_TRANSPOSE", "$E4");
tmpTXT = replace(tmpTXT, "VCMD_PERVOICE_TRANSPOSE", "$FA $02");
tmpTXT = replace(tmpTXT, "VCMD_TREMOLO_ON", "$E5");
tmpTXT = replace(tmpTXT, "VCMD_TREMOLO_OFF", "$E5 $00 $00 $00");
tmpTXT = replace(tmpTXT, "VCMD_VOLUME", "$E7");
tmpTXT = replace(tmpTXT, "VCMD_VOL_FADE", "$E8");
tmpTXT = replace(tmpTXT, "VCMD_SUBROUTINE", "$E9");
tmpTXT = replace(tmpTXT, "VCMD_VIBRATO_FADE", "$EA");
tmpTXT = replace(tmpTXT, "VCMD_PITCHENV_TO", "$EB");
tmpTXT = replace(tmpTXT, "VCMD_PITCHENV_FROM", "$EC");
tmpTXT = replace(tmpTXT, "VCMD_PITCHENV_OFF", "$EB $00 $00 $00");
tmpTXT = replace(tmpTXT, "VCMD_TUNING", "$EE");
tmpTXT = replace(tmpTXT, "VCMD_ECHO_ON", "$EF");
tmpTXT = replace(tmpTXT, "VCMD_ECHO_OFF", "$F0");
tmpTXT = replace(tmpTXT, "VCMD_ECHO_PARAM", "$F1");
tmpTXT = replace(tmpTXT, "VCMD_ECHO_VOL_FADE", "$F2");
tmpTXT = replace(tmpTXT, "VCMD_PITCH_SLIDE", "$DD");
tmpTXT = tmpTXT.split("\n");
asas = "";
if (delAllComments) {
for (i = 0; i < tmpTXT.length; i++) {
var lingshi = tmpTXT[i].split(";");
results += lingshi[0] + lineSpliter;
}
} else {
results = tmpTXT;
}
if (scanInst) {
var scannedIL = "";
for (i = 0; i < 256; i++) {
if (i < 10) {
fixedID = "00" + i;
} else if (i >= 10 & i < 100) {
fixedID = "0" + i;
} else {
fixedID = i;
}
if (results.indexOf("PATCH" + fixedID) != -1) {
scannedIL += "\"PATCH" + fixedID + '=" ; ' + dec2Hex(i) + lineSpliter;
}
if (i <= 22 & results.indexOf("PERC" + fixedID) != -1) {
scannedIL += "\"PERC" + fixedID + 'X=" ; ' + dec2Hex(i) + " + VCMD_PERC_PATCH_BASE value" + lineSpliter;
scannedIL += "\"PERC" + fixedID + 'N=" ; ' + dec2Hex(i) + " + VCMD_PERC_PATCH_BASE value" + lineSpliter;
}
}
results = scannedIL + results;
}
fs.writeFileSync("converted_" + fileName, results);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment