Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Various suggestions/feedback #45

Open
bryc opened this issue Feb 23, 2022 · 35 comments
Open

Various suggestions/feedback #45

bryc opened this issue Feb 23, 2022 · 35 comments
Labels
enhancement New feature or request

Comments

@bryc
Copy link

bryc commented Feb 23, 2022

This might be better suited for Discussions tab (if it were enabled in this Repo).

Playing with OctaSine more, I see a lot of potential, and I have a whole bunch of suggestions/thoughts/ideas. Maybe some are good. Apologies if its overwhelming - I'm not expecting anything. :)

Mode for relative pitches

A way to use "Octave" and "Semitone" instead of "Ratio" and "Free", maybe a lock switch like this:
image
The benefit would be more traditional pitch adjustments, can allow easier fourth/fifth intervals.

A further 3rd mode for Fixed frequencies (for atonal or percussive sounds) may be useful.

Slight adjustments to FM

While Mod. Index is exponential, this is actually quite different to any other FM synth. In fact, I've never even come across "Mod Index" - FM is usually achieved strictly through operator amplification or feedback. This is not a bad thing, but I think it has some implications.

In OctaSine I typically find myself setting the Mod. Index and not touching it further (because the non-linearity can be unpredictable). I then would use operator volumes or feedback to finely tune it, but the issue I find is that those parameters do not go far enough.

Some possible ways to improve this:

  • Allowing Mod. Index to be switched into a linear scale might be all that is needed, perhaps a toggle button to switch between the two like so:
    image

  • Keep Mod. Index exponential, but allow for higher modulation amount ranges on both operator amplitudes and feedback amount. Perhaps compare the ranges with Piper2 (free Windows FM vst) - the equivalent knobs in this have a more pronounced effect at the maximum values (and personally I think its better that way).

Move the FM destination control to the operator panel.

I think it would be better and more intuitive if the FM destinations were right inside the operator panels:

image

This way, the intended routing combinations are more apparent (at least to me). And you could even show a line/arrow diagram to show the signal flow.

You may also consider allowing multiple destinations (Checkbox instead of Radio buttons), so that for example, operator 4 can affect 3, 2 and 1 all at once. This would allow a few DX21 algorithms currently not possible to become possible.

Also you may want to use your nice waveform box here for the Sine/Noise as it takes up less space. :)

Improve Envelope editor

The envelope editor is a bit of a slog to use IMO, constantly needing to zoom and pan the view. I think it would be better if the need to pan/zoom can be eliminated.

Here is I think a potential improvement:

image

  • The time and level can be shown in the box under it. Zoom/pan not necessary.
  • One extra point added, which can allow some DX21 / DX7 shapes not possible with normal ADSR.
  • Clicking and drag lines themselves can 'bend' the curve (tension), allowing for full range between linear, logarithmic and exponential. VERY optional but that would be amazing. 😋

Other ideas (Low priority)

  • Noise / Sample and Hold Waveform for LFO
  • Pitch bend range control (0-12)
  • Portamento / Glide
  • Operator waveforms - TX81z style waveforms are probably best (mathematical transformations of sine wave). Invert polarity? Rectify? Absolute Value? Floor/Ceil?
  • Each LFO can be assigned to more than one target with different amounts.
  • Add Mod Wheel to work somehow
  • Key tracking (alter volume or envelope speed at different octaves)
  • Ability to quickly disable operators

Silly ideas

  • Waveform interpolation tone control (Morph between Sine and selected waveform)
  • Less harsh noise? Pink noise? Or maybe just remove entirely - because FM itself can generate noise at high amounts.
  • Per-operator Velocity control? (to allow for refined control of dynamics)
  • ADSR able to Loop? (Crazy idea but might be good)
@greatest-ape greatest-ape added the enhancement New feature or request label Feb 28, 2022
@greatest-ape
Copy link
Owner

Lots of suggestions! :D

I've done some changes to routing to make it more intuitive and to address some of your points:

  • Set modulation index (mod out) in modulator, not carrier
  • Increase range of feedback parameter to match modulation index
  • Remove volume parameter
  • Replace additive factor with mix out parameter, which doesn't
    affect modulation output
  • Add per-operator modulation target picker to GUI

If you have time, please try out the changes:

OctaSine-tmp-2022-04-08-macOS-Intel.zip
OctaSine-tmp-2022-04-08-Windows.zip

@greatest-ape
Copy link
Owner

