Cljs-Karaoke-Client
Um jogador de karaokê da web implementado no CloJurescript
Demonstração
Rolling Stones - por toda parte agora
Descrição
Minha tentativa de fazer um jogador decente de karaokê. Durante anos, tentei colocar minhas mãos em uma boa solução de karaokê de software com pouco sucesso, as principais alternativas que existem, como UltraStar, trastes em chamas, etc. ou montando uma lista de reprodução de vídeos de karaokê do YouTube.
Ambas as alternativas oferecem um amplo catálogo de músicas que você pode acessar livremente na Internet, mas com algumas desvantagens:
- Músicas disponíveis online para jogos como o UltraStar com mais frequência do que não usar a faixa de música original com vocais que, na minha opinião, matam a "experiência de karaokê"
- A sincronização das letras varia muito (algumas apenas renderizam versículos inteiros ao mesmo tempo, enquanto outros têm a letra sincronizada no nível da sílaba) ao usar vídeos de karaokê do YouTube.
A principal dificuldade foi obter letras com informações de sincronização, encontrei muitos arquivos MIDI na web, aparentemente usados para máquinas de karaokê. Esses arquivos contêm letras sincronizadas até o nível da sílaba. Como realmente não há padrão sobre como armazenar letras nos arquivos MIDI para máquinas de karaokê, muitas têm diferenças sutis na maneira como são armazenadas; portanto, ao analisar esses arquivos, fiz várias suposições brutas e extraí a letra para separar arquivos junto com os dados de tempo. A maioria está bem, mas muitos estão um pouco apagados por um deslocamento variável
O analisador MIDI está em um projeto separado: Clj-Karaoke.
Outra dificuldade foi obter a faixa de áudio da música, já que as letras são sincronizadas com a faixa de áudio MIDI, a coisa mais enraizada a fazer era usar isso. Inicialmente, pretendia usar os arquivos MIDI diretamente para as faixas de áudio, mas ao reproduzir o áudio, a qualidade dependia muito das fontes de som que você instalou e configurar um bom INV para resultados decentes não é uma tarefa trivial. Além disso, se eu quisesse reproduzir esses arquivos em um cliente da web, levar tudo isso em consideração apenas tornou as coisas mais complicadas. Então, eu decidi extrair a letra para separar arquivos e renderizar os arquivos MIDIS para MP3 usando timidez, o que é incrível e pude experimentar diferentes coleções de fontes sonoras.
Características
- Toneladas de músicas
- As imagens de fundo para músicas são buscadas dinamicamente na web após uma pesquisa no Google durante a música (se nenhuma estiver em cache)
- Cada usuário armazena em cache seus antecedentes locais e periodicamente empurra seus URLs para um db de Mongo, o Google Pesquisa personalizada tem um limite diário, então tento minimizar seu uso.
- Dados de inicialização (compensações de letras, imagens BG) melhoram durante as compilações consolidando dados de usuários
- Capacidade de sincronizar as letras por um deslocamento em milissegundos (do painel de controle ou anexando uma string de consulta ao URL)
- Lista de reprodução automática construída a partir de músicas sincronizadas anteriormente
- Exportar informações de sincronização de músicas locais para que possam ser mescladas aos dados de sincronização do lado do servidor
- Entrada de áudio experimental para desktop Firefox e Chrome com Echo/Reverb Sound FX (use um microfone externo para obter melhores resultados)
- Gravação experimental de webcam e exportação de vídeo para o arquivo WebM. O canal de áudio no vídeo exportado é o resultado de misturar a entrada do microfone com os efeitos e a faixa da música.
- Controle remoto. Execute o aplicativo em uma tela grande e controle a reprodução de uma instância de aplicativo diferente (por exemplo, do seu dispositivo móvel!)
- Crie páginas de músicas pré-RENDERS com tags de SEO para que você possa compartilhar links nas redes sociais como cartas bonitas com o nome da música e uma imagem, se disponível.
- Editor de letras para sincronizar novas faixas com letras.
- Selecione um arquivo de áudio
- Adicione texto, divida -o em sílabas (ou apenas pedaços aleatórios)
- Toque sua faixa e toque no botão "Sync" para cada peça
- Se você quiser mais precisão, pode desacelerar a pista diminuindo a taxa de reprodução
Trabalhando em
- Tamanhos dinâmicos de fontes, tamanhos de fonte já otimizados para títulos de músicas, mas estou procurando uma maneira de melhorar a exibição da letra também.
- Uma maneira de capturar compensações de letras personalizadas de todos os usuários, integrando -os como padrões em versões subsequentes
- A mesma coisa com os antecedentes da música, atualmente o Google Custom Search é usado para encontrar imagens relacionadas ao título da música, há uma cota para este serviço e é bastante baixo, menos precisamos pesquisar melhor.
Executando localmente
Pré -requisitos:
$ npm i -g shadow-cljs
$ npm install
$ shadow-cljs watch app
Se você deseja compilar uma versão de lançamento, poderá executar o seguinte:
$ shadow-cljs release app
A construção estará localizada no diretório /public .
Chaves de ligação
- "ESC": pare de reprodução
- "LR": Load Song
- "Alt-O": ative optons no modo de reprodução
- "Alt-H": Ativar modo de painel de controle
- "Esquerda": o áudio procure para trás
- áudio "certo" busca adiante
- "Meta-Shift-L": modo de loop (atualmente funcionando)
- "Alt-Shift-P": Jogue
- "Shift-Right": Próxima música na lista de reprodução
- "TT": tostado!
- "H": mostre Cheatsheet
Trabalho futuro
- Imagem de Raspberry Pi
- Editor de sincronização de letras