MMPCreations/generateSampleManifest.py

54 lines
2.2 KiB
Python

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!")