2018-05-25 03:44:41 +08:00
< img width = "436" alt = "image" src = "https://user-images.githubusercontent.com/6141784/40509932-f424abb4-5f92-11e8-85ae-61050955dc97.png" >
2018-03-07 06:43:21 +08:00
2018-03-07 06:51:41 +08:00
Latest release: https://github.com/Birch-san/juicysfplugin/releases
2018-05-25 03:44:41 +08:00
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 )
2018-05-12 01:42:29 +08:00
2018-03-07 06:50:41 +08:00
# What
2018-05-12 01:29:09 +08:00
juicysfplugin is a macOS audio plugin for playing MIDI music through a soundfont synthesizer.
2018-03-07 06:50:41 +08:00
2018-05-12 01:42:29 +08:00
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.
2018-05-12 01:22:31 +08:00
2018-03-07 06:50:41 +08:00
[JUCE ](https://github.com/WeAreROLI/JUCE ) is the framework for making audio plugins.
[fluidsynth ](http://www.fluidsynth.org/ ) is the soundfont synthesizer.
2018-05-13 00:26:42 +08:00
Supports SF2 and SF3 soundfont formats.
2018-05-12 01:42:29 +08:00
**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 ](http://re-compose.desk.com/customer/portal/articles/1382244-setting-up-the-iac-bus-on-a-mac )).
**Mode 2: audio plugin**
2018-03-07 06:50:41 +08:00
2018-05-12 01:42:29 +08:00
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.
2018-03-07 06:50:41 +08:00
2018-05-12 00:12:13 +08:00
# Why
I couldn't find a _free_ , _easy-to-use_ macOS audio plugin for making music with soundfonts.
2018-03-06 08:12:06 +08:00
2018-05-12 01:22:31 +08:00
# 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
```
2018-05-12 20:33:38 +08:00
## Launch
2018-05-12 01:29:09 +08:00
Now, you may do one of the following:
2018-05-12 01:42:29 +08:00
- Open the standalone juicysfplugin.app
2018-05-12 01:29:09 +08:00
- Load the AU/VST/VST3 into your favourite DAW (e.g. GarageBand, FL Studio)
2018-05-12 20:33:38 +08:00
# Usage
2018-05-12 01:26:03 +08:00
2018-05-12 20:33:38 +08:00
You must drag-and-drop a soundfont into the file picker.
2018-05-12 01:26:03 +08:00
![image ](https://user-images.githubusercontent.com/6141784/37062424-500bc91e-218e-11e8-9916-eae6d82ca566.png )
2018-05-12 01:22:31 +08:00
Here's some soundfonts to get you started:
2018-05-12 20:33:38 +08:00
- MuseScore's [recommended soundfonts ](https://musescore.org/en/handbook/soundfonts-and-sfz-files#list ) (includes MIT, GPL, other licenses)
2018-05-12 01:22:31 +08:00
- FlameStudios' GPL-licensed [guitar soundfonts ](http://www.flamestudios.org/free/Soundfonts )
2018-05-13 00:26:42 +08:00
I'll refrain from recommending certain General MIDI or videogame soundfonts, since the licensing and provenance are often unclear.
2018-05-12 01:26:03 +08:00
2018-05-12 20:33:38 +08:00
## 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:
< img width = "256px" alt = "image" src = "http://s3.amazonaws.com/fl_resource/flkeychart.png" >
## 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).
2018-05-12 01:26:03 +08:00
**Options > Audio/MIDI settings**
< img width = "256px" alt = "image" src = "https://user-images.githubusercontent.com/6141784/37062230-bdb128b6-218d-11e8-985a-e9b2b5fd0bb2.png" >
**Set Output to Built-In Output**
Or any output device that you can hear audio through.
2018-05-12 20:33:38 +08:00
Input audio device doesn't matter. We only use MIDI as input.
2018-05-12 01:26:03 +08:00
< img width = "515" alt = "image" src = "https://user-images.githubusercontent.com/6141784/37062266-d723c984-218d-11e8-9ded-9dc5eb701199.png" >
2018-05-12 01:22:31 +08:00
2018-05-12 00:12:13 +08:00
# Building from source
2018-03-07 06:43:21 +08:00
2018-05-12 00:12:13 +08:00
Install XCode and XCode command line tools. Accept terms.
2018-03-07 06:43:21 +08:00
2018-05-12 00:12:13 +08:00
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.
2018-06-10 07:41:12 +08:00
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.
2018-05-12 00:12:13 +08:00
## 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`
2018-05-12 01:46:29 +08:00
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):
2018-03-06 08:12:06 +08:00
```bash
2018-05-12 00:12:13 +08:00
ln -sf /Applications/JUCE/extras/AudioPluginHost/Builds/MacOSX/build/Debug/AudioPluginHost.app /Applications/JUCE/AudioPluginHost.app
2018-03-06 08:48:17 +08:00
```
2018-05-12 00:12:13 +08:00
# Dependency versions
2018-03-06 08:48:17 +08:00
2018-05-12 00:12:13 +08:00
Known working with:
2018-03-06 08:48:17 +08:00
2018-05-13 00:04:45 +08:00
- 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
2018-03-06 08:48:17 +08:00
2018-06-10 07:41:12 +08:00
# Making releases
2018-03-06 08:48:17 +08:00
2018-05-12 00:12:13 +08:00
Follow the steps in [Building from source ](#building-from-source ) to output a product to the build folder.
2018-03-06 08:48:17 +08:00
2018-06-10 07:41:12 +08:00
Builds are automatically portable.
2018-05-12 00:12:13 +08:00
```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
2018-03-06 08:48:17 +08:00
```
2018-05-12 00:12:13 +08:00
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.
2018-03-06 08:48:17 +08:00
# Licenses
2018-03-07 06:50:41 +08:00
Overall, juicysfplugin is GPLv3.
2018-05-13 00:04:45 +08:00
See [licenses for all libraries and frameworks ](https://github.com/Birch-san/juicysfplugin/tree/master/licenses_of_dependencies ).
2018-05-12 01:22:31 +08:00
# 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 ](https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer )
- 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