Giter VIP home page Giter VIP logo

juicysfplugin's Introduction

image

Latest stable release:

Demo track: mp3, FLAC, FLAC +Soundgoodizer

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 is the framework for making audio plugins.
fluidsynth is the soundfont synthesizer.

Supports SF2 and SF3 soundfont formats.

Supports the following MIDI events:

  • noteon, noteoff
  • 192 program change (this changes soundfont preset)
  • pitch wheel
  • aftertouch (key pressure)
  • channel pressure
  • default modulators as described in SoundFont specification 2.4
    • includes (among others): CC 1 modulation wheel is mapped to vibrato LFO pitch depth
  • CC 71 Timbre/Harmonic Intensity (filter resonance)
  • CC 72 Release time
  • CC 73 Attack time
  • CC 74 Brightness (cutoff frequency, FILTERFC)
  • CC 75 Decay Time
  • CC 79 undefined (being used as Sustain time)
  • may support SysEx (untested)

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).

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 (macOS)

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 (macOS)

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 (macOS) / .exe (Windows)

Generally the .app will Just Work™, but if your audio setup is more bespoke, then you'll need to configure.

Options > Audio/MIDI settings

image

Set Output to Built-In Output

Or any output device that you can hear audio through.

image

Building from source (macOS)

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.

See my blog post 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):

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

Visual Studio Code settings

Concerning the use of Visual Studio Code extension, C/C++ for Visual Studio Code, as an IDE (i.e. instead of XCode)…

Following advice is for macOS, using brew-installed LLVM 8 Clang.

All includePath entries are shallow (no recursive globbing) for now, since I don't have any deeply-nested headers.
We don't need to dip into /usr/local, since all library/framework headers are already in this repository.

Ensure that there exists at the root of the repository, a folder named .vscode.

.vscode/c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/include",
                "${workspaceFolder}/Source",
                "${workspaceFolder}/JuceLibraryCode",
                "${workspaceFolder}/modules"
            ],
            "defines": [],
            "cStandard": "c11",
            "cppStandard": "c++14",
            "intelliSenseMode": "clang-x64",
            "compilerPath": "/usr/local/Cellar/llvm/8.0.0_1/bin/clang++"
        }
    ],
    "version": 4
}

I've kept this minimal, but documented some other include paths worthy of consideration (e.g. if more parts of the toolchain were to be used, brew were to be used, or the standard XCode clang were to be used).

~/Library/Application Support/Code/User/settings.json

{
    "C_Cpp.updateChannel": "Insiders",
    "C_Cpp.default.intelliSenseMode": "clang-x64",
    "C_Cpp.default.macFrameworkPath": [
        // "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks",
        "/System/Library/Frameworks",
        // "/Library/Frameworks"
    ],
    "C_Cpp.default.includePath": [
        // "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
        // "/usr/local/include",
        // "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/include",
        // "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
        // "${workspaceFolder}/include"
        // "/usr/include",
        "/usr/local/Cellar/llvm/8.0.0_1/Toolchains/LLVM8.0.0.xctoolchain/usr/include/c++/v1",
        // "/usr/local/Cellar/llvm/8.0.0_1/Toolchains/LLVM8.0.0.xctoolchain/usr/lib/clang/8.0.0/include",
        // "/usr/local/Cellar/llvm/8.0.0_1/Toolchains/LLVM8.0.0.xctoolchain/usr/include",
    ],
    "C_Cpp.default.cStandard": "c11",
    "C_Cpp.default.cppStandard": "c++14",
    "C_Cpp.default.compilerPath": "/usr/local/Cellar/llvm/8.0.0_1/bin/clang++",
    "C_Cpp.clang_format_fallbackStyle": "LLVM",
    "C_Cpp.clang_format_style": "LLVM",
    "C_Cpp.default.browse.limitSymbolsToIncludedHeaders": true,
    "C_Cpp.default.enableConfigurationSquiggles": true,
    "C_Cpp.errorSquiggles": "Enabled",
    "C_Cpp.enhancedColorization": "Enabled"
}

Test matrix

Known working with:

  • macOS Mojave 10.14.5
  • Windows 10 x64 1903

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.

juicysfplugin's People

Contributors

birch-san avatar charliewolf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

juicysfplugin's Issues

Doesnt work at all in Logic or Mac in General

I Know this problem is likely abandoned, but i just cannot get it to work in Logic or macOS in general.

VST - not detected
VST3 - not detected
AU Component - detected, but i doesn´t load sf2 files
AUv3 - same as Component

Also i am not able to build it using the cmake instruction because it cant find libsndfile

The last version that is working is 2.3.3, perfectly infact, but it is not a native arm64 Binary so it will not be supported in Logic when Apple drops Rosetta2 support. Also i cannot get it to build using the old xcode instructions either.

