No description
https://midi.opentty.fun
- Python 42.6%
- JavaScript 35.6%
- CSS 15%
- HTML 6%
- Dockerfile 0.8%
| static | ||
| templates | ||
| .dockerignore | ||
| .gitignore | ||
| account_api.py | ||
| app.py | ||
| auth_api.py | ||
| auth_security.py | ||
| config.py | ||
| Dockerfile | ||
| extensions.py | ||
| models.py | ||
| music.py | ||
| prediction.py | ||
| README.md | ||
| requirements.txt | ||
| rooms_api.py | ||
| sockets.py | ||
🎹 WebMIDI Stage
Plataforma de "palcos" ao vivo: um músico conecta o teclado MIDI e lidera a sala; os espectadores veem notas, acordes, tom da música e um mini teclado em tempo real — com Modo Bass e detecção de progressão de acordes.
Funcionalidades
- Login/Registro com JWT — sessão válida por 24 horas (apenas usuário e senha)
- Salas de palco: crie salas, entre e assista
- Salas privadas: ao criar, defina senha de entrada, sala oculta (visível só para você na lista) e limite de membros
- Fechar sala: o criador pode encerrar a sala a qualquer momento — todos os ocupantes são desconectados e avisados
- Painel da conta (⚙️): troque a senha ou apague a conta permanentemente (fecha suas salas)
- Líder do palco: conecta o teclado MIDI (Web MIDI API) e transmite as notas
- Espectadores veem: notas ao vivo, acorde atual (com inversões
C/E, extensões9,11,13,add9…), tom da música (detectado automaticamente) e o grau romano do acorde no tom (I,IV,V7,vi7…) - Mini teclado na tela mostrando as teclas pressionadas
- Modo Bass: destaca apenas a tônica do acorde para sentir a progressão
- Notificação de progressão: detecta ciclos repetidos (ex.:
C → G → Am → F) e avisa na tela - Predição do próximo acorde: painel com top-3 sugestões (nome + grau romano + %), combinando teoria harmônica, progressões comuns, estatística da sessão atual e padrões acumulados no banco — com métricas reais de acerto (top-1/top-3) da sala
Requisitos
- Python 3.10+
- Navegador com Web MIDI API (Chrome/Edge) para o líder tocar
- Um teclado MIDI USB (opcional — só quem for liderar precisa)
Como rodar
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
export SECRET_KEY="troque-por-um-segredo-forte"
python app.py
Acesse http://localhost:5000.
Em Linux, adicione seu usuário ao grupo de áudio/MIDI se necessário. Para HTTPS (requisito da Web MIDI API fora do
localhost), use um proxy reverso com TLS.
Uso
- Registre-se (usuário + senha) e faça login
- Clique em + Criar sala: escolha nome e, opcionalmente, senha de entrada, limite de membros e sala oculta — ou entre em uma sala existente da lista
- O músico clica em 🎤 Liderar palco e autoriza o acesso MIDI
- Quem assiste vê notas/acordes/tom em tempo real
- Assista com 🎸 Modo Bass ativado para focar nas tônicas e receber as progressões
- O criador pode ✕ Fechar sala para encerrar; a conta é gerenciada no ícone ⚙️
Arquitetura
| Camada | Tecnologia |
|---|---|
| Servidor | Flask + Flask-SocketIO |
| Tempo real | WebSocket (Socket.IO) |
| Persistência | SQLite via SQLAlchemy |
| Auth | JWT (PyJWT), hash Werkzeug |
| Frontend | HTML/CSS/JS puro + Web MIDI API |
Endpoints REST
POST /api/auth/register·POST /api/auth/login·GET /api/auth/me·POST /api/auth/logoutPOST /api/account/password(troca de senha) ·DELETE /api/account(apaga a conta)GET/POST /api/rooms·DELETE /api/rooms/<id>(só o criador)
Eventos WebSocket
- Cliente → servidor:
join_room,leave_room,claim_leader,release_leader,note_on,note_off,sustain - Servidor → clientes:
stage_leader,presence,harmony(acorde + tom + grau romano),progression,prediction(sugestões de próximo acorde + métricas de acerto),room_closed,reset