feat: bổ sung MIDI

This commit is contained in:
2026-07-23 08:32:23 +07:00
parent 6545e1746e
commit 0e44e44ecb
15 changed files with 3304 additions and 12680 deletions
+17 -9
View File
@@ -3,12 +3,11 @@
const SFS_VERSION = "1.0.0";
function exportProjectToSFS(projectState) {
const sfsBundle = {
format: "SONICFORGE_STUDIO_PROJECT",
version: SFS_VERSION,
timestamp: Date.now(),
domain: window.location.origin,
project: {
let projectObj = {};
if (projectState.main_session) {
projectObj = projectState;
} else {
projectObj = {
id: projectState.id || `proj_${Date.now()}`,
name: projectState.name || "Dự án mới",
tracks: (projectState.tracks || []).map(t => ({
@@ -24,7 +23,15 @@
markers: t.markers || [],
serverFileId: t.serverFileId || null
}))
}
};
}
const sfsBundle = {
format: "SONICFORGE_STUDIO_PROJECT",
version: SFS_VERSION,
timestamp: Date.now(),
domain: window.location.origin,
project: projectObj
};
const jsonStr = JSON.stringify(sfsBundle, null, 2);
@@ -33,7 +40,8 @@
const a = document.createElement('a');
a.href = url;
a.download = `${(projectState.name || 'project').replace(/\s+/g, '_')}.sfs`;
const displayName = projectObj.metadata?.title || projectObj.name || 'project';
a.download = `${displayName.replace(/\s+/g, '_')}.sfs`;
a.click();
URL.revokeObjectURL(url);
}
@@ -53,7 +61,7 @@
autoSaveTimer = setTimeout(async () => {
try {
const state = getProjectStateCallback();
if (!state || !state.tracks || state.tracks.length === 0) return;
if (!state || (!state.tracks && !state.main_session)) return;
const dataJson = JSON.stringify(state);
localStorage.setItem('sonic_temp_project', dataJson);
if (window.SonicAPI && localStorage.getItem('sonic_token')) {