Zurück zur Übersicht
JS: Cue-Dateien für Playstation 1 Emulatoren erstellen
#Tutorials#Javascript
Da ich mir vor einiger Zeit einen Raspberry Pi 3 in ein altes Nes-Gehäuse gebaut habe, brauchte ich natürlich auch Roms. Für N64, Snes und so weiter klappte alles immer auf Anhieb. Bei der Playstation waren oft nur bin-Dateien dabei. Hat man nur diese, so kann der Emulator die Spiele nicht abspielen. Man braucht die Cue-Datei. Diese zu generieren ist händisch machbar, aber ich habe mir gedacht, dass es einfacher ist, wenn das automatisiert geht.
Das Ganze läuft über HTML5 mit Drag/Drop. Durch das Droppen bekomme ich die Dateinamen, die abgelegt wurden, ohne dass die Dateien hochgeladen werden. Das Skript habe ich auf meiner Tools-Seite hinzugefügt.
Hier mal ein kleiner Auszug des Codes:
$(function() {
var dropzone = $("#dropzone");
//...
dropzone.on("drop", function(e) {
dropzone.removeClass("hover");
var flasher = function(state) {
dropzone.toggleClass("flash", state);
}
flasher(true);
var fileNames = extractFilenames(e.originalEvent.dataTransfer.files);
setTimeout(function() {
flasher(false);
var cueSheet = filenamesToCue(fileNames);
// set cue file name
fileNames = fileNames.slice();
var firstFile = fileNames.shift();
var cuefilename = firstFile.split('.').slice(0, -1).join('.') + '.cue';
$("#result").text(cueSheet);
$(".dlbutton").attr('data-filename',cuefilename).show();
}, 250)
})
$('.dlbutton').click(function(e) {
e.preventDefault();
var filename = $(this).attr('data-filename');
var text = $("#result").text();
download(filename, text);
});
});
// Download generated file
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
// Get Filenames
function extractFilenames(fileList) {
return $.makeArray(fileList).map(function(file) {
return file.name;
})
}
// Generatore Cue-Data
function filenamesToCue(fileNames) {
fileNames = fileNames.slice();
var firstFile = fileNames.shift();
var sheet = 'FILE "' + firstFile + '" BINARY\n\
TRACK 01 MODE2/2352\n\
INDEX 01 00:00:00\n\
';
var trackCounter = 2
fileNames.forEach(function(fileName) {
sheet += 'FILE "' + fileName + '" BINARY\n\
TRACK ' + padLeadingZero(trackCounter) + " AUDIO\n\
INDEX 00 00:00:00\n\
INDEX 01 00:02:00\n\
"
trackCounter++;
});
return sheet;
}
function padLeadingZero(number) {
var padded = "0" + number;
return padded.substr(padded.length-2);
}
Kommentare
Es gibt noch keine Kommentare. Sei der Erste!
Hinterlasse einen Kommentar