CLJS-Karaoke-Client
Un reproductor de karaoke web implementado en Clojurescript
Manifestación
Rolling Stones, todo ahora
Descripción
Mi intento de hacer un jugador de karaoke decente. Durante años he tratado de tener en mis manos una buena solución de karaoke de software con poco éxito, las principales alternativas son juegos como UltraStar, trastes en llamas, etc. o unir una lista de reproducción de videos de Karaoke de YouTube.
Ambas alternativas ofrecen un amplio catálogo de canciones que puede acceder libremente a través de Internet, pero con algunas desventajas:
- Canciones disponibles en línea para juegos como UltraStar con mayor frecuencia que no usan la canción de la canción original con voces que, en mi opinión, matan la "experiencia de karaoke"
- La sincronización de las letras varía mucho (algunos solo rinden versos enteros a la vez, mientras que otras se sincronizan las letras en el nivel de la sílaba) cuando usan videos de karaoke de YouTube.
La principal dificultad era obtener letras con información de sincronización, encontré muchos archivos MIDI en la web, aparentemente utilizados para las máquinas de karaoke. Estos archivos contienen letras sincronizadas hasta el nivel de la sílaba. Dado que realmente no hay estándar sobre cómo almacenar letras en archivos MIDI para máquinas de karaoke, muchos tienen diferencias sutiles en la forma en que se almacenan, por lo que al analizar estos archivos hice un montón de supuestos brutos y extraí las letras para separar los archivos junto con los datos de tiempo. La mayoría están bien, pero muchos están un poco apagados por un desplazamiento variable
El analizador MIDI está en un proyecto separado: CLJ-Karaoke.
Otra dificultad fue obtener la canción de audio de la canción, ya que las letras se sincronizan con la pista de audio MIDI, lo más sana era usar eso. Inicialmente tenía la intención de usar los archivos MIDI directamente para las pistas de audio, pero al reproducir el audio, la calidad dependía en gran medida de las fuentes de sonido que ha instalado y configurando un buen env para obtener resultados decentes no es una tarea trivial. Además, si quería reproducir estos archivos en un cliente web, tener todo esto en cuenta solo hizo que las cosas sean más complicadas. Así que me conformé con la extracción de la letra a archivos separados y la entrega de archivos MIDIS a MP3 usando timidez, que es bastante impresionante y pude experimentar con diferentes colecciones de fuentes de sonido.
Características
- Toneladas de canciones
- Las imágenes de fondo para canciones se obtienen dinámicamente desde la web después de una búsqueda en Google durante la carga de la canción (si ninguna se almacena en caché)
- Cada usuario almacena en caché sus fondos locales y empuja periódicamente sus URL a un DB Mongo, Google Custom Search tiene un límite diario, por lo que trato de minimizar su uso.
- Los datos de inicialización (compensaciones de letras, imágenes BG) mejoran durante las compilaciones consolidando datos de los usuarios
- Capacidad para sincronizar letras por un desplazamiento en milisegundos (ya sea desde el panel de control o al agregar una cadena de consulta a la URL)
- Lista de reproducción automática construida a partir de canciones previamente sincronizadas
- Exportar información de sincronización de canciones locales para que pueda fusionarse con los datos de sincronización del lado del servidor
- Entrada de audio experimental para Desktop Firefox y Chrome con Live Echo/Reverb Sound FX (use un micrófono externo para obtener los mejores resultados)
- Grabación de cámara web experimental y exportación de videos al archivo Webm. El canal de audio en el video exportado es el resultado de mezclar la entrada de micrófono con efectos y la canción de la canción.
- Mando a distancia. Ejecute la aplicación en una pantalla grande y controle la reproducción desde una instancia de aplicación diferente (¡por ejemplo, desde su dispositivo móvil!)
- Construya páginas de canciones previas a los renders con etiquetas SEO para que pueda compartir enlaces en las redes sociales como tarjetas de aspecto bonito con nombre de canción y una imagen si está disponible.
- Editor de letras para sincronizar nuevas pistas con letras.
- Seleccione un archivo de audio
- Agregue texto, divídalo en sílabas (o simplemente trozos aleatorios)
- Reproduzca su pista y toque el botón "Sync" para cada pieza
- Si desea más precisión, puede reducir la velocidad de la pista que disminuye la tasa de reproducción
Trabajar en
- Tamaños de fuentes dinámicos, tamaños de fuentes ya optimizados para títulos de canciones, pero también estoy buscando una manera de mejorar la pantalla de las letras.
- Una forma de capturar letras personalizadas de todos los usuarios, integrandolas como valores predeterminados en versiones posteriores
- Lo mismo con los fondos de canciones, actualmente Google Custom Search se usa para encontrar imágenes relacionadas con el título de la canción, hay una cuota para este servicio y es bastante bajo, menos necesitamos buscar, mejor.
Ejecutando localmente
Prerrequisitos:
$ npm i -g shadow-cljs
$ npm install
$ shadow-cljs watch app
Si desea compilar una compilación de lanzamiento, puede ejecutar lo siguiente:
$ shadow-cljs release app
La construcción se ubicará en el directorio /public .
Enlaces de llave
- "ESC": Playback de parada
- "LR": Canción de carga
- "Alt-O": Habilitar Optons en modo de reproducción
- "Alt-H": habilitar el modo del panel de control
- "Izquierda": Audio Busque al revés
- Audio "correcto" busque adelante
- "Meta-Shift-L": modo de bucle (ahora actualmente funciona)
- "Alt-Shift-P": Play
- "Shift-Right": Siguiente canción en la lista de reproducción
- "TT": ¡tostado!
- "H": Mostrar hoja de trucos
Trabajo futuro
- Imagen de frambuesa pi
- Editor de sincronización de letras