image Latest stable release: - macOS [1.0.6](https://github.com/Birch-san/juicysfplugin/releases/tag/1.0.6) - Windows x64 [1.0.8](https://github.com/Birch-san/juicysfplugin/releases/tag/1.0.8) - Linux is [supported as of 1.0.8](https://github.com/Birch-san/juicysfplugin/pull/3), but you will need to build from source Demo track: [mp3](https://github.com/Birch-san/juicysfplugin/releases/download/1.0.5/Demo_track.mp3), [FLAC](https://github.com/Birch-san/juicysfplugin/releases/download/1.0.5/Demo_track.flac), [FLAC +Soundgoodizer](https://github.com/Birch-san/juicysfplugin/releases/download/1.0.5/Demo_track_soundgoodizer.flac) # What juicysfplugin is a cross-platform 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](https://github.com/WeAreROLI/JUCE) is the framework for making audio plugins. [fluidsynth](http://www.fluidsynth.org/) is the soundfont synthesizer. Supports SF2 and SF3 soundfont formats. **Mode 1: standalone application** juicysfplugin.app (or .exe on Windows) 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](http://re-compose.desk.com/customer/portal/articles/1382244-setting-up-the-iac-bus-on-a-mac)). **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](https://user-images.githubusercontent.com/6141784/37062424-500bc91e-218e-11e8-9916-eae6d82ca566.png) Here's some soundfonts to get you started: - [Fatboy](https://fatboy.site/) (no specific license stated, but described as "free") - MuseScore's [recommended soundfonts](https://musescore.org/en/handbook/soundfonts-and-sfz-files#list) (includes MIT, GPL, other licenses) - FlameStudios' GPL-licensed [guitar soundfonts](http://www.flamestudios.org/free/Soundfonts) 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 (macOS) Install XCode and XCode command line tools. Accept terms. Install [JUCE](https://shop.juce.com/get-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](https://www.steinberg.net/en/company/developers.html). 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. See my [blog post](https://birchlabs.co.uk/blog/alex/juicysfplugin/synth/cpp/2019/01/05/a-soundfont-vst-for-macos.html) for a deeper explanation as to how juicysfplugin is linked for portable distribution on macOS. ## 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): ```bash 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 There is a [fluidsynth 2](https://github.com/Birch-san/juicysfplugin/tree/fluidsynth2) branch. It works, but there's no strong reason to justify switching to it – we have no burning need for any FS2 features (well, except perhaps the [modluators API](https://github.com/Birch-san/juicysfplugin/issues/2#issuecomment-397872150)), and it'd generate some extra work to get the Windows release to parity. # Making releases Follow the steps in [Building from source](#building-from-source) to output a product to the build folder. Builds are automatically portable. ```bash 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](https://github.com/Birch-san/juicysfplugin/tree/master/licenses_of_dependencies).