147 lines
6.9 KiB
Markdown
Executable File
147 lines
6.9 KiB
Markdown
Executable File
# 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. |