Unfortunately this plugin is the only one that supports loading extracted soundfonts from DS Games and perfectly mapping them to the midi file. It makes the workflow SO MUCH EASIER by not having to assign instruments manually

If you could maybe pick it up or kindly just compile an arm64 Binary of Version 2.3.3 that would be perfect.

out of date fluidsynth library?

image
I just started using Ardour 6.3 in order to get program changes imported from MIDI files to work. However, when I scan for VSTs, Ardour throws this error when it gets to Juicy SF. I suspect it might be because something was either added or taken out of libfluidsynth-2.dll recently that the Ardour folks used. Or maybe not, I am no programmer. I see that you have been active relatively recently and I hope you can shed some light on this problem. I really like this plugin (though there is one more issue that's probably my fault, I'll look into it myself before bothering you) and I'm glad its developer is still active.

[Suggestion] Lower value for release

Something that would be nice to have in here would be the 'zero value' for note release being set lower. Most instruments I use have a natural tail, which sounds nice in most cases, however being able to cut the note as soon as it stops with no release would be nice.

Organization?

juicy plays the sounds great and I love having an envelope for each sound, but I'm wondering if this feature would be possible: I've been using a lot of video game soundfonts, most of which are giant sf2 files which load in a bunch of sounds, and sometimes the sounds are just numbered. The ability to rename sounds within each sf2 or delete certain ones would be so convenient. Just an idea.

after loading saved Mixcraft project, Juicy SF VST3 doesn't accept MIDI

First of all, thank you for making this plugin! Being able to use FluidSynth in my DAW is a godsend!

If I save a project in Acoustica Mixcraft 9 that uses the Juicy SF VST3, then later load the project, Juicy SF doesn't respond to MIDI input at all, though sound can still be produced by clicking on the keyboard in the Juicy SF GUI. Talking with Dan Goldstein at Acoustica, he suggests that a flaw in the plugin is causing it to not process MIDI properly after restoring save data. A new instance created by duplicating the track works fine. Mixcraft 9 uses Juce for its VST3 support, and this bug appeared after Mixcraft upgraded to the latest Juce version. Do you have any insight on what might be causing this?

You can download a free demo of Mixcraft 9 to test this out with.

Dan would be happy to chat with you about this. I wanted to send you a DM with his info, but there doesn't seem to be a way for me to contact you on GitHub. Are you able to DM me?

Anyone willing to keep this plugin going?

As mentioned in the past, this plugin was extremely well done. Has so much potential it is quite a shame that it is no longer being developed.

Is there anyone out there that would be able to keep this plugin going?

First off, this is the ONLY Fluidsynth based soundfont player to ever provide an ADSR envelope! Also love that you can drag soundfonts into the GUI (although would be nice if it was the entire GUI).