I've done a lot more changes. If you're still interested in trying them out, please tell me, and I'll upload a more recent build.

@bryc
Copy link
Author

bryc commented Apr 28, 2022

Sinehow I completely missed the previous message, sorry about that. Happy to give it a test today or tomorrow. 😃

@greatest-ape
Copy link
Owner

Alright, nice! Here are some fresh builds:

OctaSine-tmp-2022-04-28-Windows.zip
OctaSine-tmp-2022-04-28-macOS-Intel.zip

@bryc
Copy link
Author

bryc commented Apr 29, 2022

Hmm, it won't load in FL Studio now. Same thing with the earlier build. 😢 It validates fine when scanning, but loading the GUI fails. Seems to make sounds still though, and the manual parameter list is accessible.

image

@greatest-ape
Copy link
Owner

greatest-ape commented May 2, 2022

@bryc Alright. After the crash, is there a log file in C:\Users\Alice\AppData\Local\OctaSine\OctaSine\cache\OctaSine.log (replace Alice with your user account name) ?

@bryc
Copy link
Author

bryc commented May 2, 2022

Hm, no. I only see this:

C:\Users\bryc\AppData\Roaming\OctaSine\OctaSine.json

I don't see any OctaSine folder anywhere else in AppData.

@greatest-ape
Copy link
Owner

OK! How about when using this build? The log file should now appear in the same folder as OctaSine.json.

OctaSine-tmp-2022-05-03-Windows.zip
OctaSine-tmp-2022-05-03-macOS-Intel.zip

@bryc
Copy link
Author

bryc commented May 3, 2022

Unfortunately not with that build either. It could be that the GUI has to initialize first and its just not hitting that code?

It doesn't appear to even create the OctaSine folder or json file. (It must have been saved there previously from an old version).

@greatest-ape
Copy link
Owner

OK. The settings file is indeed only saved by the GUI, but the log file should be created when opening the plugin, regardless of the GUI.

Could you please try cloning the git repository and running cargo run -p run_gui --features glow? And if the GUI doesn't start, is there any terminal output?

@bryc
Copy link
Author

bryc commented May 3, 2022

What is Cargo? I don't think I have that? Keep in mind I'm just a JS plebian on Windows who uses GitHub Desktop. I don't really have any compilers or IDEs. But if it's something that's portable like MinGW or a quick install like Python I could try.

Also, it doesn't seem to work in Savihost either (a free VST host for Windows), might be easier to test it with that.

@greatest-ape
Copy link
Owner

Cargo is the Rust package manager! It should be easy to install from https://rustup.rs/ . Have you run commands in a terminal / on the command line previously?

OK, there is likely an issue with setting up the graphics. When running the command I mentioned, any error logs should be printed to the terminal, so it would be very helpful :-) What version of Windows are you running?

@bryc
Copy link
Author

bryc commented May 4, 2022

I'm running Windows 10 20H2 (10.0.19042.630).

I'll give the Cargo thing a shot in a bit. I can use terminals decently, but I just can't compile stuff half the time (requiring every flavor of build environment under the sun, from ruby to cmake to msys1 to msys2, often requiring linux etc, just a pain for a novice)

@bryc
Copy link
Author

bryc commented May 5, 2022

Here is what that command is giving me (tail end at least):

  Downloaded 129 crates (6.4 MB) in 4.26s (largest was `winapi` at 1.2 MB)
   Compiling cfg-if v1.0.0
   Compiling proc-macro2 v1.0.37
   Compiling unicode-xid v0.2.3
   Compiling autocfg v1.1.0
   Compiling syn v1.0.92
   Compiling ppv-lite86 v0.2.16
   Compiling log v0.4.17
   Compiling version_check v0.9.4
   Compiling num_cpus v1.13.1
   Compiling futures-core v0.3.21
error: linker `link.exe` not found
  |
  = note: program not found

note: the msvc targets depend on the msvc linker but `link.exe` was not found

note: please ensure that VS 2013, VS 2015, VS 2017, VS 2019 or VS 2022 was installed with the Visual C++ option

error: could not compile `log` due to previous error
warning: build failed, waiting for other jobs to finish...
error: build failed

I really don't have the space or time to install VS just for this, if I'm reading this right.

@greatest-ape
Copy link
Owner

greatest-ape commented May 5, 2022 via email

@greatest-ape
Copy link
Owner

This build fixed a similar issue for someone else:

OctaSine-tmp-2022-05-05-Windows.zip
OctaSine-tmp-2022-05-05-macOS-Intel.zip

