OctaSine icon indicating copy to clipboard operation
OctaSine copied to clipboard

Various suggestions/feedback

Open bryc opened this issue 3 years ago • 35 comments

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)

bryc avatar Feb 23 '22 17:02 bryc

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 avatar Apr 08 '22 13:04 greatest-ape

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.

greatest-ape avatar Apr 28 '22 12:04 greatest-ape

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

bryc avatar Apr 28 '22 18:04 bryc

Alright, nice! Here are some fresh builds:

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

greatest-ape avatar Apr 28 '22 19:04 greatest-ape

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

bryc avatar Apr 29 '22 16:04 bryc

@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) ?

greatest-ape avatar May 02 '22 12:05 greatest-ape

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.

bryc avatar May 02 '22 17:05 bryc

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

greatest-ape avatar May 03 '22 09:05 greatest-ape

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

bryc avatar May 03 '22 20:05 bryc

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?

greatest-ape avatar May 03 '22 21:05 greatest-ape

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.

bryc avatar May 03 '22 22:05 bryc

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?

greatest-ape avatar May 04 '22 19:05 greatest-ape

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 avatar May 04 '22 22:05 bryc

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.

bryc avatar May 05 '22 02:05 bryc

Yes, you’re reading that right. Ok, that’s completely understandable.

On 5 May 2022, at 04:07, bryc @.***> wrote:

 Here is what that command is giving me:

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.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.

greatest-ape avatar May 05 '22 06:05 greatest-ape

This build fixed a similar issue for someone else:

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

greatest-ape avatar May 05 '22 21:05 greatest-ape

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

image

Will update with proper feedback on the weekend.

bryc avatar May 05 '22 21:05 bryc

Great! Thanks.

greatest-ape avatar May 05 '22 21:05 greatest-ape

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.

bryc avatar May 08 '22 22:05 bryc

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!

greatest-ape avatar May 10 '22 17:05 greatest-ape

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!

bryc avatar Jun 16 '22 20:06 bryc

@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 avatar Jun 28 '22 14:06 greatest-ape

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

greatest-ape avatar Jul 24 '22 21:07 greatest-ape

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.

bryc avatar Jul 24 '22 21:07 bryc

Yeah, I agree.

greatest-ape avatar Jul 24 '22 22:07 greatest-ape

@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

greatest-ape avatar Jul 31 '22 13:07 greatest-ape

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.

bryc avatar Aug 01 '22 00:08 bryc

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 avatar Aug 01 '22 08:08 greatest-ape

@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

greatest-ape avatar Aug 23 '22 12:08 greatest-ape

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

bryc avatar Aug 23 '22 20:08 bryc