There are a couple little feature requests that would make this plugin perfect (in my opinion). The main one I was hoping for was to add a Legato/Glide parameter (the ability to glide between overlapped notes (two keys hit at same time)

I am kind of lost between Windows & Linux at the moment.
Would be great if both of these could continue to be updated.
-Windows one would be great as well as there really aren't many 64 Bit soundfont players let alone ones that offer ADSR / Legato Glide.
-Linux version of this stopped being developed quite a bit before the Windows one was abandoned. There is nothing even close to anything like this in Linux.

Anyone have the ability to add a Legato/Glide feature, etc.?
Just wondering if anyone is out there that has the skill and the desire to carry on such great work?
Thank You

Request: load individual instrument in memory per soundfont

Thanks for great soundfont player in x64 DAW.
But, current juicysfplugin loads entire soundfont, so, if I load huge soundfont (like Musyng Kite https://www.kvraudio.com/forum/viewtopic.php?t=351893 ), It loads also that instruments doesn't use.
Current juicysfplugin isn't multi-timbral, so other instruments that doesn't use is useless.

For other soundfont player like sfz soundfont player, has SF/PR/DFD mode. SF mode loads entire soundfont, PR mode loads individual soundfont, and DFD loads sound in disk per playing sound.

Many soundfonts have multi instruments, so I think this feature is needed for future version.

GitHub automated pipeline - build artifacts are corrupted

I spent some time trying to build your plugin with the following changes:

  • Added JUCE as a git submodule
  • Added FluidSynth as a git submodule
  • Created a workflows yml file to run commands automatically for Linux, Mac, Win

The resulting file is:

name: JuicySF All

defaults:
  run:
    shell: bash

on:
  workflow_dispatch:
  pull_request:
  push:

env:
  dir_build: build
  dir_source: .
  type: Release

jobs:
  build:
    name: Build
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        include:
          - os: ubuntu-latest
            name: linux
            generator: Unix Makefiles
            flags: -Denable-portaudio=1 -Denable-ladspa=1
            install_deps: ~/deps
            install_path: ~/juicydeps
            path: ./build/JuicySFPlugin_artefacts/Release/VST3
          - os: macos-latest
            name: mac
            generator: Unix Makefiles
            flags: -Denable-portaudio=0 -Denable-ladspa=0
            install_deps: ~/deps
            install_path: ~/juicydeps
            path: ./build/JuicySFPlugin_artefacts/Release/VST3
          - os: windows-latest
            name: win
            generator: Visual Studio 17 2022
            flags: -Denable-jack=0 -Denable-pulseaudio=0 -Denable-ladspa=0 -Denable-dbus=0 -Denable-readline=0 -Denable-sdl2=0 -Denable-libinstpatch=0
            install_deps: D:/deps
            install_path: D:/juicydeps
            path: ./build/JuicySFPlugin_artefacts/Release/VST3
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Install Linux dependencies
        if: matrix.os == 'ubuntu-latest'
        run: |
          sudo apt-get update && sudo apt-get install cmake-data cmake libglib2.0-0 libsndfile-dev libasound2-dev libjack-dev portaudio19-dev libsdl2-dev libpulse-dev libdbus-1-dev libsystemd-dev libinstpatch-dev libreadline-dev g++-7 g++-8 clang-7 clang-8 clang-9 clang-10 clang-tidy-10 ladspa-sdk

      - name: Install macOS dependencies
        if: matrix.os == 'macos-latest'
        run: |
          brew install fluidsynth pkg-config cmake pulseaudio portaudio jack dbus sdl2

      - name: Install Windows dependencies
        if: matrix.os == 'windows-latest'
        run: |
          mkdir ${{ matrix.install_deps }}
          cd ${{ matrix.install_deps }}
          curl -LfsS -o gtk-bundle-dev.zip http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip
          curl -LfsS -o libsndfile-dev.zip http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28-w64.zip
          7z x -aos -- gtk-bundle-dev.zip
          7z x -aos -- libsndfile-dev.zip
          mv ./lib/libsndfile-1.lib ./lib/sndfile.lib
          mv ./lib/libsndfile-1.def ./lib/sndfile.def
          rm -rf C:/Strawberry/perl/bin/pkg-config*
          echo "${{ matrix.install_deps }}/bin;${{ matrix.install_path }}/bin" >> $GITHUB_PATH

      - name: Build JUCE dependency
        run: |
          cd JUCE
          cmake -B cmake-build-install -DCMAKE_BUILD_TYPE="${{ env.type }}" -DCMAKE_INSTALL_PREFIX="${{ matrix.install_path }}"
          cmake --build cmake-build-install --target install

      - name: Build Fluidsynth dependency
        run: |
          cd fluidsynth
          cmake \
            -G "${{ matrix.generator }}" \
            -DCMAKE_BUILD_TYPE="${{ env.type }}" \
            -DCMAKE_INSTALL_PREFIX="${{ matrix.install_path }}" \
            -DCMAKE_VERBOSE_MAKEFILE=1 \
            -DNO_GUI=1 \
            ${{ matrix.flags }} \
            -S "${{ env.dir_source }}" \
            -B "${{ env.dir_build }}"
          cmake --build ${{ env.dir_build }} --config ${{ env.type }} --target install

      - name: Copy Fluidsynth dependency
        if: matrix.os == 'windows-latest'
        run: |
          ls "fluidsynth/${{ env.dir_build }}/src/Release"
          mkdir -p "${{ env.dir_build }}"
          cp "fluidsynth/${{ env.dir_build }}/src/Release/fluidsynth.lib" "${{ env.dir_build }}"

      - name: Build JuicySF
        run: |
          PKG_CONFIG_PATH="${{ matrix.install_path }}/lib/pkgconfig;${{ matrix.install_deps }}/lib/pkgconfig;$PKG_CONFIG_PATH" \
          cmake \
            -G "${{ matrix.generator }}" \
            -DCMAKE_BUILD_TYPE="${{ env.type }}" \
            -DCMAKE_PREFIX_PATH="${{ matrix.install_path }};${{ matrix.install_deps }}" \
            -DVST3_COPY_DIR="final" \
            -S "${{ env.dir_source }}" \
            -B "${{ env.dir_build }}"
          PKG_CONFIG_PATH="${{ matrix.install_path }}/lib/pkgconfig;${{ matrix.install_deps }}/lib/pkgconfig;$PKG_CONFIG_PATH" \
          cmake --build ${{ env.dir_build }} --config ${{ env.type }} --target JuicySFPlugin_VST3

      - name: List files generated
        run: |
          cd ${{ matrix.path }}
          find "$(pwd)"

      - uses: actions/upload-artifact@v3
        with:
          name: fluidsynth-${{ matrix.name }}
          path: ${{ matrix.path }}

https://github.com/studiorack/juicysf/blob/master/.github/workflows/release.yml

Pipeline and jobs:
Screen Shot 2022-09-01 at 8 21 16 PM
Screen Shot 2022-09-01 at 8 21 21 PM
https://github.com/studiorack/juicysf/actions/runs/2976408057

However the generated binaries are corrupted. When I try to validate them with pluginval I get:

pluginval --validate-in-process --validate "juicysfplugin-mac.vst3"
Started validating: juicysfplugin-mac.vst3
Random seed: 0x18df153
Validation started
Strictness level: 5
-----------------------------------------------------------------
Starting tests in: pluginval / Scan for plugins located in: /juicysfplugin-mac.vst3...
Num plugins found: 0
!!! Test 1 failed: No types found. This usually means the plugin binary is missing or damaged, an incompatible format or that it is an AU that isn't found by macOS so can't be created.
FAILED!!  1 test failed, out of a total of 1
*** FAILED

And same with Steinberg validator:

validator "juicysfplugin-mac.vst3"
* Loading module...

        juicysfplugin-mac.vst3

2022-09-01 16:10:56.890 validator[70018:1212777] Error loading juicysfplugin-mac.vst3/Contents/MacOS/juicysfplugin:  dlopen(juicysfplugin-mac.vst3/Contents/MacOS/juicysfplugin, 0x0106): tried: 'juicysfplugin-mac.vst3/Contents/MacOS/juicysfplugin' (code signature in <70729562-000F-3D08-8230-6FB613A95740> 'juicysfplugin-mac.vst3/Contents/MacOS/juicysfplugin' not valid for use in process: library load disallowed by system policy)
Invalid Module!
The bundle “juicysfplugin” couldn’t be loaded.

Where I am going wrong with my build commands?

Would this be a feature you would be interested in using? I can submit a PR?

Multichannel support

Thank you for this awesome plugin!

I would like to request for a feature: multichannel support. It means loading a 16-channel MIDI file into a single track, feeding it into juicysfplugin, and assign different instruments for different channel.

Currently there are few free-and-open-source VST that support this feature. But I am confident that it is technically possible (because there are commercial Roland SoundCanvas VA and Yamaha S-YXG50 VSTi).

I appreciate it if you could consider this feature request.

2.3.0 Release crashes FL Studio Mac

Hi birch, just wanted to say that I greatly appreciate your work on this plugin- It is a god send for working with sound fonts on the Mac. However, 2.3.0 is crashing FL Studio for me. I have tried the Audio Unit, the VST and the VST3. The AU and VST will detect and allow selection in FL Plugin Manager / Plugin Picker but will crash the program at the step "Loading Fruity Wrapper". The VST3 will not allow for selection, FL Plugin Manager returns "error" and will not attempt to load the plugin.

The plugin seems to be working fine in Ableton 10.1 though.

juicysf 2.3.0
FL Studio 20.5.1 build 522
macOS Mojave 10.14.6

enable dynamic sample loading to load only samples from selected preset into RAM

Currently, juicysfplugin loads the entire SoundFont into RAM. This can waste a lot of RAM in cases where a single preset is used from a large SoundFont containing many presets, such as a GM bank.

FluidSynth has a setting "synth.dynamic-sample-loading" which loads only the samples from the selected preset into RAM. It would make sense to use this feature with juicysfplugin since it is designed to only load one preset at a time.

Plugin cannot open when target soundfont is not found where expected

I tried opening a project file from 3 years ago that used this plugin. In that time, I've since upgraded and renamed the hard drive the project file was on. And I assume that's the reason why the plugin cannot open in those old project files. It loads fine when I open a blank instance from my plugin database. But anything that previously had a soundfont loaded can no longer open at all. And this happens to be on plugin instances that had unique ADSR values, so I would like to get them working again so I can recover those values. It's fine with me if it can't locate the SF2 file. But I'd rather it just load without the soundfont than not load at all.

This issue is happening in FL Studio 21.2.3 build 4004 64 bit on a Windows 11 computer. The plugin instance attempting to load is the VST 3 version. I tried doing a fresh install of the plugin and rescanning my plugin database, but neither fixed the issue.

Plans to add Windows support for the VST?

As the title says, just wondering.

I've been looking for a working soundfont playing VST for a while now, and it seems that anything out there is either flawed in following the soundfont specification (the "fake" soundfont players), broken, or very outdated.

Legato / Portmento function?

Hey!

I love what you're doing with JuicySFplugin.
How difficult would it be to add midi legato for easier pitch transitions on things like violins / guitars?
Would really improve the usability of soundfonts in general.

Thanks so much

Any plans for ASDR support?

I would like to know if there are any plans for ASDR support (Attack, Sustain, Decay, Release) in the future. This is pretty much a perfect replacement for FL Studio’s own Soundfont Player (which is not available on the Mac edition) but does not quite have feature parity. Regardless, I have been searching for something like this for a while. This seems to be the only plugin that can handle Soundfonts with multiple instruments correctly!

ADSR Envelope Question

As I mentioned in my other post you are the first person I have ever seen add an ADSR envelope to Fluidsynth.
Can you tell me, did you program it yourself, or do they now make these parameters available?
In past I read that they rely on programmers to add these features but I just wasn't sure if they actually added this to their software, which in my opinion would be great if they did.

I read another post of someone talking about the envelope release, don't think it is exactly the same thing, but I notice the release can be a little sensitive right away. Some soundfonts I have tested build up a rather powerful resonance very quickly when I add a little release to them. I am rather new to your plugin and have not tested a ton of different soundfonts yet to know if it is more an issue with specific soundfonts.
Hard to say at the moment I have been coming across some interesting / oddly create soundfonts :)
Not sure if anyone else noticed anything?

Last question, sorry, I have a couple of ideas to share, is this program still planned on being updated further?

Compiling on Windows fails when using Dockerfile

When running docker build . -f win32.Dockerfile --tag=llvm-mingw as per instructions with WSL and msys2 mingw64 installed on Windows 10, the build fails while building fluidsynth with "undefined symbol: __declspec(dllimport)" errors related to glib2 functions, coming from the LLD linker.

This doesn't happen while building fluidsynth normally (per their wiki) with the same config flags that juicysfplugin uses. This is probably unrelated to the libpcre2 problem which was discovered and fixed here, because the functions indicated by the errors seem more related to threads and memory than regex.

Relevant excerpt of the console output starting at the compile step that spawns the errors:
excerpt.txt

Solutions I've tried include trying to install libglib2.0-dev on the relevant docker images by editing the dockerfile and sh files, changing CMAKE_FIND_ROOT_PATH_MODE variables in [arch]_toolchain.make, trying to install all the fluidsynth dependencies via the dockerfile.
A potential solution may be to try using the posix version of mingw, but I'm unsure how to get that working in Docker.

I know the maintainer uses OSX to develop, so I urge anybody reading this who uses a Windows machine to try to replicate it. So far myself and one other person have gotten these same errors.

AU Plugin crashes inside Logic Pro X

Hi, first of all thank you so much for this awsome plugin, i have been using an older version of it for creating soundfont remixes of Nintendo DS games and the plugin is just absolutely perfect for that.

Unfortunately some time ago the plugin stopped working for me and i haven't been able to get the plugin working correctly since then.

I used version 1.0.0 for a long time since it worked fine, but wanted to upgrade to 3.1.0 because of Apple Silicon support.

My Hardware is the Mac mini M1. And i use the Audio Unit version.
Basically everytime i try to load a soundfont Logic throws the following error:

"An Audio Unit plug-in reported a problem which might cause the system to become unstable"
It then restarts Logic.

What ive tried so far is giving it the permission for disk access but that didnt help. I also deleted some old settings files i found in the cache with no change.
I also compiled it myself for testing but the resulting build had the same issue.

The Logic and macOS installation is relatively fresh, so i would rule that out.

I dont know how to get 3rd party plugin logs from Logic directly, so dont have a log file unfortunately.

Slide... (and porta mento)

This plug-in has been serving me very well! It's been working better than the legacy soundfont player that it's basically replacing in FL! I opened up an old 8-bit project and realized that I utilized that a lot using FL's native features. Slide and portamento namely. I can't explain that well so, here is a video that basically shows the functionality, though you may already be familiar
https://www.youtube.com/watch?v=E9Z6T5qdFP0

Since FL handles the slide and porta mento itself, outside plugins need to have their own ways and I think I might have an idea of what could work

For this, I really like how a plug in called 'Mini Erhu' handles it
image
That poly button to the left switches the mono/poly mode of course, but while in mono mode, notes that are triggered while another note is playing pitch-shift the sample. the portamento is basically controlled by that glide knob (which can be automated). It basically pitch-shifts the sample that is currently being played to the next triggered notes pitch at a given speed (that the knob is turned to).

Since portamento is a standard speed, I guess that would be like having the knob at a very low value, and the slide is almost like having an automated knob... so I guess both are covered.

If you come back to this, I hope this would not be too troublesome to consider! Thanks a lot for your work!

[Suggestion] Filtering Toggle

Would be nice to see something like this
KefFiK3flA
(Using a SNES SPC Player as a example)

A Tab where you can switch the filtering of the audio
it could be helpful for people who wants that crisp retro-esque sound

Could JuicySFPlugin be able to cut down the ADSR time as well?

Basically, if the Soundfont instrument's original release time ends up sounding too long, or if I would like to abuse the ADS for specific effects, I would like to shorten it than usual (or in other words, apply an absolute time value instead of relative, which Fruity Soundfont Player seems to do). JuicySFPlugin only seems to have a function for lengthening the ADSR times.

I am aware that JuicySFPlugin is using a specific library for playback, so I wonder if the library itself can even do this.

Too-large buffer sizes causes timing issues in REAPER

Using newest version, but not older versions, of JuicySF, if I change the block size to 1024 samples, I get weird timing issues when fast notes play. When I change it to 512 samples, the issues disappear (but I'm left with a 512 sample buffer, of course). I believe it happens with both VST and VST3 versions.
I will need to do more testing (and recording) but it has caused me a few problems so far.

feature-request: (sidecar) backdrop loading

Purpose: allow soundfont developers to 'give their soundfont a face and address', by loading a backdrop via sidecar loading.

Usecase: I want to market my new soundfont to my audience (and opensource music in general) using juicysfplugin.
But the fact that I can't really personalize it visually makes it cool from a universality perspective, but boring from a UX perspective. Redirecting my users to a customized fork juicysfplugin would fragment the universality of juicysfplugin (and honestly I don't know how to do that).

Simple mockup:

image

ps. I know birch-san did not create Fatboy, it's just to illustrate that open soundfont/devs can address themselves.

Just a jpg as backdrop, nothing fancy.
Sidecar-logic is basically loading foo.sf2 checking for existence of foo.jpg e.g.

Im the first to dislike marketing or over-animated vstplugins, but personalisation is a real thing, and I think a simple backdrop could really boost the adoption for this plugin, and sf2 in general.
I think anyone would rather see more esthetically beautiful open free 'no-code' sf2 instruments which work forever, than license-heavy proprietary eye-catching plugins (which break over time).
Soundfonts are by default very barebones 'data', which makes it easy to go under the radar of newbie users (who are marketed to via (non)moving images these days).
I think it's not a crazy idea to bring soundfonts out of the shadows, disrupt the soundfont-wrapped-in-a-proprietary-plugin space, and empower sounddesigners and artists to publish their own open soundfonts.

ps. I'm not suggestion something herculean like custom UI's like https://ctrlr.org, just something far more easy.

feature-request(settings): make setting for default sf2 path

Hello. Thank you for such an awesome plugin!
Would be nice to have option for default sf2 files path, so when you select a file it's path got saved related to that directory (if it's inside of that directory)
The purpose for the setting is to have cross-platform compatibility for the plugin's settings,
for example: I use the same Reaper project in windows and macos, and have to manually change the path of sf2 file each time I switch between systems.