@bryc
Copy link
Author

bryc commented May 5, 2022

Alright, that seems to fix the issue. Works now in both Savihost and FL Studio!

image

Will update with proper feedback on the weekend.

@greatest-ape
Copy link
Owner

Great! Thanks.

@bryc
Copy link
Author

bryc commented May 8, 2022

Hello! Loving the changes, no crashes or issues so far.

The increase in feedback range was a great change, it feels less constrained, like you can now achieve FM sounds you couldn't before. The multiple targets are awesome too, really increases the palette to create complex and gnarly sounds! Having everything there in the operator panel makes the workflow a breeze. Muting operators is super helpful for focusing on what specific operators are doing.

The new GUI is much nicer, with clearer labels, and I like the splash of color! But it still doesn't fit perfectly to laptops/720p. Though by reducing the vertical margins to 1px it can just barely make it, example below (sorry if it butchers your design):
(I also see the connection box is slightly vertically offset with the rest of the boxes.)
mu

The biggest criticism I still have is the envelope editor, the zoom and pan/scroll stuff is just really confusing and feels like it requires more work than it needs to, just to quickly dial in a shape/slope.

Great work over all! This is quickly becoming the best free/open FM synth out there.

@greatest-ape
Copy link
Owner

Hello! Loving the changes, no crashes or issues so far.

The increase in feedback range was a great change, it feels less constrained, like you can now achieve FM sounds you couldn't before. The multiple targets are awesome too, really increases the palette to create complex and gnarly sounds! Having everything there in the operator panel makes the workflow a breeze. Muting operators is super helpful for focusing on what specific operators are doing.

Great to hear!

The new GUI is much nicer, with clearer labels, and I like the splash of color! But it still doesn't fit perfectly to laptops/720p. Though by reducing the vertical margins to 1px it can just barely make it, example below (sorry if it butchers your design): (I also see the connection box is slightly vertically offset with the rest of the boxes.) mu

I’ve experimented quite a bit with trying to reduce the size, but I haven’t been able to get something that looks as good so far. But it’s a valid point and I’d like it to work well on smaller screens as well.

Thanks for spotting the size offset thing too.

The biggest criticism I still have is the envelope editor, the zoom and pan/scroll stuff is just really confusing and feels like it requires more work than it needs to, just to quickly dial in a shape/slope.

I want to rewrite the envelope widget, but it’s a lot of work and probably won’t land in the next release :-)

Great work over all! This is quickly becoming the best free/open FM synth out there.

Thanks a lot!

@bryc
Copy link
Author

bryc commented Jun 16, 2022

I noticed the global volume/pitch control was removed from the LFO target list, are you sure that's a necessary change? That complicates the process of doing a tremolo/vibrato effect as it would require one LFO for each audible operator, and so one loses out on precious LFOs just to ensure vibrato is working for each audible operator.

Building on a previous suggestion: Something that could address this and accomplish much more would be allowing right click to toggle multiple destinations in the dropdown for each LFO, making each LFO much more flexible. So I can still apply vibrato to each Freq Fine parameter with one LFO. Though no idea how possible/difficult that would be.

This could be taken further by using the horizontal position to specify a percentage in relation to the LFO's base Amount, instead of just on/off. Like a drag bar. Of course this makes patch files larger, but memory is getting cheap :). Mockup:
image

Also, I like the drag zoom control of the ADSR envelope, that definitely makes it more manageable!

@greatest-ape
Copy link
Owner

@bryc

Thanks for your feedback!

Removing the LFO master targets might have been premature. I might add them back, if I can do it in a way that doesn’t break existing patches.

