Saltar al contenido principal

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!

Twitch MIDI Demo

🌟 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.

  1. Clona este proyecto o descárgalo.
  2. Ejecuta npm install.
  3. Ejecuta npm run build.
  4. 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 y broadcaster-tokens.json de tu carpeta config. 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) Twitch Channel Point Rewards


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