Thank you!

Have questions about the use of large models

background:I want to ask another repo, but there is no issues button, so I ask under this repo.
[huggingface-vscode-endpoint-server],I want to understand how to support starchat model,I hope you can guide me

Feature request: FluidSynth interpolation settings

This is a long shot, but would it be possible to include some kind of setting for the interpolation method used by FluidSynth? In their API, they have functions for this already. Here in the juicysf source code you already use another one of the API commands, fluid_synth_set_sample_rate.

I would just try to make a version with an added line myself, but I'm having trouble compiling it as it is on my Windows machine. Alternatively, somebody could assist me in that endeavor.

Ability to move to the previous/next SF2 into a same folder.

Hi,

First of all, thank you for this nice player. Do you think it would be possible to add some kind of drop down list that would load the previous/next SF2 to navigate between files in the same folder. It would be comfortable to navigate this way, especially when an instrument has several articulations between several SF2.

Thanks a lot!

Some sf2s ignore sustain

Sorry for the bother again, but I'm hoping you can help me figure out an issue. It's almost certainly something I'm doing wrong, but it's also partly unique to this software. Some soundfonts ignore sustain, cutting out instead of holding. The first of the links below should lead to a download of such a soundfont. The second one is a soundfont that simply refuses to show up. Both of them work normally in almost every other program I've tried (including Musescore, DSK SF2, and sforzando), except for Ardour's Fluid Synth. This happens with all my ripped soundfonts. I've compared working instruments to non-working ones, trying to get all the parameters to match in Polyphone, but still the problem persists. In the third soundfont, the piano works fine (except one of the samples is looped weirdly in JuicySF) but the rest of the instruments cut off like usual.