When it comes to your LFO concept, it is really cool, but it won’t be VST2 compatible, unfortunately, since the number of possible combinations of targets will be too great to fit in a 32-bit floating point number between 0.0 and 1.0, which is how parameters are transferred between DAW and plugin with that protocol :-(

Great! Be sure to try out the fit and distribute buttons too, they’re very useful.

@greatest-ape
Copy link
Owner

greatest-ape commented Jul 24, 2022

@bryc When setting master volume as a LFO target, do you think modulation should be affected too (like with the operator volume parameters)? E.g. audio coming out of an operator modulating another would be affected. I think that probably only post-modulation volume should be affected, but I could implement it either way.

@bryc
Copy link
Author

bryc commented Jul 24, 2022

Hmm, IMO it's probably best that it only affect the output gain, and not affect any global operator modulation amounts. Usually a master volume control acts like a mixer track fader (you have a sound, and you either want it quieter or louder), and people will not expect it to alter the brightness of the sound. That sort of variable control is best achieved with velocity sensitivity on a per-note basis.

There's this synth that comes with FL Studio called Wasp XT and it's unique in that changing the "channel volume" knob also lowers the filter (no other synth built into FL acts that way), which trips me up when all I'm trying to do is raise or lower the volume of that particular track.

Though as an additional "overall fine modulation" or "brightness" knob, it could potentially be useful.

@greatest-ape
Copy link
Owner

Yeah, I agree.

@greatest-ape
Copy link
Owner

@bryc I'm working on support for exporting/importing patches and patch banks from the GUI, as well as setting values from text. Would you care to try this build out? :-)

OctaSine-tmp-2022-07-31-macOS-Intel.zip
OctaSine-tmp-2022-07-31-Windows.zip

@bryc
Copy link
Author

bryc commented Aug 1, 2022

Seems to work fine. I'd say "Save bank" instead of "Save all" is less ambiguous/confusing. You might consider adding a dropdown menu for these options, as it's more scalable too (could add be used for both patch saving, loading scala tuning files if that becomes important, etc). I appreciate the patch name edit ability as some DAWs neglect the option to modify FXP/FXB patch names so I end up using SaviHost for that.

@greatest-ape
Copy link
Owner

Thanks for having a look, and great that it works!

Yes, using a dropdown is a good idea. I want to add actions for clearing the current patch and clearing the whole bank too, and they won’t fit well as buttons.

@greatest-ape
Copy link
Owner

@bryc I'm working on functionality for displaying a part of the waveform for each operator. Take a look if you want to :-)

OctaSine-tmp-2022-08-23-Windows.zip
OctaSine-tmp-2022-08-23-macOS-Intel.zip

@bryc
Copy link
Author

bryc commented Aug 23, 2022

Looks pretty cool! Reminds me of the waveform display FM7 had:
image

@greatest-ape
Copy link
Owner

Thanks! Oh, that's very nice. Having a spectrum is pretty cool too.

I've been working on improving the panning, both for mix and modulation output, fixing a discrepancy between scaling of modulation output and feedback. Would you like to try it out?

OctaSine-tmp-2022-08-26-Windows.zip

@bryc
Copy link
Author

bryc commented Aug 28, 2022

Hmm, I don't really notice much of a difference. I'd like to say it feels like modulation is more pronounced when panning, or the overall stereo image sounds better now, but that could be just placebo. Doesn't sound broken at least.

@greatest-ape
Copy link
Owner

Alright, thanks, that’s useful feedback anyway. And I don’t think it’s placebo ;-)

@bryc
Copy link
Author

bryc commented Aug 28, 2022

organ.mp4

Also here's a cool organ preset. feel free to add it as a factory patch if you like :)
Dusty Organ.zip

@bryc
Copy link
Author

bryc commented Apr 1, 2024

Got another (light) suggestion :)

I was in the process of porting some FM sounds (or checking to see if porting was possible), from a particular chiptune FM synth part of pixelbox.js/Patatracker:

image
image
image

I seemed like a fairly decent match, but there's definitely a difference in the mod matrix.

The obvious thing is that in OctaSine, you cannot modulate any operators with the 4th operator, which is possible here.

But another thing possible here but not in OctaSine, is that each destination has its own modulation amount, whereas in OctaSine, you are locked to a specific modulation amount which is either on or off for a particular destination.

So the bass patch (third and final pic) above cannot be directly translated to OctaSine, but the others are fine.

One workaround would be to try to find a center value of sorts that can be applied in all cases like this:

image

So in this, a modulation amount of "11" for the first operator is being applied to all 3 other operators.
And a modulation amount of "22" for the second operator is being applied to 4th and 5th row.
Fortunately this change doesn't have a massive effect on the bass sound, so it should be roughly achievable in OctaSine.

But I think it would allow for extra flexibility/finer control if this limitation could be eliminated by setting each modulation amount in OctaSine's modulation matrix somehow:

image

It could potentially be a separate mode, to "Unlock the matrix" so to speak, an advanced mode of sorts, while the current scheme may be the more beginner friendly default mode.

It would certainly help people like me who may want to bring over different 4-op synth patches that use routings that may not be covered by the current setup.

Just a thought. :)
Though I totally understand if this is something you already considered and found unviable!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants