melhorando a leitura de projetos no mmpCreator
Deploy / Deploy (push) Successful in 2m13s
Details
Deploy / Deploy (push) Successful in 2m13s
Details
This commit is contained in:
parent
3727ac7b13
commit
a636b514ed
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue