melhorando a leitura de projetos no mmpCreator
Deploy / Deploy (push) Successful in 2m13s Details

This commit is contained in:
JotaChina 2025-12-23 23:06:06 -03:00
parent 3727ac7b13
commit a636b514ed
1 changed files with 12 additions and 16 deletions

View File

@ -47,9 +47,8 @@ function resolveSamplePath(sampleName, pathMap) {
// helper: LMMS ticks -> seconds (1 beat = 192 ticks)
function ticksToSeconds(ticks, bpm) {
const t = Number(ticks || 0);
const b = Number(bpm || 120);
return (t * 60) / (b * 192);
seconds = (ticks / 12) * getSecondsPerStep()
return seconds;
}
export async function parseBeatIndexJson(data) {
@ -95,37 +94,33 @@ export async function parseBeatIndexJson(data) {
appState.pattern.tracks = newPatternTracks;
// 2) cria lanes/clips de áudio a partir dos sample-tracks
const sampleTracks = (project?.tracks || []).filter((t) => t?.type === "sample");
const sampleTracks = (data?.tracks || []).filter((t) => t?.type === "sample"); // ✅ data
for (let i = 0; i < sampleTracks.length; i++) {
const t = sampleTracks[i];
// 1) cria lane de áudio
const trackId = `sample_lane_${Date.now()}_${i}`;
appState.audio.tracks.push({
id: trackId,
name: t.track_name || "Áudio",
});
// 2) resolve URL do arquivo
const fileName = t.sample_name || basename(t.sample_info?.src) || `${sample_info.src}.wav`;
const fileName =
t.sample_name ||
basename(t.sample_info?.src) ||
`${basename(t.sample_info?.src || "")}`; // ✅ sem sample_info solto
// tenta achar pelo filename no manifest do browser
// (se o seu manifest tiver duplicados com mesmo nome, aqui pode colidir)
const resolvedUrl =
pathMap[fileName] ||
// fallback bem simples (ajuste pro seu servidor)
`/src_mmpSearch/samples/samples/${project?.file || project?.original_title || ""}/${fileName}`;
`/src_mmpSearch/samples/samples/${data?.file || data?.original_title || ""}/${fileName}`; // ✅ data
// 3) converte pos/len (ticks) -> seconds
const startSec = ticksToSeconds(t.sample_info?.pos, bpm);
const durSec = ticksToSeconds(t.sample_info?.len, bpm);
// ✅ tempo no padrão do seu playlist (12 ticks por step)
const startSec = ((Number(t.sample_info?.pos || 0) / 12) * secondsPerStep);
const durSec = ((Number(t.sample_info?.len || 0) / 12) * secondsPerStep);
// 4) cria clip
const clipId = `clip_${trackId}_0`;
addAudioClipToTimeline(resolvedUrl, trackId, startSec, clipId, fileName);
// 5) aplica propriedades (duração/vol/pan) pra largura não ficar 0
const vol = Number(t.sample_info?.vol ?? 100) / 100;
const pan = Number(t.sample_info?.pan ?? 0) / 100;
const muted = String(t.sample_info?.muted ?? "0") === "1";
@ -137,6 +132,7 @@ export async function parseBeatIndexJson(data) {
});
}
renderAll();
}