Un plugin de audio en C++ ligero construido con el Framework JUCE que intercepta mensajes MIDI entrantes en tiempo real y modifica la velocidad (velocity) de las notas NoteOn mediante un control deslizante (slider) en la interfaz gráfica.
Este proyecto fue desarrollado como un ejercicio educativo para aprender los fundamentos de la arquitectura de plugins de audio, el procesamiento MIDI en tiempo real y la comunicación entre la interfaz de usuario y el hilo de procesamiento en JUCE.
- Procesamiento MIDI en tiempo real: Itara sobre un
juce::MidiBufferpara modificar la velocidad de los eventosNote Onen el momento. - Interfaz gráfica personalizada: Incluye un
juce::Slidervertical construido conjuce::AudioProcessorEditor. - Arquitectura orientada a eventos: Utiliza
juce::Slider::Listenerpara pasar de forma segura las interacciones del usuario hacia el hilo de procesamiento de audio. - Soporte multiformato: Genera objetivos tanto VST3 como Standalone (aplicación ejecutable independiente) para probar en DAWs (Reaper, Ableton, FL Studio, etc.) o como app autónoma.
- Lenguaje: C++17
- Framework: JUCE Framework (JUCE 8+)
- Sistema de compilación / IDE: Projucer / CMake / Microsoft Visual Studio (MSVC)
- Formatos objetivo: VST3, Aplicación Standalone
JUCE separa la lógica del plugin de audio en dos clases principales:
TutorialPluginAudioProcessor(PluginProcessor.h / .cpp)- Maneja el hilo de procesamiento de audio y MIDI (audio thread).
- Mantiene la variable pública
noteOnVel. - Sobrescribe
processBlock(): Crea un nuevojuce::MidiBuffer, recorre los metadatos entrantes, actualiza el valor de velocidad para las notas que coinciden conisNoteOn(), y reemplaza el búfer en la cadena de audio.
TutorialPluginAudioProcessorEditor(PluginEditor.h / .cpp)- Gestiona la interfaz gráfica de usuario (UI thread).
- Implementa
juce::Slider::Listenerpara observar los cambios en la barra verticalmidiVolume. - Actualiza la variable
audioProcessor.noteOnVeldentro de la función de respuesta (callback)sliderValueChanged()cada vez que el usuario mueve el slider.
-
Clona este repositorio:
git clone https://github.com/tu-usuario/TutorialPlugin.git cd TutorialPlugin -
Abre
TutorialPlugin.juceren Projucer. -
Verifica la ruta global de los módulos de JUCE (File > Global Paths).
-
Haz clic en Save Project and Open in IDE… (Visual Studio).
-
En Visual Studio:
- Selecciona el objetivo de compilación (
TutorialPlugin_StandaloneoTutorialPlugin_VST3). - Configura la solución en
DebugoRelease(x64). - Presiona
F5para ejecutar con depurador oCtrl + Shift + Bpara compilar.
- Selecciona el objetivo de compilación (
Durante el desarrollo de este plugin, puse en práctica:
- La distinción y separación de responsabilidades entre el Hilo de Audio (
AudioProcessor) y el Hilo de Interfaz (AudioProcessorEditor). - Iteración eficiente sobre búferes MIDI en tiempo real usando bucles basados en rangos (range-based loops) y metadatos de C++.
- Patrones de diseño basados en observadores/escuchadores (
juce::Slider::Listener). - Configuración, exportación y depuración de binarios VST3 y Standalone en Visual Studio.
Este proyecto es de código abierto y está disponible bajo la licencia MIT.