https://www.dropbox.com/s/5yivcyiyhwawdxn/DPPt.sf2?dl=0
https://www.dropbox.com/s/qkb3u7q5znxxo83/Pok%C3%A9mon%20Diamond_Pearl_Platinum%20Soundfont%20compiled.sf2?dl=0
https://www.dropbox.com/s/0gqcmlg94hdae1f/SEQ_BGM_VS_RS_LEADER.sf2?dl=0

fail to work after loading project

  1. Use in Samplitude / Sequoia, select any sf2
  2. Save. Close project.
  3. Load project. sf2 instrument did not loaded, only sf2 file with 1st instrument, And Now It does not sound at all (only way is to delete it from track and add again).

A Logo Proposal

Greetings, @Birch-san

I wanted to collaborate with this project
by delivering a free logo proposal,
If that's something you're interested in let me know!

I'm a Graphic Designer and an Open Source Enthusiast!
Cheers!
-Luigi.

VST3/AU, Ableton: "Cannot be opened because the developer cannot be verified"

Ableton Live 11.0.12
MacOS 12.0.1
JuicySF 2.3.3

Screenshot 2021-11-29 at 20 40 04

Happens with both VST and AU.

If this were an application, I'd just open it in Finder, right-click, and open.

It did show up here (.vst3), but allowing it to run didn't have any effect.

