Introducción
TwitchMIDI es un bot para Twitch completamente configurable que te permite conectar tu equipo MIDI mientras haces directo. ¡Deja que tus espectadores sean parte de tus creaciones musicales!
🌟 Si quieres más... TwitchMIDI+ ofrece una detallada documentación, funciones extra y un panel de control, échale un vistazo en https://store.rafaelpernil.com/l/twitchmidiplus
Descarga
Última versión - TwitchMIDI para Windows, Linux & MacOS (x86-64)
Instalación
- Descomprime el .zip
- Ejecuta TwitchMIDI-yourplatform (e.g TwitchMIDI-win.exe)
- SIigue los pasos de configuración para enlazar este bot a tu cuenta. Verás algo así:
- Listo. A divertirse!
Nota: Para MacOS, abre una terminal, haz "cd" a la carpeta donde lo extraiste y ejecútalo desde ahí usando "./TwitchMIDI-macos". Sino, te saltará un error del estilo: "no such file or directory, open './config/aliases.json'"
Usando Node.js
Si prefieres usar esta aplicación con tu instalación de Node.js, siéntete libre de hacerlo.
Probado con Node.js 20 LTS y 22 LTS.
- Clona este proyecto o descárgalo.
- Ejecuta
npm install
. - Ejecuta
npm run build
. - Finalmente, para ejecutar, usa
npm run start
.
Actualización
Simplemente pon la nueva versión en la carpeta actual. TwitchMIDI configurará todo automáticamente y añadirá lo que falte.
¿Por qué TwitchMIDI?
Este proyecto surge de una idea para mis streams musicales en (twitch.tv/rafaelpernil) donde toco piano e improviso con mi sintetizador y caja de ritmos. Es muy divertido, pero quería aplicar mis habilidades de ingeniero de software para hacer algo especial y traer a mis viewers una forma divertida de interactuar con mis cacharros.
He tenido esta idea durante meses pero no fue hasta hace poco que empecé a definir objetivos tangibles y a implementarlos. Mi proyecto anterior, PolyVolcaWeb, que usa la API de Web MIDI me dio la confianza y claridad para embarcarme con esto :)
Mis objetivos eran:
- Crear un bot de Twitch y procesar comandos
- Crear un conjunto de funcionalidades MIDI como reloj MIDI con tempo regulable, progresiones de acordes sincronizadas, notas, loops, mensajes CC, macros...
- Unir comandos y funcionalidad MIDI
- Hacer que funcione rápido, se adapte a las necesidades de los streamers, y que sea estable y fácil de usar
Hasta ahora, esta versión cumple todo eso, sigue leyendo las funcionalidades para más detalle!
Funcionalidades
- Amplio abanico de funcionalidades MIDI:
- Reloj MIDI de alta precisión usando "nanotimer" con tempo regulable via !settempo
- Secuenciador en tiempo 4/4 con infinitas sub-divisiones (1 = Negra, 0.5 = Corchea, 0.25 = Semicorchea...)
- Lanza notas individuales, monta un acorde o manda una melodía separada por comas via !sendnote
- Lanza progresiones de acordes en búcle con longitud específica por acorde via !sendloop con una extensa lista de acordes de los que elegir. Mira CHORDS.md
- Elimina tu última petición de loop si cambias de opinión con !wrongloop
- Soporte para silencios usando "rest" como reemplazo para una nota o acorde en peticiones de !sendnote y !sendloop
- Support for multiple time signatures per request using "[X/Y]" !sendloop requests (e.g "[4/4] Dmin7 G7 C" or "[5/4] Dmin7(2) G7(3) [4/4] Dmaj7(2) Dbm7(2) Cmaj7(2) Bm7(2)")
- Mira la progresión de acordes sonando ahora mismo via !midicurrentrequest
- Mira la cola de peticiones de progresiones de acordes via !midirequestqueue
- Cambia el volumen (velocity) de las notas/acordes MIDI via !midivolume
- Manda mensajes CC (Control Change) y barridos entre valores via !sendcc
- Sincronizador de reloj y loop para re-sincronizar ritmo y música via !syncmidi
- Sincronización automática de loops que fuerza a que el loop espere al comienzo del compás
- Interruptor de encendido/apagado con !midion/!midioff
- Pausa las peticiones con !midipause y re-actívalas con !midiresume
- Expulsa usuarios con !midibanuser y readmítelos con !midiunbanuser
- Configura un tiempo de espera entre peticiones por usuario con !miditimeout
- Aliases configurables en config/aliases.json
- Comandos - Añade tantos alias para comandos como quieras
- Macros - Lanza un conjunto de acciones con un solo comando
- Progresiones de acordes/Loops - Añade un alias para una progresión de acordes o loop usando la sintaxis "nombre/acordes"
- Añade progresiones de acordes via !addchord
- Borra progresiones de acordes via !removechord
- Lista todas las progresiones de acordes añadidas via !chordlist
- Nombres de controlador Control Change- Ponle nombre a tus controladores Control Change (e.g sustain: 64)
- Comandos Control Change - Asigna un conjunto de comandos CC
- Funcionalidad de barrido, specify two values and the time in milliseconds to get from one value to other (e.g "cutoff 20(5000),cutoff 120(10000)")
- Lista todas las macros de mensajes CC añadidas via !cclist
- Recarga los archivos config/aliases.json, config/permissions.json y config/rewards.json mientras usas el bot con !fetchdb
- Explicaciones de los comandos con ejemplos via !midihelp nombreDelComando
- Control de acceso detallado con comprobación de roles, lista blanca y lista negra en config/permissions.json
- Modo Recompensas del Canal activado mediante el flag REWARDS_MODE y configurable en config/rewards.json
- Pon el nombre de tu recompensa, el comando a lanzar y el precio (e.g. "Twitch Midi - Loop": ["!sendloop",100] )
- Activación/Desactivación automática de las recompensas via !midion/!midioff
- Devolución de puntos automática en peticiones fallidas o cualquier tipo de error en petición
- Los comandos solo funcionan para streamer y moderadores en este modo
- Permitir que los VIP usen comandos sin canjear recompensas mediante el flag VIP_REWARDS_MODE
- Ejecutable optimizado para diferentes sistemas operativos y sin dependencias externas
- API HTTP para interactuar con el bot por detrás con una interfaz alternativa (como TwitchMIDI+ Control Panel)
- Internacionalización completa en Inglés y Español (por ahora)
- Comprobación de actualizaciones al arranque, un mensaje aparece si hay una versión nueva disponible
- Verificación y corrección automática de ficheros de configuración . Se asegura de que todos los ajustes sean correctos manteniendo los buenos.
Comandos
!midihelp
Muestra todos los comandos disponibles e info sobre cada comando
Sintaxis:
command // (e.g "sendloop")
!midion
Arranca la funcionalidad MIDI del bot
!midioff
Detiene la funcionalidad MIDI del bot
!midipause
Pausa las peticiones pero sigue reproduciendo lo que ya estaba sonando
!midiresume
Reactiva las peticiones después de que fueran pausadas con !midipause
!addchord
Añade una progresión de acordes o búcle con un alias a config/aliases.json.
Sintaxis:
name/chords(chord length in quarter notes) // (e.g. "pop/C G(2) Amin(2) F")
!removechord
Elimina una progresión de acordes o búcle de config/aliases.json.
Sintaxis:
alias // (e.g. "pop")
!chordlist
Muestra todas las progresiones de acordes o loops de config/aliases.json que pueden ser usados
!sendnote
Manda una nota o un conjunto de notas
Sintaxis:
note1 note2 ... // (e.g. "C4 E4 G4")
!sendloop
Manda una progresión de acordes con un alias o con acordes. Esta petición se repite infinitamente si la cola está vacía.
Sintaxis:
chord1 chord2(chord length in quarter notes)... // (e.g. "C G Amin F","pop")
!wrongloop
Elimina tu última petición de la cola de loops
!sendcc
Manda un mensaje MIDI CC con un alias, código o barrido de valores.
Sintaxis:
controller value,controller2 value2(delay_in_ms) // (e.g. "43 100,43 60", "cutoff sweep", "cutoff 100,cutoff 10(10000)")
!midicurrentrequest
Muestra la petición que está sonando ahora mismo.
!midirequestqueue
Muestra la cola de peticiones para progresiones de acordes y búcles
!cclist
Muestra una lista de macros de comandos MIDI CC de config/aliases.json
!midivolume
Configura el volumen (MIDI velocity) para los acordes/notas/loops.
Sintaxis:
value between 0 and 100 // (e.g. "50","100")
!stoploop
Para el loop en cuanto acabe
!fullstopmidi
Para todos los mensajes MIDI y sonido
!settempo
Arranca el reloj MIDI y configura un tempo
Sintaxis:
tempo // (e.g. "120", "200")
!syncmidi
Reinicia el reloj MIDI y sincroniza el búcle y el reloj en la sigueinte repetición
!fetchdb
Refesca la configuración de aliases, recompensas y permisos de los archivos respectivos.
!midibanuser
Bloquea el acceso a comandos y recompensas TwitchMIDI a un usuario determinado.
Sintaxis:
!midibanuser username
!midiunbanuser
Desbloquea el acceso a comandos y recompensas TwitchMIDI a un usuario previamente bloqueado.
Sintaxis:
!midiunbanuser username
!miditimeout
Configura un tiempo de espera entre peticiones por usuario
Sintaxis:
!miditimeout timeinseconds // (e.g. 20)
Resolución de Problemas
Pregunta: Recibo errores de autenticación cada vez que abro la app. ¿Qué puedo hacer?
Respuesta:
Elimina
bot-tokens.json
ybroadcaster-tokens.json
de tu carpetaconfig
. Si eso no funciona, borra BROADCASTER_REFRESH_TOKEN, BROADCASTER_ACCESS_TOKEN, BOT_REFRESH_TOKEN y BOT_ACCESS_TOKEN de tu archivo.env
y lanza la aplicación de nuevo para volver a configurarlo.
Pregunta: Mis recompensas del canal de Twitch no cargan correctamente. ¿Qué ocurre?
Respuesta:
Si has cambiado tu client ID o actualizado de una versión vieja, las recompensas puede que no carguen. Para arreglarlo, ve a Channel Points, haz click en "Manage Rewards", baja hasta el final de la página y borra todas las recompensas de TwitchMIDI (por defecto empiezan por
MIDI - something
)
Pregunta: La app dice que hay una instancia de TwitchMIDI corriendo
Respuesta:
Se genera un archivo
.lock
cuando se lanza TwitchMIDI y se borra cuando se cierra, incluso con errores de tiempo de ejecución y excepciones. Pero, por desgracia, el archivo no se borra si apagas Windows con TwitchMIDI abierto. Primero, asegúrate de que no haya ninguna instancia de TwitchMIDI corriendo. Si no es el caso, simplemente borra el archivo.lock
.
Acordes
Este programa usa harmonics de scribbletune para convertir la notación de acordes a notas MIDI.
Pero, añadido a los proporcionados por harmonics, he incluído algunos extra para una sintaxis más cómoda
Mira CHORDS.md para una lista completa