Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Networked AI Improviser

A cross-platform JUCE-based improvisation plugin for macOS, Windows, and Linux that learns from incoming MIDI in real time and generates improvised MIDI output. It can run as a plugin inside a DAW or as a standalone application, and now extends the original project with networked MIDI workflows and SL Link hardware integration.

🚀 Quick Start

git clone https://github.com/gregogiudici/Networked_AI_Improviser.git
cd Networked_AI_Improviser
git submodule update --init --recursive
cmake -B build
cmake --build build

NOTE: Build for Linux

To compile for Linux, make sure you have all the dependencies required to build JUCE.

If you are lazy:

sudo apt update
# For JUCE
sudo apt install libasound2-dev libjack-jackd2-dev \
    ladspa-sdk \
    libcurl4-openssl-dev  \
    libfreetype-dev libfontconfig1-dev \
    libx11-dev libxcomposite-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libxrender-dev \
    libwebkit2gtk-4.1-dev \
    libglu1-mesa-dev mesa-common-dev
# For dns-sd
sudo apt-get install libavahi-compat-libdnssd-dev

Overview

The original plugin by Matthew Yee-King is an interactive MIDI improviser: send it MIDI input, let it learn from your performance in real time, and route its MIDI output to a synthesizer or another instrument so it can improvise alongside you.

This fork expands that concept with:

  • Network MIDI 2.0 support for local, remote, and hybrid performance setups.
  • SL Link integration for hardware control and display interaction from compatible keyboards.

This makes this new application suitable not only as a creative DAW plugin, but also as a network-aware improvisation engine for distributed and hardware-assisted performance workflows.

Features

  • Real-time MIDI learning and improvisation.
  • MIDI plugin and standalone application targets.
  • MIDI output routing to external synthesizers, virtual instruments, or other MIDI-capable software.
  • Network MIDI 2.0 support for discovering remote endpoints and exchanging MIDI over the local network.
  • SL Link integration for direct interaction from SL mk2 controllers.

Network MIDI 2.0

Network MIDI 2.0 adds network transport to the improviser so MIDI data can move beyond the local host. This enables the app to communicate with remote MIDI 2.0 endpoints, exchange Universal MIDI Packets (UMP), and participate in distributed performance setups.

This can support workflows such as:

  • Sending generated improvised MIDI to a remote endpoint.
  • Receiving remote MIDI input as training material for the improvisation model.
  • Combining local and remote MIDI streams in the same session.
  • Discovering compatible MIDI 2.0 services on the local network.

SL Link

SL Link integration is intended for FATAR/Studiologic SL mk2 MIDI keyboards. It provides a path for controlling parts of the application directly from the keyboard hardware, including service discovery and network connection handling, while the hardware can also be used for display updates, LED feedback, and other controller-driven interactions.

This is especially useful for embedded, headless, or performance-oriented setups where reducing GUI dependence is desirable.

Use Cases

  1. DAW improvisation plugin
    Play MIDI into the plugin from a keyboard, MIDI clip, or sequencer, and route the plugin's MIDI output to a synth so it can improvise in context.

  2. Standalone improviser
    Run the app outside a DAW and use it as a live MIDI improvisation engine connected to local instruments or virtual ports.

  3. Networked improvisation node
    Use Network MIDI 2.0 to exchange input or generated output with remote devices on the same network.

  4. Hybrid local + remote setup
    Combine local MIDI input, local synthesis, and remote MIDI routing in a single performance workflow.

  5. Hardware-assisted control
    Use a supported SL keyboard to access core functions through SL Link without relying entirely on the on-screen interface.

Acknowledgements

About

JUCE plugin that learns from an incoming MIDI stream and improvises with what it has learnt. The generated output can be forwarded to a remote Network MIDI endpoint

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages