mmpSearch/assets/js/creations/state.js

66 lines
1.8 KiB
JavaScript

// js/state.js
import { patternState, initializePatternState } from './pattern/pattern_state.js';
import { audioState, initializeAudioState } from './audio/audio_state.js';
import { DEFAULT_VOLUME, DEFAULT_PAN } from "./config.js";
// Estado global da aplicação
const globalState = {
sliceToolActive: false,
isPlaying: false,
isAudioEditorPlaying: false,
playbackIntervalId: null,
currentStep: 0,
metronomeEnabled: false,
originalXmlDoc: null,
currentBeatBasslineName: 'Novo Projeto',
masterVolume: DEFAULT_VOLUME,
masterPan: DEFAULT_PAN,
zoomLevelIndex: 2,
// --- ADICIONADO PARA A ÁREA DE LOOP ---
isLoopActive: false,
loopStartTime: 0,
loopEndTime: 8,
// --- ADICIONADO PARA O MODO DE REDIMENSIONAMENTO ---
resizeMode: 'trim', // Pode ser 'trim' (Modo 2) ou 'stretch' (Modo 1)
selectedClipId: null,
// --- RECORDING ---
isRecording: false,
};
// Combina todos os estados em um único objeto namespaced
export let appState = {
global: globalState,
pattern: patternState,
audio: audioState,
};
// Função para resetar o projeto para o estado inicial
export function resetProjectState() {
initializePatternState();
initializeAudioState();
Object.assign(globalState, {
sliceToolActive: false,
isPlaying: false,
isAudioEditorPlaying: false,
playbackIntervalId: null,
currentStep: 0,
metronomeEnabled: false,
originalXmlDoc: null,
currentBeatBasslineName: 'Novo Projeto',
masterVolume: DEFAULT_VOLUME,
masterPan: DEFAULT_PAN,
zoomLevelIndex: 2,
isLoopActive: false,
loopStartTime: 0,
loopEndTime: 8,
resizeMode: 'trim', // Reseta para o modo 'trim'
selectedClipId: null,
// --- RECORDING ---
isRecording: false,
});
}