Screenshot 2021-11-29 at 23 16 18

I also tried following these instructions: https://www.reddit.com/r/ableton/comments/galkk3/macos_catalina_10154_and_vsts_vst_cannot_be/, but spctl wasn't available, and then I gave up and kept making music for a couple of hours. 😃

Cubase 12 HATES this plugin

Hello I hope all is well. I'm using cubase 12 and while using the plugin it works just great. BUT loading a session with it crashes cubase like crazy. i love soundfonts and need help or a fix.

[Windows] CPU usage, crash upon scrolling

From #2 (comment):

Something you may want to know but isn't necessarily much of a problem, (happened 2x) if you leave the plug in up/unattended for 30 mins or more and interact with it right upon waking up the computer, it may crash FL. Maybe Juce or Fluid has some usage timer or something built in? FL?

I assume that we have some tasks that are scheduled to run every n seconds. If the computer is awake, then these will be serviced at a manageable pace.

If the computer is asleep: timed tasks will pile up, and when the computer awakers: juicysfplugin will try to process a massive queue of callbacks.

If this theory is correct: I guess we'll have 100% CPU for a bit. If it happens on the UI thread, then the UI will be unresponsive during this time. If it happens on the audio processing thread: we'll fail to meet our audio processing deadline.

If this is a new problem as of the 2.x releases: my first guess is that this will be related to the slider UI or to the width/height of the GUI. Both of these synchronise their model with the state stored in ValueTree, and I believe that synchronisation is run as a timer task.

