54 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.6 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, // O botão de loop principal agora controla este estado
 | 
						|
  loopStartTime: 0,    // Início do loop em segundos
 | 
						|
  loopEndTime: 8,      // Fim do loop em segundos (padrão de 4 compassos a 120BPM)
 | 
						|
};
 | 
						|
 | 
						|
// 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,
 | 
						|
    });
 | 
						|
} |