A SoundFont Player enhanced with network capabilities through Network MIDI 2.0 and extended hardware integration through SL Link. It can run as a standalone instrument or plugin (VST3/AU) inside a DAW, while also enabling new local, remote, and hybrid MIDI workflows.
git clone https://github.com/gregogiudici/Networked_SoundFont_Player/
cd Networked_SoundFont_Player
git submodule update --init --recursive
cmake -B build
cmake --build buildTo 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- Local SoundFont playback engine.
- MIDI input from local devices.
- MIDI input from remote devices into the local SoundFont engine over Network MIDI 2.0.
- MIDI output to remote devices over Network MIDI 2.0.
- Discovery of MIDI 2.0 endpoints over the local network.
- Direct control from a SL mk2 over core app functions such as service discovery, sound management, and network connection handling.
Network MIDI 2.0 is the transport layer that enables this application to discover remote MIDI 2.0 endpoints and exchange MIDI data over a local network. It is based on the MIDI Association's Network MIDI 2.0 (UDP) specification, which defines a standard transport for both MIDI 1.0 and MIDI 2.0 messages using Universal MIDI Packets (UMP).
This app manages it to route MIDI messages from a local controller to a remote endpoint, receive remote MIDI into the local SoundFont engine, or combine both approaches in hybrid workflows.
SL Link is used to integrate this app with FATAR SL mk2 MIDI keyboards. It provides communication, connection management, and display interaction between the keyboard and the remote device, allowing the app to expose its functionality directly on the hardware interface.
SL Link makes it possible to control this application without relying on the GUI. Functions such as service discovery, sound management, and network connection handling can be accessed directly from the SL keyboard, while its hardware can also be used for display updates, LED feedback, and other controller-driven interactions.
-
Local software instrument
- A MIDI keyboard connected to the local computer can trigger a SoundFont instrument loaded in the app.
- Audio is rendered locally using FluidLite.
-
Network MIDI bridge
- The same local MIDI input can be forwarded to a remote device over the network using Network MIDI 2.0.
- This makes it possible to play an external synth, another computer, or any compatible remote endpoint.
-
Remote-to-local playback
- A remote endpoint can send MIDI over the network to this application.
- Incoming remote MIDI is rendered by the local SoundFont player, effectively turning this app into a network-playable software synth.
-
Hybrid local + remote performance
- The same performance can drive the local SoundFont engine and a remote Network MIDI 2.0 endpoint at the same time.
- This is useful for layered setups, local monitoring, or combining software and hardware instruments in one workflow.
-
Headless instrument on embedded hardware
- The app can be deployed on a device (e.g., a Raspberry Pi) and used without a dedicated screen.
- With a supported SL Mk2 connected, the keyboard can act as the main user interface for browsing functions and controlling the system through SL Link.
- FluidLite for lightweight SoundFont synthesis.
- NetUMP (forked from bbouchez) for Network MIDI 2.0 communication.
- jucey_bonjour (forked from Anthony-Nicholls) for Network Service Discovery.
- fatar_sl_link for SL Link integration.
- JUCE for audio, MIDI, and cross-platform application infrastructure.