I expect this will repro on all operating systems, so plan of action is to attempt a minimal repro on macOS, and sample the process to see where it's spending all of its CPU time.

If the problem is indeed something to do with the new GUI state synchronisation, that will be unfortunate: that code solved difficult problems, so it would be a shame to have to backpedal on it. The obvious solution conceptually is to discard the timer events instead of processing them. This would be a fine solution, but these decisions are made in the bowels of JUCE framework rather than in my own code, so we may lack the access to implement that solution. Upside is that if it is related to GUI state synchronisation, then somebody may have had this issue before: both of those features were written with reference to official examples, so they're probably supported use-cases.

Thank You

I have a couple ideas if you are interested but I just wanted to make this separate post to thank you for creating this plugin. I have been on the search for the perfect soundfont player for a very long time (lot longer than I would like to admit / think about) and could never really find a solution that covered all my needs. Seems very similar to your journey, as I read which is the reason why you created this plugin in the first place.
Your plugin is by far the closest I have ever come across that meets my needs, which is why I had to write this to thank you.

I saw that your plugin is based on Fluidsynth, I am thankful to the creators of that software as well.
However, main issue I have with Fluidsynth is one of the main things I look for in a soundfont player is an ADSR envelope and when I see that a program supports soundfonts and I go to test it I get excited when I see a bunch of parameter knobs and everytime I am fooled by four knobs for the built in reverb and four knobs for the built in chorus! :)
As many know it is a solid soundfont player, but I always wish they would add more parameters to alter soundfonts themselves, instead of two effects. You are the first person I have ever seen to not make the two effects a part of your plugin and on top of that the first person I have ever seen to add a ADSR envelope to Fluidsynth!

When I test SF2 players I always look for two main parameters, ADSR and one other one that unfortunately is the only thing not included in your plugin (which is not the point of this post so I won't mention it here). Another thing I look for which is very important is the ability to drag and drop a soundfont into the GUI, which your player has :)
I will admit when I first came across your plugin and didn't see this feature, I kind of dismissed it.
However, I did eventually give it a try and will say that I am so glad that I did.
If you had told me that someone on an entirely different OS was going to create a plugin that is better than all those available on my OS, I would not have believed you :)

When i read your description it slightly sounded like a "ahhh I just threw this little simple thing together".
Let me tell you and anyone else who reads this, this is no simple little thrown together creation.
It looks deceivingly simple, but you know what you are doing.

