[Pitch] Piano Hero - Um Guitar Hero de piano

Sobre

O Piano Hero é um jogo de ritmo, no estilo de Guitar Hero, mas voltado para o Piano. Nele, as teclas vão aparecendo e você deve apertar no tempo certo.

Motivação

Eu tenho tentado aprender a tocar piano sozinho há alguns meses, e recentemente tive que emprestar meu piano e fiquei sem ele. Como estava procurando um projeto pessoal para começar, tive a ideia de fazer um piano online. Essa parte foi rápida, então logo tive a ideia de tranformar em um jogo (sempre fui muito fã de guitar hero), e assim comecei a desenvolver.

Estado Atual

Atualmente estou testando algumas formas de detectar as notas certas e o sistema de pontuação. A primeira implementação que fiz foi utilizando setTimeouts para syncar com o tempo da nota, mas não achei uma abordagem muito boa e fui procurar outras. No momento estou testando uma implementação com o Fabric.Js (uma lib de manipulação de Canvas), para detectar as colisões de notas e checar se foram clicadas na hora certa.

Ideias futuras

Meu plano final do projeto envolve os seguintes itens:

  • Finalziar a mecânica de gameplay (checagens de notas erradas e certas)
  • Adicionar manualmente uma música default, criando sua sequência de notas
  • Desenvolver alguma forma de gerar a sequência musical baseada em uploads de .mp3 (seja do usuário ou eu, como adminstrador), utilizando IA para gerar as sequências de notas
  • Desenvolver um ranking para salvar os melhores scores nas músicas para mostrar para todos os melhores jogadores naquela música
  • Desenvolver um sistema de desafios entre amigos

Github e Acesso ao site

No momento, projeto está hospedado em: https://kozi-piano-hero.vercel.app/

O repositório do projeto pode ser encontrado em: https://github.com/KozielGPC/piano-hero

Aceito sugestões, dúvidas, críticas, feedbacks e colaborações com o projeto!

Simplesmente sensacional o projeto! Minha mãe é professora de música e toca piano, sempre quis colocar um projeto assim em prática. Com certeza gostarei de estar contribuindo no futuro!

Sobre sugestões, algumas funcionalidades incríveis seriam:

  • Importação de arquivo para o gerar as notas e timings das notas que precisam ser tocadas (acredito que seria mais fácil a transcrição por meio de arquivos MIDI, mas me falta conhecimento sobre o formato pra poder elaborar a ideia);
  • Mapeamento de input para acessibilidade (também possibilita alguém de utilizar um teclado real para jogar).

Enfim, parabéns pelo projeto! 🎉

Obrigado pelo comentario! Sobre a transcrição, eu cheguei a dar uma olhada sobre os arquivos MIDI, mas confesso que não entendi muito bem e não sei como poderia usar, mas está nos meus planos estudar sobre eles pra ver se é possível usar pra esse caso. Curti bastante a ideia do mapeamento, bastante mesmo, valeu! Não cheguei a ver sobre, mas da pra fazer esse mapeamento direto tipo "tecla D" = "nota Dó" com algum software ou algo tipo? A única coisa que vi parecida foi mapear teclas do teclado do computador para botões de um controle de videogame. Valeu pelos elogios, sinta-se a vontade para colaborar com ele!
Fiquei curioso se já existia alguma aplicação que fazia a leitura por meio do arquivo MIDI e ei uma pesquisada, encontrei esse APP: https://play.google.com/store/apps/details?id=com.rubycell.pianisthd A leitura por meio do MP3 fica muito mais "user-friendly", mas imagino que daria mais trabalho Sobre o mapeamento de teclas, a ideia seria "escutar" pelo input do usuário e associar o botão que ele pressionou à tecla do teclado. Dessa forma, se o usuário tiver um dispositivo ligado ao computador (como um teclado musical, ou outro aparelho relacionado à acessibilidade), é possível configurar manualmente quais os botões pra cada tecla, já que o computador sempre vai relacionar uma tecla/botão à um código/número, etc.
Eu tinha achado umas libs em JS que faziam a conversão de MP3 pra MIDI, acho q vou dar uma olhada melhor nelas e tentar seguir com esse caminho pra gerar as músicas, valeu pelas dicas! Que legal esse negócio do mapeamento, não conhecia não. Acho que até eu vou acabar usando quando pegar meu piano de volta kkkkk

Muito legal seu projeto.

Valeu @samukarb!