Enviar arquivos para "/"

This commit is contained in:
JotaChina 2025-08-19 21:51:11 -03:00
commit 419706e0bb
3 changed files with 3202 additions and 0 deletions

60
creations.html Normal file
View File

@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DAW com Controle de Volume</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<aside class="sample-browser">
<div class="browser-header">Navegador de Samples</div>
<div class="browser-content" id="browser-content"></div>
</aside>
<button id="sidebar-toggle"><i class="fa-solid fa-caret-left"></i></button>
<header class="global-toolbar">
<div class="control-group"><i class="fa-solid fa-file"></i><i class="fa-solid fa-folder-open"></i><i class="fa-solid fa-save"></i></div>
<div class="divider"></div>
<div class="control-group">
<i class="fa-solid fa-backward-step" id="rewind-btn" title="Voltar ao Início"></i>
<i class="fa-solid fa-play" title="Play/Pause Global (Futuro)"></i>
<i class="fa-solid fa-stop" title="Stop Global (Futuro)"></i>
<i class="fa-solid fa-circle-dot" title="Gravar"></i>
</div>
<div class="divider"></div>
<div class="info-display-group">
<div class="info-display"><div class="interactive-input-container"><button class="adjust-btn" data-target="bpm" data-step="-1">-</button><input type="text" class="value-input" id="bpm-input" value="140" data-min="20" data-max="400"><button class="adjust-btn" data-target="bpm" data-step="1">+</button></div><div class="label">ANDAMENTO/BPM</div></div>
<div class="info-display"><div class="interactive-input-container"><div class="compasso-group"><button class="adjust-btn" data-target="compasso-a" data-step="-1">-</button><input type="text" class="value-input compasso-input" id="compasso-a-input" value="4" data-min="1" data-max="16"><button class="adjust-btn" data-target="compasso-a" data-step="1">+</button></div><span class="compasso-separator">/</span><div class="compasso-group"><button class="adjust-btn" data-target="compasso-b" data-step="-1">-</button><input type="text" class="value-input compasso-input" id="compasso-b-input" value="4" data-min="1" data-max="16"><button class="adjust-btn" data-target="compasso-b" data-step="1">+</button></div></div><div class="label">COMPASSO</div></div>
<div class="info-display"><div class="interactive-input-container" style="font-size: 0.7rem; color: var(--text-dark);">0:00:00</div><div class="label">MIN:SEC:MSEC</div></div>
</div>
<div class="control-group">
<button id="metronome-btn" title="Metrônomo On/Off">Metrônomo</button>
</div>
<div class="spacer"></div>
</header>
<main class="main-content">
<div class="beat-editor">
<div class="editor-header">Mostrar/esconder Editor de Bases<div class="window-controls"><i class="fa-solid fa-minus"></i><i class="fa-regular fa-square"></i><i class="fa-solid fa-xmark"></i></div></div>
<div class="editor-toolbar">
<div class="playback-controls">
<i class="fa-solid fa-play" id="play-btn" title="Play/Pause"></i>
<i class="fa-solid fa-stop" id="stop-btn" title="Stop"></i>
</div>
<div class="pattern-selector"><span>Beat/Bassline 0</span></div>
<div class="tool-icons"><i class="fa-solid fa-table-cells"></i><i class="fa-solid fa-bars-staggered"></i><i class="fa-solid fa-wave-square enabled"></i><i class="fa-solid fa-plus"></i></div>
<div class="zoom-controls"><i class="fa-solid fa-minus" id="remove-instrument-btn"></i><i class="fa-solid fa-plus" id="add-instrument-btn"></i></div>
</div>
<div id="track-container"></div>
</div>
</main>
<script src="js/main.js" defer></script>
</body>
</html>

54
generateSampleManifest.py Normal file
View File

@ -0,0 +1,54 @@
import os
import json
# TODO tornar um cron, sempre que adicionar um instrumento na pasta samples, ele deve fazer o manifest de novo
# --- Configurações ---
# O nome da pasta que contém os seus samples.
SAMPLES_DIR = 'samples'
# O nome do arquivo JSON que será gerado.
OUTPUT_FILE = 'samples-manifest.json'
def scan_directory(path):
"""
Função recursiva que escaneia um diretório e constrói uma
estrutura de dicionário (árvore) representando as pastas e arquivos.
"""
tree = {}
try:
# Lista todos os itens (arquivos e pastas) no caminho atual
for item in os.listdir(path):
full_path = os.path.join(path, item)
# Se o item for um diretório, chama a função novamente para ele
if os.path.isdir(full_path):
tree[item] = scan_directory(full_path)
# Se for um arquivo, adiciona no formato que nosso app precisa
else:
tree[item] = {"_isFile": True}
except FileNotFoundError:
print(f"ERRO: O diretório '{path}' não foi encontrado.")
return None
except Exception as e:
print(f"Ocorreu um erro inesperado: {e}")
return None
return tree
# --- Execução Principal do Script ---
if __name__ == "__main__":
print(f"Iniciando escaneamento da pasta '{SAMPLES_DIR}'...")
# Verifica se a pasta 'samples' realmente existe
if not os.path.isdir(SAMPLES_DIR):
print(f"ERRO: A pasta '{SAMPLES_DIR}' não foi encontrada.")
print("Por favor, crie a pasta e adicione seus arquivos de áudio, ou verifique se o script está no lugar certo.")
else:
# Gera a estrutura da árvore de diretórios
directory_tree = scan_directory(SAMPLES_DIR)
if directory_tree is not None:
# Abre o arquivo de saída para escrita
with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
# Converte o dicionário Python para uma string JSON formatada e salva no arquivo
json.dump(directory_tree, f, indent=2, ensure_ascii=False)
print(f"Arquivo '{OUTPUT_FILE}' gerado com sucesso!")

3088
samples-manifest.json Normal file

File diff suppressed because it is too large Load Diff