Arrumando botões de volume e pan, criação de novos compassos.
This commit is contained in:
1 parent
e776a830c8
commit
e10621da17
8 files changed
+411
-291
No files matched your search
@@ -17,6 +17,29 @@ export let appState = {
|
||||
originalXmlDoc: null,
|
||||
};
|
||||
|
||||
// ESSA É A FUNÇÃO QUE ESTÁ FALTANDO NO SEU ARQUIVO ATUAL
|
||||
// Função auxiliar para carregar o buffer de áudio para uma track específica
|
||||
export async function loadAudioForTrack(track) {
|
||||
if (!track.samplePath) {
|
||||
console.warn("Track sem samplePath, pulando o carregamento de áudio.");
|
||||
return track;
|
||||
}
|
||||
try {
|
||||
const audioContext = getAudioContext();
|
||||
if (!audioContext) initializeAudioContext();
|
||||
|
||||
const response = await fetch(track.samplePath);
|
||||
if (!response.ok) throw new Error(`Erro ao buscar o sample: ${response.statusText}`);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
track.audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
|
||||
console.log(`Áudio carregado para a trilha: ${track.name}`);
|
||||
} catch (error) {
|
||||
console.error(`Falha ao carregar áudio para a trilha ${track.name}:`, error);
|
||||
track.audioBuffer = null; // Marca como falha para não tentar tocar
|
||||
}
|
||||
return track;
|
||||
}
|
||||
|
||||
export function addTrackToState() {
|
||||
initializeAudioContext();
|
||||
const audioContext = getAudioContext();
|
||||
@@ -26,7 +49,7 @@ export function addTrackToState() {
|
||||
id: Date.now(),
|
||||
name: "novo instrumento",
|
||||
samplePath: null,
|
||||
audioBuffer: null, // (NOVO) Adicionado para armazenar o áudio decodificado
|
||||
audioBuffer: null,
|
||||
steps: [],
|
||||
volume: DEFAULT_VOLUME,
|
||||
pan: DEFAULT_PAN,
|
||||
@@ -47,33 +70,14 @@ export function removeLastTrackFromState() {
|
||||
renderApp();
|
||||
}
|
||||
|
||||
// (ALTERADO) A função agora é 'async' para carregar e decodificar o áudio
|
||||
export async function updateTrackSample(trackId, samplePath) {
|
||||
const track = appState.tracks.find((t) => t.id == trackId);
|
||||
if (track) {
|
||||
track.samplePath = samplePath;
|
||||
track.name = samplePath.split("/").pop();
|
||||
track.audioBuffer = null; // Limpa o buffer antigo enquanto carrega o novo
|
||||
renderApp(); // Renderiza imediatamente para mostrar o novo nome
|
||||
|
||||
// (NOVO) Lógica para carregar e decodificar o áudio em segundo plano
|
||||
try {
|
||||
const audioContext = getAudioContext();
|
||||
if (!audioContext) initializeAudioContext(); // Garante que o contexto de áudio exista
|
||||
|
||||
const response = await fetch(samplePath);
|
||||
const arrayBuffer = await response.arrayBuffer();
|
||||
const decodedAudio = await audioContext.decodeAudioData(arrayBuffer);
|
||||
|
||||
track.audioBuffer = decodedAudio; // Armazena o buffer decodificado no estado da track
|
||||
console.log(`Sample ${track.name} carregado e decodificado com sucesso.`);
|
||||
|
||||
} catch (error) {
|
||||
console.error("Erro ao carregar ou decodificar o sample:", error);
|
||||
track.samplePath = null;
|
||||
track.name = "erro ao carregar";
|
||||
renderApp(); // Re-renderiza para mostrar a mensagem de erro
|
||||
}
|
||||
track.audioBuffer = null;
|
||||
renderApp();
|
||||
await loadAudioForTrack(track); // Reutiliza a nova função aqui
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user