There is an incredible attention to detail from everything from the layout of GUI, features, hotkeys assigned, ease of use, right down to the color choices. I literally have a list of all the things I have noticed that I would like to share but this post is already getting pretty long as it is so I won't :)
Seriously though, many details that make programs easier to use, things you expect to work a certain way, that most programmers for some reason seem to leave out.
Just to give an example I tried out a free sampler (that used to be a product for sale) the other days it had a file browser that you could not use arrow keys to navigate up and down! Your patch browser has arrows up & down, a vertical scrollbar and you can use mouse scroll wheel (which is another thing many leave out).
On top of that you can sort preset columns by number or alphabetically! Okay, I have to stop.

One more thing though, I have been looking through these posts to verify that I am not putting in a double request, I have also noticed some really in depth level of offering help from you to those using your plugin, there are companies that sell products that don't offer the level of care and help that you are providing. Has no direct connection to me but just wanted to point out how extremely kind this is, just shouldn't go unnoticed, thank you.

Sorry for the long post but thought it was important to share.
Thank you again

Attempting to build on Linux

Hi! Been enjoying your plugin for a while now, though I always felt it was a shame there is no linux version. So I decided to try building it!

My goal is to get a VST3 build to work on Manjaro Linux / Arch.

Steps taken

  1. install dependencies: sudo pacman -S fluidsynth vst3sdk juce
  2. CMake setup: cmake -S . -B build inside the juicysfplugin dir
  3. trying to build: cmake --build build

At the last step it gives a compilation error. Looks like an easy fix, but my C++ knowledge is next to zero so I couldn't figure out how to fix it even after googling it.

[  2%] Building CXX object CMakeFiles/JuicySFPlugin.dir/Source/FluidSynthModel.cpp.o

... (omitted a bunch of warnings)

/home/axel/source/juicysfplugin/Source/FluidSynthModel.cpp:434:39: error: invalid conversion from ‘float* const*’ to ‘float**’ [-fpermissive]
  434 |         buffer.getArrayOfWritePointers());
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
      |                                       |
      |                                       float* const*

... (omitted a bunch of warnings)

make[2]: *** [CMakeFiles/JuicySFPlugin.dir/build.make:90: CMakeFiles/JuicySFPlugin.dir/Source/FluidSynthModel.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:107: CMakeFiles/JuicySFPlugin.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

Still, it looks promising so far! Any help would be appreciated.

Mac build from source: No global header file was included

Following instructions from the README:

git clone https://github.com/Birch-san/juicysfplugin.git
open juicysfplugin/Builds/MacOSX/juicysfplugin.xcodeproj

Then building in Xcode I get:

/Applications/JUCE/modules/juce_core/system/juce_TargetPlatform.h:56:3: "No global header file was included!"

Screen Shot 2022-09-09 at 4 20 19 PM

Searching the code this option appears to be there:
https://github.com/Birch-san/juicysfplugin/blob/master/JuceLibraryCode/AppConfig.h#L64

What could be the issue?

  • MacOS Monterey 12.5.1
  • XCode 13.4.1
  • JUCE modules 6.0.8
  • cmake 3.24.1
  • Apple clang version 13.1.6 (clang-1316.0.21.2.5)
  • Target: x86_64-apple-darwin21.6.0

use FluidSynth v2.2.2 or later to fix sustain pedal bug

The FluidSynth version used in JuicySF has a bug whereby repeating a note while the sustain pedal is depressed will cut off the previous note instead of holding it, which is unnatural behavior for most instruments. This bug was fixed in FluidSynth 2.2.2, so my request is for JuicySF to be updated to the latest FluidSynth version to work around this issue.

Thank you for creating this plugin!

Any updates coming in future or has development now stopped on this plugin?

Not a bug, but could not find a way to ask this any other way...

Before I decide to replace my use of VSTSynthFont (which is VST2 only) with this plugin as 64-bit VST3 in Cubase on Windows, is the plugin still being actively maintained and developed?

The last published update for juicysfplugin was February 2022 and I notice that the FluidSynth release is now up to v2.3.2 with some new features that would appear to be useful and JUCE 7 has been around for some time.

I'm just trying to determine what my way forward to continue using my library of SF2 files which still have some interesting sounds as VST2 gets removed from Cubase in the coming year(s).

Could pitch bend range expand beyond 2 semitones?

I'm using FL Studio to run JuicySF, and no matter how much I change the regular pitch bend range value, or the "send pitch bend range" in FL's plugin wrapper settings, the only change I notice is the amount that changes when shifting the knob, but the pitch bend range is still locked to 2 semitones.

I can't tell if this is the FL Studio's issue with VSTs, or the plugin's issue.

I've attempted to try it on other hosts but they failed to run the plugin:The hosts are LMMS and OpenMPT, but LMMS does not support VST3 for the moment and OpenMPT just has an error when loading the plugin file.

Please bring back Linux support..

Hi, Linux VST2 soundfont hosts are VERY rare, we'd love to have juicySF compiling on Linux systems again! In my own selfish little world I'd even like it to compile for 32bit systems, but hey, baby steps...baby steps

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.