x1biu
Batalha 1 contra 1 de assobios: o microfone capta o pitch e o servidor pontua a afinação em tempo real por WebSocket.

Sobre o projeto
Um projeto declaradamente inútil: dois jogadores entram na fila, são pareados, a mesma música toca para os dois e cada um assobia acompanhando a melodia. Quem assobiar mais afinado vence e sobe no ranking.
O navegador capta o microfone com a Web Audio API e encontra a frequência do assobio por autocorrelação, sem bibliotecas. Cada frame vai por WebSocket para o Django Channels, que compara com a referência da música em cents, normalizando a oitava, e devolve a pontuação dos dois jogadores ao vivo.
O pareamento roda numa tarefa periódica do Celery Beat, e o histórico de pitch de cada partida fica salvo para desenhar o gráfico depois.
Leia o artigo: HzO que foi entregue
- Detecção de pitch no navegador por autocorrelação, com portão de silêncio e faixa de assobio
- Pontuação em cents com normalização de oitava
- Partidas em tempo real com Django Channels e WebSocket
- Fila e pareamento com Celery Beat e Redis
- Ranking global e histórico de partidas com gráfico de pitch
Como funciona
- Web Audio API
- Autocorrelação
- Next.js
- WebSocket
- Django Channels
- Django + DRF
- Pontuação em cents
- Celery Beat
- PostgreSQL
- Redis