Go to file
2018-06-17 13:58:19 +01:00
Builds removed unused License project. moved macOS dependency licenses into macOS project. 2018-06-17 13:58:19 +01:00
include we build against same headers, so include should be sibling of source. reconfigure project to use new include dir, remove multiprocessor compile (prevented compilation of PluginEditor, Pluginprocessor), removed references to files that no longer exist, add reference to filepickerfragment.h 2018-06-14 00:40:17 +01:00
JuceLibraryCode fix macOS build (following Projucer changes made in Windows, which removed /Applications/JUCE/modules from its headers). move JUCE headers under source control, so that Windows and macOS can both build against same version of JUCE. remove AUv3 target (I think it's an iOS thing, so it will never work with this macOS fluidsynth dylib). 2018-06-17 13:34:53 +01:00
modules fix macOS build (following Projucer changes made in Windows, which removed /Applications/JUCE/modules from its headers). move JUCE headers under source control, so that Windows and macOS can both build against same version of JUCE. remove AUv3 target (I think it's an iOS thing, so it will never work with this macOS fluidsynth dylib). 2018-06-17 13:34:53 +01:00
Source fix another not-include 2018-06-14 00:47:06 +01:00
build-windows.md another tip 2018-06-15 18:32:55 +01:00
Juicy.png this is what we're about 2018-03-05 23:14:22 +00:00
juicysfplugin.jucer fix macOS build (following Projucer changes made in Windows, which removed /Applications/JUCE/modules from its headers). move JUCE headers under source control, so that Windows and macOS can both build against same version of JUCE. remove AUv3 target (I think it's an iOS thing, so it will never work with this macOS fluidsynth dylib). 2018-06-17 13:34:53 +01:00
LICENSE.txt rename license filename. include dependency licenses in distribution. 2018-05-12 17:08:10 +01:00
README.md simplify README now that linking, bundling, releasing is simpler 2018-06-10 00:41:12 +01:00
test test GPG 2018-06-13 17:14:27 +01:00

image

Latest release: https://github.com/Birch-san/juicysfplugin/releases

Demo track: mp3, FLAC, FLAC +Soundgoodizer

What

juicysfplugin is a macOS audio plugin for playing MIDI music through a soundfont synthesizer.

It's well-suited for making videogame music. If you have a soundfont of your favourite game, you can write your own melodies with its instruments.

JUCE is the framework for making audio plugins.
fluidsynth is the soundfont synthesizer.

Supports SF2 and SF3 soundfont formats.

Mode 1: standalone application

juicysfplugin.app is a standalone application, for playing around.

You can plugin your hardware MIDI keyboard, or play with the software MIDI keyboard. Or route MIDI messages into it from a virtual MIDI controller (e.g. the macOS IAC Bus).

Mode 2: audio plugin

juicysfplugin audio plugins are provided: VST, VST3, AU, AUv3.
This means you can host it inside your DAW (e.g. GarageBand, FL Studio Mac, Sibelius…) to record the sounds you make.

Why

I couldn't find a free, easy-to-use macOS audio plugin for making music with soundfonts.

Install

Latest release: https://github.com/Birch-san/juicysfplugin/releases

Download Release.tar.xz, open it to unzip.

Release contains:

juicysfplugin.app  # standalone application, for playing around
juicysfplugin.component  # AU plugin
juicysfplugin.vst  # VST plugin
juicysfplugin.vst3  # VST3 plugin

To install plugins, move them to the following folder:

juicysfplugin.component -> ~/Library/Audio/Plug-Ins/Components/juicysfplugin.component
juicysfplugin.vst -> ~/Library/Audio/Plug-Ins/VST/juicysfplugin.vst
juicysfplugin.vst3 -> ~/Library/Audio/Plug-Ins/VST3/juicysfplugin.vst3

Launch

Now, you may do one of the following:

  • Open the standalone juicysfplugin.app
  • Load the AU/VST/VST3 into your favourite DAW (e.g. GarageBand, FL Studio)

Usage

You must drag-and-drop a soundfont into the file picker.

image

Here's some soundfonts to get you started:

I'll refrain from recommending certain General MIDI or videogame soundfonts, since the licensing and provenance are often unclear.

Keybindings

Gain keyboard focus by clicking the plugin's keyboard.

  • Up-down arrow keys to switch preset.
  • Left-right to switch bank.

ASCII -> MIDI keybinding is the same as FL Studio's:

image

Using the standalone .app

Generally the .app will Just Work™, but if your audio setup is more bespoke, then you'll need to configure.
Ignore the yellow warning about feedback. There is no feedback loop (because no audio is input).

Options > Audio/MIDI settings

image

Set Output to Built-In Output

Or any output device that you can hear audio through.

Input audio device doesn't matter. We only use MIDI as input.

image

Building from source

Install XCode and XCode command line tools. Accept terms.

Install JUCE 5.3 in /Applications.
We expect to find JUCE headers in /Applications/JUCE/modules.

(Optional) To target VST3, install Steinberg VST3 Audio Plug-Ins SDK.
We expect to find a folder ~/SDKs/VST_SDK/VST3_SDK.

(Optional) Install IntelliJ AppCode if you prefer it to XCode.

Open juicysfplugin/Builds/MacOSX/juicysfplugin.xcodeproj in XCode (or IntelliJ AppCode).

Build & run the "juicysfplugin - Standalone Plugin" target.

All the libs we link against are project-local (see juicysfplugin/Builds/MacOSX/lib_relinked).
I have used install_name_tool to give these libs relative install names. This ensures that any product you build will be portable.

Testing VST/AU plugins inside an audio plugin host

You'll notice that the schemes for [VST, VST3, AU, AUv3] targets are configured such that "Run" launches the executable AudioPluginHost.app. This lets you run the audio plugin as though it were hosted inside a DAW.

I recommend building (e.g. with XCode) the simple Audio Plugin Host that comes with JUCE Framework:

/Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj

Then symlink /Applications/JUCE/AudioPluginHost.app to the built AudioPluginHost.app (because that's where I told the Run configuration to look for AudioPluginHost.app):

ln -sf /Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app /Applications/JUCE/AudioPluginHost.app

Dependency versions

Known working with:

  • macOS High Sierra 10.13
  • XCode 9.3.1
  • JUCE Framework 5.3
  • VST3 Audio Plug-Ins SDK 3.6.9
  • fluidsynth 1.1.11

Making releases

Follow the steps in Building from source to output a product to the build folder.

Builds are automatically portable.

cd juicysfplugin/Builds/MacOSX
# first check that you have a Release or Debug product in the `build` directory

# follows symlinks, archives Release and Debug folders as tar.xz
./archive-for-distribution.sh

Note: Release and Debug flavors both output targets [VST, VST3, AU] to the same location: ~/Library/Audio/Plug-Ins/$TARGET/juicysfplugin.$EXT.
Whichever flavor you built most recently, wins.

Licenses

Overall, juicysfplugin is GPLv3.

See licenses for all libraries and frameworks.

Questions

Windows/Linux/Android/iOS version?

No big barriers. The source code and all its dependencies are cross-platform. The main friction is setting up a dev environment, and learning how to link dynamic libraries on that OS (i.e. we need to link to libfluidsynth).

Some thoughts that come to mind:

  • Bundling libraries portably is far easier on Windows than on macOS
    • Just throw a dll next to the executable
    • .NET assembly binding can be debugged using fuslogvw
  • Windows already has plenty of free, nice soundfont plugins
  • It's probably pretty hard to bundle fluidsynth into mobile apps
  • Bundling would be easier if I used static linking
  • Static linking is hard