sfztools / sfizz-ui Goto Github PK
View Code? Open in Web Editor NEWSFZ based sampler, providing AU / LV2 / PD / VST3 plugins using the sfizz library
Home Page: https://sfz.tools/sfizz/
License: BSD 2-Clause "Simplified" License
SFZ based sampler, providing AU / LV2 / PD / VST3 plugins using the sfizz library
Home Page: https://sfz.tools/sfizz/
License: BSD 2-Clause "Simplified" License
Content can be the current keyswitch + an instrument description (e.g. with the used CCs, their labels, etc...)
Currently there is a zenity
hard-coded path in both VSTGUI and editor's NativeHelpers.
It would be possible to auto-detect them by searching in PATH for systems like NixOS.
See sfztools/sfizz#505.
When the host sends an atom:Path
msg for the http://sfztools.github.io/sfizz:sfzfile
param with the same SFZ file path as the one already loaded, sfizz skips file loading.
This prevents the user from reloading a SFZ file, which has changed (i.e. the SFZ file was edited after loading). The user needs to remove and re-add the plugin instead, which is cumbersome.
IMO, the sfizz plugin should reload the SFZ file unconditionally or store a modification time and/or hash for the file contents and only skip loading if both of these match.
The current development version creates corruption on multiple platforms (#1004, #45). It's set at 4.10.2 in 1.1.1, but we have interest in tracking the upstream version when it becomes stable.
When selecting "Load file" from the menu, the file is opened with write permissions. I see no good reason for this, and because of my setup it has caused me a bit of a bother until I figured out what was going on.
When I run cmake
to prepare the build I see this:
Build LV2 plug-in: OFF
How can I change this switch so it will build the LV2 plug-in?
I'm running manjaro.
I've first tried installing two versions from AUR. Both gave me a standalone program, but not an LV2 plug-in.
Then I cloned the Git master - same.
Then tried the develop branch - no difference.
I have been building a lot of LV2 plug-ins (from AUR) on this system so it can't be a lack of dependancies, it's just disabled. I've also tried this:
build $ cmake cmake -DCMAKE_BUILD_TYPE=Release -SFIZZ_LV2=ON ..
To no avail.
...
Oh wait...
-DSFIZZ_LV2=ON ..
Worked. Argh. Nevermind.
Though it is not enabled by default, which I think should be.
Do I need anything special, like SDKs or something, to build the VST plugin?
Keyswitch groups allows sfizz to display group sub-menus in the keyswitch dropdown planned for Panel B:
This will allow library authors to categorise their keyswitches how they want, and facilitate ease of discovery for both author, and end user.
In order to allow this it is suggested by both @jpcima and me that the current sw_key_labelN
use a |
character to divide the string name into two parts:
sw_key_labelN=<keyswitch group name> | <keyswitch name>
SFZ Example:
<control>
sw_key_label42=instrument | sine
sw_key_label43=instrument | saw
<region>
sample=*sine
sw_last=42
<region>
sample=*saw
sw_last=43
Looking at the above example, this solution could also remove the need for adding the keyswitch name per region.
The picture does not show, with VST3 in Reaper host.
(reported by @sub26nico on #librazik IRC)
It's the package sfizz_0.3.1-0librazik1_amd64.deb
.
https://download.tuxfamily.org/librazik/pasapas/pool/main/s/sfizz/
First the good news. I managed to build the VST3 in a Raspberry Pi load it in Ardour 6.3.92 and make some noise.
Since this is an ARM processor and OS with hard-float support (armhf in debian), I had to rename the plugin's arch:
cd ~/.vst3/sfizz.vst3/Contents/
mv armv7l-linux/ armv7hl-linux/
https://steinbergmedia.github.io/vst3_doc/vstinterfaces/vst3loc.html#linuxformat
specifies `based on the RPM Terminology + "-linux"``
RPM terminology for armhf
is armv7hl
(not arm7l)
And a better logging capability too !
I was trying to build and install development version of sfizz into non-standard location, apart from the some stable-ish version at /usr/local
. But sfizz.lv2
cannot be installed because it seems always trying to install it to /usr/local
.
/sources/sfizz/build$ make install
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /sources/sfizz/dist/lib/libsfizz.a
-- Up-to-date: /sources/sfizz/dist/include/sfizz.h
-- Up-to-date: /sources/sfizz/dist/include/sfizz.hpp
-- Up-to-date: /sources/sfizz/dist/lib/pkgconfig/sfizz.pc
-- Installing: /sources/sfizz/dist/lib/libsfizz.so.0
-- Up-to-date: /sources/sfizz/dist/lib/libsfizz.so
-- Installing: /sources/sfizz/dist/bin/sfizz_jack
-- Installing: /sources/sfizz/dist/bin/sfizz_render
-- Up-to-date: /usr/local/lib/lv2/sfizz.lv2
CMake Error at lv2/cmake_install.cmake:49 (file):
file INSTALL cannot set permissions on "/usr/local/lib/lv2/sfizz.lv2":
Operation not permitted.
Call Stack (most recent call first):
cmake_install.cmake:44 (include)
How to change VST parameter names according to CC labels.
Steinberg::String newTitle = "...";
newTitle.copyTo(parameter->getInfo().title, 0, 128);
componentHandler->restartComponent(kParamTitlesChanged);
There needs to be a keyboard display in sfizz GUI.
This is important to be able to:
Here is a mock-up of what the keyboard could look like, I have placed the keyswitch indicators above the keys, as a keyswitch can be inside a region. I have used colour to indicate current region, but we may want to think about greying out notes outside of regions?
Middle C4 has a dot positioned under. This keyboard is designed to aid users in understanding what the SFZ Script is capable of- not for playability with the mouse. In which case a Virtual Keyboard that allows Musical Typing would be better equiped to handle.
Having the keyboard full range 0-127 allows consistency between SFZ Scripts, and simplifies the GUI display - as there is no need to include up/down octave UI elements.
Under sfztools/sfizz#595, I was told that sfizz as a plugin would save its settings properly if I save the project on a filesystem that supports symlinks.
However, this is not true for Carla.
I might anticipate mutual buck-passing here: sfizz expects the symlinks to be created under Carla, and Carla may well say "why do you need symlinks?"
I had really hoped to find an alternative to Ardour because its MIDI editing interface is unbearable. Waveform11 look(ed) promising but it doesn't support LV2 or JACK MIDI. So I thought maybe I could host sfizz LV2 in Carla and pipe MIDI/audio in and out. But... the project fails to restore properly. So after two days, I'm still at step 1.
(I'm rapidly running out of FLOSS options. I'd love to be able to say that I could complete this project with FLOSS but this is looking increasingly unlikely.)
First of all thanks for sfizz, this very compact sampler plugin.
Is there a way of getting the version information of the binary? It would help having this in the gui, I missed it while updating, but it's also handy when trying to clean up the plugin mess that sometimes happens through the freedom of different plugin folders and different installation methods.
"objdump -T sfizz.so | grep text" delivered some information for VST3, but it seemed a bit contradictory (or maybe it's not intended for a version check at all).
Thanks
really like this SFZ player. I use sforzando in Linux using WINE with much success and have followed the development of SFIZZ for a bit, I use Debian Buster at v10.3 and build it locally, both the standalone and LV2 work perfectly
my question is, are there plans to implement a GUI for the standalone and possibly the LV2?
The custom GUI for sfizz needs a simple way to display the CC's that are referenced and named in the SFZ Script.
I suggest a simple list approach, with a CC Slider & Label display, with a mini-map that shows the state of all 128 CC's to the right:
Only the CC's that are used in the SFZ Script would be displayed, with unused CC's shown in the mipmap
CC value could also be displayed to the right of the slider, such as:
The "official" version is VST3.
I want a VST2 32-bit version of sfizz.
Just in case, anybody read this issue are willing to help build the VST2 version, that will be great!
And better, if anybody can build an RTAS version or AAX-32 of sfizz.
Some things to remember/fix regarding the parameter automation.
Hi,
I cant browse after sfz files in qtractor. I tried both versions vst3 and lv2. Nothing is happen when I click to load a sfz file.
Tried it on Carla Rack...nope, didnt work.
Tested in LMMS also. Same problem. I must miss something.
OS: Manjaro KDE with everything updated
Latest kernel available for Manjaro.
Please statically link Linux binaries just like you do with the windows binaries, and only depend on mandatory system libs (here: libX11, libc).
Otherwise this can cause conflicts with hosts or other plugins in the same memory-space and also only works on a limited set of target systems.
Hi all. Reporting it here after talking a bit about it for it not to be forgotten.
I've been trying sfizz version 0.3.0 from the github release tarball. A strangish stuff is that on my first try, the LV2 looked like:
now it looks like:
Note the display order of the different items. It doesn't look to have any impact on the sounds, just it is strange that the display order is changing.
Note: launched with jalv.select.
HTH and thanks for sfizz!
Running sfizz-git r3699.ce2170c8-1. Often when creating a MIDI track in Ardour 6.7 I will only see the LV2 version (which crashes Ardour when opening the SFZ file). Clearing Ardour's plugin blacklist works but it is only a matter of time before it disappears again.
Anyway, everytime I click something on the UI, e.g. moving the CC 4 knob, it crashed VstHost (32-bit, vst3), also SaviHost. It's a random crash and just because when clicking on the UI. Maybe @jpcima knows something about it?
These formats are displaying VST3 because they are wrappers.
A workaround for this problem is not yet known.
With some larger libraries it can take some time before the sample set is fully loaded. Sfizz currently does not visually indicate when the loading is in progress, which slightly confuses me. Please add a visual indication (eg progress bar).
When restoring saved project using Ardour 6.6 and self compiled sfizz vst3 version 1.0.0 midi state is not restored properly. This results all sfizz plugin instances being completely silent.
Investigating further it looks like that undefined basic midi cc attributes like expression, volume, panning etc are set to 0 during initialization.
This didn't happen with sfizz 0.5.0 lv2 plugin instances.
The problem is as follows, please tell me if I miss anything:
midi:binding
property for ports which supposedly should do the same (i.e. provide a default binding which removes the CC from the midi stream and let the host resolve collisions out of the plugin). Problem is no host seem to implement it, or implement it this way, yet sfizz-lv2 assumes they do unless you pass in a compile-time switch.One immediate impact which is very apparent for users is that by default, sfizz-lv2 does not respond to the sustain pedal, which I think is not a good user experience. We can probably wait for the host to implement the midi bindings eventually, if ever, and just require users to manually map any other sfizz's "CCs" to actual controllers if they would want to, but sustain and sostenuto should probably be treated differently. I propose the following:
Only Windows 10 supports the custom font API, older versions must install the font files to make them recognized.
According to InnoSetup, it is feasible to do this under the Files section.
Source: "sfizz.vst3\Contents\Resources\Fonts\Roboto-Regular.ttf"; DestDir: "{autofonts}"; FontInstall: "Roboto Regular"; Flags: uninsneveruninstall; OnlyBelowVersion: 6.4
Note that the font MS FluentUI is custom-made using a fontforge script.
It's suggested to rename it with a name which is non-conflictual, like "sfizz Fluent System".
Fontforge script
Enviroment: EndeavourOS (Arch Linux), REAPER 6.26, VST3
Using sfizz develop build from OBS, sfizz-1617848785.39f56f2d-0
[sfizz] new synth
[New Thread 0x7fffdd6a0640 (LWP 6651)]
[New Thread 0x7fffdce9f640 (LWP 6652)]
[New Thread 0x7fffdc69e640 (LWP 6653)]
[New Thread 0x7fffdbe9d640 (LWP 6654)]
[New Thread 0x7fffdb69c640 (LWP 6655)]
[New Thread 0x7fffdae9b640 (LWP 6656)]
[Thread 0x7fffdae9b640 (LWP 6656) exited]
[New Thread 0x7fffdae9b640 (LWP 6657)]
[sfizz] about to create view: editor
[sfizz] about to open view with parent 0x260058a
[New Thread 0x7fffd51a4640 (LWP 6658)]
[New Thread 0x7fffd49a3640 (LWP 6659)]
(reaper:6633): GLib-CRITICAL **: 10:02:02.444: Failed to set scheduler settings: Operation not permitted
[New Thread 0x7fffabfff640 (LWP 6660)]
[New Thread 0x7fffab7fe640 (LWP 6661)]
[New Thread 0x7fffaaffd640 (LWP 6662)]
[Thread 0x7fffaaffd640 (LWP 6662) exited]
[Thread 0x7fffabfff640 (LWP 6660) exited]
[Thread 0x7fffd49a3640 (LWP 6659) exited]
[Detaching after vfork from child process 6664]
[Thread 0x7fffab7fe640 (LWP 6661) exited]
[Thread 0x7fffdae9b640 (LWP 6657) exited]
[Thread 0x7fffdc69e640 (LWP 6653) exited]
[Thread 0x7fffdce9f640 (LWP 6652) exited]
[Thread 0x7fffdb69c640 (LWP 6655) exited]
[Thread 0x7fffdbe9d640 (LWP 6654) exited]
[Thread 0x7fffdd6a0640 (LWP 6651) exited]
Thread 1 "reaper" received signal SIGSEGV, Segmentation fault.
--Type <RET> for more, q to quit, c to continue without paging--<RET>
0x00000000008e1dd6 in ?? ()
(gdb) bt
#0 0x00000000008e1dd6 in ()
sfztools/sfizz#1 0x00007ffff76f4098 in () at /opt/REAPER/libSwell.so
sfztools/sfizz#2 0x0000000000415756 in ()
sfztools/sfizz#3 0x00007ffff79a7b25 in __libc_start_main () at /usr/lib/libc.so.6
sfztools/sfizz#4 0x000000000041ae5a in _start ()
I supposed this is not enough information to gather, so let me know what should I do for a more meaningful log
Ubuntu 20.04. The error reads:
`reaper: ../../../../src/cairo-xcb-screen.c:219: _get_screen_index: Assertion `!"reached"' failed.
I have 2 screens.
After merging all of the files into /usr/local and pointing REAPER to them, it fails to scan properly and appears in the failed plugins menu. I should also clarify that there is no crash when scanning the plugin as mentioned in other issues.
The experimental REAPER builds that support LV2 accept the LV2 plugin provided, but VST3 still doesn't work.
Upon opening the UI and clicking to open a file, nothing happens.
Zenity apparently can not launch and produces the following message:
/usr/bin/zenity: symbol lookup error: /lib/x86_64-linux-gnu/libsecret-1.so.0: undefined symbol: g_input_stream_read_all_finish
It seems linked/similar to surge-synthesizer/surge#2455
Reproducing the issue
It's because this info is provided by OSC messages, and messaging works only when the sfizz synth is running.
This info should be cached on load, so that it can be sent regardless whether sfizz is active or not.
Test Evnironment: Linux / REAPER 6.24 / VST3
sfizz: d2b9eb7
#0 0x00007ffff79c9ef5 in raise () at /usr/lib/libc.so.6
sfztools/sfizz#1 0x00007ffff79b3862 in abort () at /usr/lib/libc.so.6
sfztools/sfizz#2 0x00007ffff7a0bf38 in __libc_message () at /usr/lib/libc.so.6
sfztools/sfizz#3 0x00007ffff7a13bea in () at /usr/lib/libc.so.6
sfztools/sfizz#4 0x00007ffff7a1547c in _int_free () at /usr/lib/libc.so.6
sfztools/sfizz#5 0x00007ffff7a18ca8 in free () at /usr/lib/libc.so.6
sfztools/sfizz#6 0x00007fffca0f004e in SPiano::~SPiano() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-linux/sfizz.so
sfztools/sfizz#7 0x00007fffca15e985 in VSTGUI::CViewContainer::removeAll(bool) () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-lin
ux/sfizz.so
sfztools/sfizz#8 0x00007fffca15ec2b in VSTGUI::CViewContainer::beforeDelete() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-linu
x/sfizz.so
sfztools/sfizz#9 0x00007fffca0b4f3f in VSTGUI::ReferenceCounted::forget() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-lin
ux/sfizz.so
sfztools/sfizz#10 0x00007fffca0e4235 in Editor::Impl::~Impl() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-linux/sfizz.so
sfztools/sfizz#11 0x00007fffca0b79c5 in SfizzVstEditor::~SfizzVstEditor() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-linux/sfi
zz.so
sfztools/sfizz#12 0x00007fffca0b7b69 in SfizzVstEditor::~SfizzVstEditor() () at /home/dude/.vst3/sfizz.vst3/Contents/x86_64-linux/sfi
zz.so
sfztools/sfizz#13 0x00007fffca0adc25 in non-virtual thunk to Steinberg::Vst::VSTGUIEditor::release() () at /home/dude/.vst3/sfizz.vst
There seems to remain issues in the X11RunLoop component.
Reaper crashes occasionally, with different backtraces, but timers seem often involved somewhat.
This is the deal with X11RunLoop
: it's a utility class which serves to implement Timer and FD event handling, which VST3 Linux requires to do at plugin-side.
The one which comes in VST3 SDK is flawed, it's unable to handle unusual edge cases and crashes.
For example, the case when you want to unregister a timer inside a timer callback.
I've made a custom implementation to cover some of these weird cases but it's not yet bulletproof I think.
It used a strategy which puts event handlers in a "zombie" state before clearing them from the vector.
As a wild guess, I think this might have to do with a handler getting re-registered after being unregistered into a zombie, all during the same iteration of event handling.
Sfizz build (inclusive of commit cbcc875) allows for loading of scala file and tuning preset but after several seconds of playing (maybe sometimes just shy of a minute), Sfizz crashes Ardour and Reaper (native)
Pan
knob as Biopolar L-R knobimage=
opcode)<region>
sample=dropped_wav_file.wav
Steps
Sometimes Reaper will crash instantly at the moment the plugin gets removed, and open a window with backtrace info.
problem.txt
The prime suspect is VST-SDK AUwrapper because we're not touching any AU code and VST3 is fine.
The VST parameters don't currently arrive in proper order.
It asks for an efficient way to sort the parameter points as they arrive from multiple queues.
The issue is with the symbol pango_font_metrics_get_height(...)
which comes from libpango 1.44 and up. Ardour currently bundles in libpango 1.40.4. I added a pull request on our VSTGUI fork which includes a runtime check for the libpango version before calling this method. This solves the problem for the VST3 version, since Ardour calls dlopen
with the RTDL_LAZY
flag for VST plugins. However, this does not solve the issue for the LV2 plugin, because suil loads UIs with the RTDL_NOW
flag and thus the UI fails to instantiate due to the missing symbol.
I think we should push the runtime check upstream in VSTGUI. To allow LV2 UIs, I think our solutions are either:
Numpad input doesn't work for me, VSTGUI does not forward the keycodes.
I find having access to this information extremely useful, as it allows me to know how heavy I am pushing the sampler. If the value reaches the voice limit, then I would know I likely have to increase it.
I'm not sure if this is a problem in sfz or sfizz UI, but anyways, some instrument seems to show key switches at wrong range areas. I'm experiencing it with UI Standard Guitar KSOP: https://unreal-instruments.wixsite.com/unreal-instruments/standard-guitar (caution: the instrument is huge, 700MB-ish)
I'm on Linux now and cannot really test how it loads on Sforzando (which the instrument is confirmed by the sfz creator), but I see the key switch ranges on my desktop are different from the screenshot on the instrument website. Here is an sfizz sshot from my desktop:
UI METAL GTX, a similar sfz instrument on the same website shows the keyswitches as expected, so it is not a simple range mismatch. I have no further idea on what are different (no right idea on how key ranges are specified in the sfz files) so I'd leave further investigation to you.
Confirmed build: 858028f. Loaded sfizz vst3 from JUCE AudioPluginHost on Linux.
/usr/lib/pd/extra
, check how it is for the other 2$0
symbols to prevent possible conflictAdd SFZ auto-reloading.
The implementation should do as follows:
_state
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.