# mmpCreator & MMPSearch - Documentação Técnica --- ## 🏗️ Arquitetura do Sistema O sistema é um ecossistema completo para submissão, processamento e colaboração em projetos musicais (LMMS), estruturado nos seguintes pilares: 1. **Banco de Dados e Autenticação (Flask / SQLite):** Gestão segura de usuários (Bcrypt, Flask-Login), controle de propriedade de projetos e samples, além de um painel de administração (`Flask-Admin`). 2. **Motor de Renderização Headless (Python):** Processamento assíncrono via biblioteca `multiprocessing`. Utiliza o binário do LMMS em modo `offscreen` para extrair dados do XML (`.mmp` / `.mmpz`) e exportar o áudio gerado nativamente no servidor. 3. **MMPSearch (Catálogo Front-end):** Biblioteca estática gerada via Jekyll a partir de arquivos JSON/YAML, focada em leveza, indexação e busca de projetos com renderização via Web Audio API. 4. **MMPCreator (Colaboração em Tempo Real):** Sequenciador interativo hospedado em Node.js. Utiliza WebSockets para sincronizar edições simultâneas (áudio e MIDI) entre múltiplos usuários em salas virtuais. --- ## 🛠️ Área de Desenvolvimento O site está sendo desenvolvido em um ambiente virtual Python (`venv`). Para executá-lo corretamente, ative o ambiente com o comando: `source venv/bin/activate` Isso garante que todas as dependências do projeto sejam utilizadas corretamente. --- ## 📚 Discretização da informação - Para que a biblioteca de samples do `MMPCreator` seja inicializada, é necessário: - `cd scripts/creations` - `python generateManifest.py` - Para que os projetos sejam indexados e as informações sejam geradas corretamente no `MMPSearch` é necessário: - `cd scripts/handler` - `python main.py` Dessa forma, os arquivos de manifesto serão gerados, contendo as informações de cada projeto e seus parâmetros individuais. Além disso, os parâmetros de instrumentos também são capturados. A grande mágica está ai, pois contendo as informações de diversos projetos é possível efetuar buscas dentre estes, em diversas categorias. --- ## 📤 Servidor de Upload, Samples e Build (Flask) O servidor `upload_server.py` atua como a API central do sistema. Ele recebe arquivos, gerencia a sessão dos usuários (Login/Registro) e automatiza a reconstrução da plataforma. - **Framework:** Flask - **Banco de Dados:** SQLite (com SQLAlchemy) - **Automação de Build:** Uso de Threads em segundo plano (Background Tasks) acionadas via rotas HTTP. ### Funcionamento: Sempre que um novo upload (Projeto ou Sample) é processado via API: 1. O arquivo é sanitizado e validado. 2. O sistema verifica a dependência de samples externos no XML. 3. Os manifestos (`samples-manifest.json`, metadados de projetos) são atualizados em tempo real no servidor. 4. Uma thread secundária segura (com Lock) dispara o comando `bundle exec jekyll build`, reconstruindo o frontend estático do MMPSearch para refletir a submissão imediatamente. ### Acesso da API: - `http://127.0.0.1:33002` > ⚠️ **Importante:** A estabilidade da reconstrução em produção depende do caminho absoluto do binário Ruby e do pacote Bundle configurados no script (`upload_server.py`). --- ## 💻 Backend para controle das salas online (Colaboração) Um serviço systemd foi criado para hospedar o backend de um servidor em nodeJS responsável por gerenciar as salas e a colaboração online do MMPCreator: - **Serviço:** `/etc/systemd/system/backend-MMPCreator.service` - **Nome do serviço:** `backend-MMPCreator.service` - **Frequência:** Tempo integral - **Tecnologia utilizada:** NodeJS (Socket.io) ### Funcionalidade: - Seu intuíto é deixar o backend online em tempo integral, possibilitando a utilização da plataforma em qualquer momento. - Para isso foi necessário inserir meu usuário no grupo de "ssl-cert" para acesso aos certificados (Let's Encrypt). - Essa abordagem foi escolhida, pois a "não" utilização do apache traz algumas variáveis a mais para a implementação de um proxy reverso para a comunicação segura via `wss://` e `https://` nas salas de colaboração. ### Acesso: - `http://127.0.0.1:33001` --- ## ✅ Funcionalidades Já Implementadas - [x] Criar projetos - [x] Carregar projetos (do PC ou do servidor) - [x] Salvar projetos (externamente) - [x] Editar projetos existentes (sem alterar o original) - [x] Utilizar metrônomo - [x] Criar e excluir patterns - [x] Alternar entre patterns em tempo real - [x] Controle de volume e pan por pattern e por instrumento - [x] Controle de volume e pan global - [x] Alterar quantidade e formato de compassos - [x] Alterar BPM - [x] Exibir duração da pattern via timer - [x] Salas online e colaboração em tempo real - [x] Botões de modo global e local para controle do editor de samples (controla play/pause/stop, loop e janela de loop) - [x] Exibição de notificações em alterações nos projetos em tempo real - [x] Gestão de usuários (Login, Registro, Perfis e painel Admin) - [x] Identificação automática de samples externos faltantes no upload de projetos. --- ## 📋 TODO (Próximos Passos) ### 🛠️ Funcionalidades - [x] Validar projetos MMP antes de aceitar uploads: - [x] Verificar se os samples são nativos - [ ] Corrigir caminhos dos samples (evitar problemas de execução) - [x] Para downloads dos zip de projetos; - [x] Para enviar projetos para a plataforma; - [ ] Reconhecer os caminhos atualizados no MMPCreator; - [ ] Fazer com que os caminhos atualizados permaneçam após cada build. - [x] Permitir envio de samples gravados com microfone: - [ ] Executar e recortar antes de salvar no servidor - [x] Gravar músicas diretamente na plataforma, mesmo sem mixagem - [ ] Ativar/desativar samples em patterns - [ ] Remover botões inúteis no controle de patterns - [ ] Melhorar documentação do código - [ ] Permitir alteração dos nomes das patterns (novos e existentes projetos) - [ ] Corrigir sistema de notas do projeto: - [ ] Incluir rastros da plataforma MMPCreator - [ ] Informações de autor e metadados - [ ] Criar atalhos de teclado: - [ ] Barra de espaço para play/pause - [ ] `+` e `-` para alternar entre patterns - [ ] Permitir alteração de nome de samples (⚠️ pode gerar duplicatas) - [ ] Verificar duplicidade de samples e projetos por nome - [ ] Resetar valores de botões via scroll do mouse - [ ] Ao salvar projeto: - [ ] Permitir escolha entre download ou salvar no servidor - [ ] Escolher nome do projeto ALICE MMPSearch This is a repository with the purpose of creating a site using Jekyll to serve as a LMMS Beat File Library. The intuitive is to be able to collect information from the files by indexing it and allows search with the most diverse filters. It is part of the master's research in Computer Science at the Federal University of São João del Rei, focused on independent underground music production and the use of open source technologies. The mainstream only exists because the underground created the scene.