attilammagyar / js80p Goto Github PK
View Code? Open in Web Editor NEWA MIDI driven, performance oriented, versatile synthesizer.
Home Page: https://attilammagyar.github.io/js80p/
License: GNU General Public License v3.0
A MIDI driven, performance oriented, versatile synthesizer.
Home Page: https://attilammagyar.github.io/js80p/
License: GNU General Public License v3.0
When switching between tabs or out of the "modulation chooser" dialog, various parts of the GUI are often not immediately redrawn, and you need to drag the window off the screen and back to force a redraw.
It's quite ugly that FloatParam::ratio_to_value()
and FloatParam::value_to_ratio()
rely on filter frequency parameters being the only log-scale ones.
Currently LFOs oscillate between min
and min + amount * (max - min)
, which makes it cumbersome to use them for vibrato by assigning them to the Fine Detune parameter of an oscillator, especially if one wants to also control the amount of the modulation.
This could be simplified a lot by adding a toggle switch to each LFO which would make it oscillate between (min+max)/2 - (max-min)*amount/2
and (min+max)/2 + (max-min)*amount/2
.
I had the impression that move constructors, copy elision, small-string optimization, and other modern C++ features will take care of it, but as @ZonderP pointed out in issue #6, I never actually confirmed these assumptions. Maybe passing around string_view
-s or const refs would actually be beneficial for most parts of the code.
All the frequency (Hz) based controllers go from:
This is basically unusable for synthesis.
All manual adjustment needs to be done to these parameters on a logarithmic scale - 1 volt per octave.
All internal modulation should work like that on frequency parameters too.
The knobs in the waveform harmonics section don't seem to be affecting the waveform harmonics in any audible way. Am I missing something?
When a parameter is updating the ramps on its event queue for a dynamic envelope, it may cancel previously scheduled envelope end and subsequent start events if those happen to fall on the same rendering block.
Envelope settings (especially attack and release) are honored in all notes, changed envelope settings are approached smoothly, and if release times are longer than how the new notes are triggered, then voice cancelling and retriggering is also smooth.
Occasional sudden jumps at the beginning and end of notes.
have you considered adding microtonal support
Either adding the MTS-ESP Library
or the Surge Synth Team Tuning Library
MTS-ESP would be ideal
Example of the problem in FL Studio: https://www.youtube.com/watch?v=nSicTFS2zTQ
The plugin should be capable of producing high quality sound, even without the "Use fixed size buffers" option being turned on.
MIDI CC in the VST 3 standard is implemented by exposing virtual parameters which are automatically assigned to MIDI CC events, which has the side-effect that those parameters can also be conveniently controlled and automated in various ways using the DAW's automation lanes. The latter part is actually a nice little feature, which probably could, and if so, should be implemented in the FST plugin version as well. (See issue #6.) Feature parity is a good thing.
Motivation: let's say the plugin exposed all its parameters. But then what should happen if a parameter has an automation track in the DAW and at the same time, is assigned to a controller within the plugin? This ambiguity could be resolved by introducing a new controller named Host, which would mean that parameters which have this controller assigned to them, would be automated by the DAW. But this seems redundant, because DAWs can already send automated MIDI CC events to the plugin, and the plugin already supports automation by MIDI CC, so the basic functionality already exists, without a single line of new code. ("The best code is no code at all.") However, being able to use the automation track vs. having to edit automations in the MIDI editor are sometimes very different in terms of convenience, hence the issue.
A new SDK version is out at https://www.steinberg.net/developers/
I'm getting this
C:/mingw64/bin/g++.exe -I./lib -I./src -D TEST_MAX_ARRAY_PRINT=20 -I./tests -g -D JS80P_VERSION_STR=dev -D JS80P_VERSION_INT=999000 -Wall -Werror -msse2 -ffast-math -O3 -o build/x86_64-w64-mingw32/test_gui.exe tests/test_gui.cpp
In file included from tests/gui_stubs.cpp:24,
from tests/test_gui.cpp:29:
./src/gui/gui.hpp:277:29: error: 'virtual JS80P::WidgetBase* JS80P::WidgetBase::own(JS80P::WidgetBase*)' was hidden [-Werror=overloaded-virtual=]
277 | virtual WidgetBase* own(WidgetBase* widget);
| ^~~
In file included from tests/gui_stubs.cpp:107:
./src/gui/widgets.hpp:125:22: note: by 'JS80P::ParamEditor* JS80P::TabBody::own(JS80P::ParamEditor*)'
125 | ParamEditor* own(ParamEditor* param_editor);
| ^~~
when I try to build latest main branch with '\build.bat' on Windows.
g++ --version gives me this:
g++.exe (MinGW-W64 x86_64-msvcrt-mcf-seh, built by Brecht Sanders) 13.1.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Any ideas?
(I'm trying to add some FST ;-) features - like support for bank of programs, program name(s), switching of program etc. as well as support for parameter automation in a host...)
Something about the zip files in the releases causes "suspicious download blocked" message to show up in chrome browser. is there something that would be easy to fix to prevent that?
Some are totally unnecessary, and the rest should use the features of C++.
#1 has been closed and the documentation says that logarithmic filter controls are "supported" but the actual controls are still linear. Do I have to switch the filters into a logarithmic mode? How? There is nothing in the docs.
The labels are extremely terse - a way to see the full parameter name without clicking on the modulation source would be very helpful. Some sort of mouse-over "tool tip"? Or display the full name of a knob currently being manually adjusted?
It would be nice to be able to synchronize the frequency of an LFO to the host's tempo.
(It could be just a small checkbox-like thing on the UI somewhere, which would make an LFO's frequency parameter to be interpreted as oscillations per beat instead of oscillations per second, Hz.)
This will require some decoupling between the GUI
and the Synth
, with a hint of ISP.
(The VST3 plugin could probably also benefit from it if the Controller
and the Processor
could be more separated, see Vst::kDistributable.)
Thank you for this interesting plugin.
I noticed that the Linux binary release zip file contains among other files the plugin binary called either js80p.vst3 or js80p.so.
I can't use the file as it is in the binary release zip file.
To make it work with the plugin hosts/DAWs I use, mainly Bespoke Synth, Ardour and Carla it needs to be put inside a correct VST3 bundle folder structure ( Steinberg VST3 Plug-in Format Structure docs ).
In short, the zip files should contain a folder and files with this structure:
js80p.vst3/
└── Contents
└── x86_64-linux
└── js80p.so
EDIT: I see you already have a merged release with the correct structure, so this problem should be addressed only for the Linux VST3 single file?
thanks for making this synth available for Linux systems
for the VST3 a few tweaks are needed
rather than js80p.vst3 being the name of the binary it should be a folder with subfolders Contents and x86_64-linux
js80p.vst3/Contents/x86_64-linux/
the folder x86_64-linux would have the binary and presets
renaming the binary from js80p.vst3 to js80p.so would be the last step
From #11:
But - when it comes to preset handling, something is not quite right.
It doesn't behave anymore as it did with my initial changes to support bank and preset handling.
Probably related to the changes you did, where - if I understand the code correctly - related 'work' somehow gets deferred to when audio processing takes place. Since I still can't debug, I'm not sure what's going on.
But with my changes js80p behaved well - the same way as does the majority of FST plugins which support banks and thus more than just one program.
I'm not sure if you know SaviHost? It's Windows only, but it is used by a lot of FST developers to easily check, if their bank and program handling works as it should. Basically it is not a DAW, but 'just' a host by which you can make any FST a standalone.
And it supports the standard FST stuff when it comes to loading and saving of banks and programs and stepping thru the programs either backwards or forwards or just jumping to (loading a program at) a specific position. Also Savihost remembers the last program index at exit (probably somewhere in the Windows registry) and on restarting with the same FST, it immediately tells the FST to load the program at that position.
Here some of my observations with Savihost together with js80p:
1.) If - whilst js80p is hosted by Savihost - I e.g. load the program at index 40 and then exit Savihost and then open js80p again with Savihost, then it always starts at index 0 (wrong!). But when I then click the 'next program arrow', it jumps to the index used at last exit (40 in this example) + 1. Very strange and unfortunately quite unexpected and wrong.
2.) Again with js80p loaded in Savihost. When I go to an empty slot - eg. at index 31 this time and then load a previously saved preset file (fxp) - it is just plain wrong - the GUI doesn't get updated and the sound is still the 'blank' sound there.
And then pressing 'Next program' makes Savihost somehow look like it was faulty, because then js80p goes to the previous index!
It's really a bit hard to describe - I just found out that if you use Savihost's PlugIn menu 'Programs n - m' entries then js80p just behaves super weired. It somehow always jumps to the position which was previously chosen.
Makes working with it impossible.
As said - I (re)tried with my old version - and everything works as it should. The same as e.g 'blooo' by 'fullbucket music' and most of all FSTs I know.Edit:
Here the link to Savihost in case you want to try out: https://www.hermannseib.com/english/savihost.htm
And here the link where you could DL blooo FST to see how a well-behaving FST works with it: https://www.fullbucket.de/music/blooo.htmlAlso: I for sure also tried in energyXT, where there are the same resp. similar issues.
Edit 2:
And here my original version:
https://github.com/ZonderP/js80p-zp/commits/MyFSTBankAndPresetHandling
Hello, I'm working on porting archlinux to riscv, and want to know are there any plans to add riscv64 support for this project?
I already did some job here: https://github.com/aimixsaka/js80p (stil not fully tested and may contains some breaking change).
If it's ok i will help to maintain this project on riscv for the long term.
Thank you :)
Instructions indicate that this project requires mingw toolchain to compile the VST3. Wondering if this could be modified to enable Microsoft toolchain / Visual Studio without mingw, as this is would be a more common development environment.
Much thanks!
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.