Enviar arquivos para "/"
This commit is contained in:
commit
419706e0bb
|
@ -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>
|
|
@ -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!")
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue