No description https://midi.opentty.fun
  • Python 42.6%
  • JavaScript 35.6%
  • CSS 15%
  • HTML 6%
  • Dockerfile 0.8%
Find a file
2026-09-22 09:20:57 -03:00
static feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
templates feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
.dockerignore Dockerfile com gunicorn+gevent e async mode configurável 2026-08-24 20:19:38 -03:00
.gitignore WebMIDI Stage: palcos ao vivo com teclado MIDI via WebSocket 2026-08-24 19:42:56 -03:00
account_api.py feat: remove gravações 2026-08-30 15:28:07 -03:00
app.py feat: remove gravações 2026-08-30 15:28:07 -03:00
auth_api.py fix: corrige login com hash scrypt incompativel e exibe nota unica em vermelho 2026-08-25 19:06:42 -03:00
auth_security.py fix: corrige login com hash scrypt incompativel e exibe nota unica em vermelho 2026-08-25 19:06:42 -03:00
config.py fix: corrige login com hash scrypt incompativel e exibe nota unica em vermelho 2026-08-25 19:06:42 -03:00
Dockerfile fix: remove USER appuser e garante /data acessivel no container 2026-08-25 19:51:36 -03:00
extensions.py WebMIDI Stage: palcos ao vivo com teclado MIDI via WebSocket 2026-08-24 19:42:56 -03:00
models.py feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
music.py feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
prediction.py feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
README.md feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00
requirements.txt WebMIDI Stage: palcos ao vivo com teclado MIDI via WebSocket 2026-08-24 19:42:56 -03:00
rooms_api.py feat: remove gravações 2026-08-30 15:28:07 -03:00
sockets.py feat: predição do próximo acorde (harmonia funcional + corpus + Markov) com aprendizado persistido no banco e métricas de acerto 2026-09-22 09:20:57 -03:00

🎹 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ões 9, 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

  1. Registre-se (usuário + senha) e faça login
  2. 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
  3. O músico clica em 🎤 Liderar palco e autoriza o acesso MIDI
  4. Quem assiste vê notas/acordes/tom em tempo real
  5. Assista com 🎸 Modo Bass ativado para focar nas tônicas e receber as progressões
  6. 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/logout
  • POST /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