SevenDelay

Discuss anything new and newsworthy! See http://planet.linuxaudio.org and https://libreav.org/news for more Linux Audio News!

Announcements of proprietary software may fit better in the Marketplace.


Moderators: raboof, MattKingUSA, khz

stanlea
Established Member
Posts: 700
Joined: Wed Apr 25, 2012 9:49 pm
Has thanked: 41 times
Been thanked: 23 times

Re: SevenDelay

Post by stanlea »

yes...
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

Hi, stanlea.

It looks like liblo is missing on your system. What distribution are you using?

Package name is `liblo-dev` for Debian/Ubuntu, `liblo liblo-devel` for Fedora.
stanlea
Established Member
Posts: 700
Joined: Wed Apr 25, 2012 9:49 pm
Has thanked: 41 times
Been thanked: 23 times

Re: SevenDelay

Post by stanlea »

ryukau wrote:Hi, stanlea.

It looks like liblo is missing on your system. What distribution are you using?

Package name is `liblo-dev` for Debian/Ubuntu, `liblo liblo-devel` for Fedora.
Thanks ryukau. I installed liblo but now I have another fail (extracts from code... wich is very long) :

Code: Select all

parameter.hpp:295:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return 0.0;
                  ^~~~~
parameter.hpp:295:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return 0.0;
                  ^~~~~
                  valloc
parameter.hpp:296:5: error: ‘value’ was not declared in this scope
     value[index]->setFromRaw(raw);
     ^~~~~
parameter.hpp:296:5: note: suggested alternative: ‘valloc’
     value[index]->setFromRaw(raw);
     ^~~~~
     valloc
parameter.hpp: In member function ‘double GlobalParameter::updateValue(uint32_t, float)’:
parameter.hpp:302:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return 0.0;
                  ^~~~~
parameter.hpp:302:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return 0.0;
                  ^~~~~
                  valloc
parameter.hpp:303:5: error: ‘value’ was not declared in this scope
     value[index]->setFromNormalized(normalized);
     ^~~~~
parameter.hpp:303:5: note: suggested alternative: ‘valloc’
     value[index]->setFromNormalized(normalized);
     ^~~~~
     valloc
In file included from plugin.cpp:26:0:
dsp/dspcore.hpp: At global scope:
dsp/dspcore.hpp:176:8: error: ‘vector’ in namespace ‘std’ does not name a template type
   std::vector<float> transitionBuffer{};
        ^~~~~~
plugin.cpp:170:8: error: ‘vector’ in namespace ‘std’ does not name a template type
   std::vector<std::pair<uint8_t, uint32_t>> lastNoteId;
        ^~~~~~
plugin.cpp:171:8: error: ‘vector’ in namespace ‘std’ does not name a template type
   std::vector<uint8_t> alreadyRecievedNote;
        ^~~~~~
dsp/../parameter.hpp: In member function ‘void GlobalParameter::initParameter(uint32_t, DISTRHO::Parameter&)’:
dsp/../parameter.hpp:277:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return;
                  ^~~~~
plugin.cpp: In constructor ‘DISTRHO::SyncSawSynth::SyncSawSynth()’:
plugin.cpp:36:5: error: ‘lastNoteId’ was not declared in this scope
     lastNoteId.reserve(dsp.maxPoly() + 1);
     ^~~~~~~~~~
dsp/../parameter.hpp:277:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return;
                  ^~~~~
                  valloc
dsp/../parameter.hpp:278:5: error: ‘value’ was not declared in this scope
     value[index]->setParameterRange(parameter);
     ^~~~~
dsp/../parameter.hpp:278:5: note: suggested alternative: ‘valloc’
     value[index]->setParameterRange(parameter);
     ^~~~~
     valloc
dsp/../parameter.hpp: In member function ‘double GlobalParameter::getParameterValue(uint32_t) const’:
dsp/../parameter.hpp:283:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return 0.0;
                  ^~~~~
dsp/../parameter.hpp:283:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return 0.0;
                  ^~~~~
                  valloc
dsp/../parameter.hpp:284:12: error: ‘value’ was not declared in this scope
     return value[index]->getRaw();
            ^~~~~
dsp/../parameter.hpp:284:12: note: suggested alternative: ‘valloc’
     return value[index]->getRaw();
            ^~~~~
            valloc
dsp/../parameter.hpp: In member function ‘void GlobalParameter::setParameterValue(uint32_t, float)’:
dsp/../parameter.hpp:289:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return;
                  ^~~~~
plugin.cpp:36:5: note: suggested alternative: ‘noteId’
     lastNoteId.reserve(dsp.maxPoly() + 1);
     ^~~~~~~~~~
     noteId
plugin.cpp:37:5: error: ‘alreadyRecievedNote’ was not declared in this scope
     alreadyRecievedNote.reserve(dsp.maxPoly());
     ^~~~~~~~~~~~~~~~~~~
dsp/../parameter.hpp:289:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return;
                  ^~~~~
                  valloc
dsp/../parameter.hpp:290:5: error: ‘value’ was not declared in this scope
     value[index]->setFromRaw(raw);
     ^~~~~
dsp/../parameter.hpp:290:5: note: suggested alternative: ‘valloc’
     value[index]->setFromRaw(raw);
     ^~~~~
     valloc
dsp/../parameter.hpp: In member function ‘double GlobalParameter::parameterChanged(uint32_t, float)’:
dsp/../parameter.hpp:295:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return 0.0;
                  ^~~~~
dsp/../parameter.hpp:295:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return 0.0;
                  ^~~~~
                  valloc
dsp/../parameter.hpp:296:5: error: ‘value’ was not declared in this scope
     value[index]->setFromRaw(raw);
     ^~~~~
dsp/../parameter.hpp:296:5: note: suggested alternative: ‘valloc’
     value[index]->setFromRaw(raw);
     ^~~~~
     valloc
dsp/../parameter.hpp: In member function ‘double GlobalParameter::updateValue(uint32_t, float)’:
dsp/../parameter.hpp:302:18: error: ‘value’ was not declared in this scope
     if (index >= value.size()) return 0.0;
                  ^~~~~
dsp/../parameter.hpp:302:18: note: suggested alternative: ‘valloc’
     if (index >= value.size()) return 0.0;
                  ^~~~~
                  valloc
dsp/../parameter.hpp:303:5: error: ‘value’ was not declared in this scope
     value[index]->setFromNormalized(normalized);
     ^~~~~
dsp/../parameter.hpp:303:5: note: suggested alternative: ‘valloc’
     value[index]->setFromNormalized(normalized);
     ^~~~~
     valloc
plugin.cpp: In member function ‘void DISTRHO::SyncSawSynth::handleMidi(DISTRHO::MidiEvent)’:
plugin.cpp:113:11: error: ‘lastNoteId’ was not declared in this scope
           lastNoteId.begin(), lastNoteId.end(),
           ^~~~~~~~~~
plugin.cpp:113:11: note: suggested alternative: ‘noteId’
           lastNoteId.begin(), lastNoteId.end(),
           ^~~~~~~~~~
           noteId
plugin.cpp:123:37: error: ‘alreadyRecievedNote’ was not declared in this scope
           for (const auto &noteNo : alreadyRecievedNote) {
                                     ^~~~~~~~~~~~~~~~~~~
plugin.cpp:127:11: error: ‘lastNoteId’ was not declared in this scope
           lastNoteId.push_back(std::pair<uint8_t, uint32_t>(ev.data[1], noteId));
           ^~~~~~~~~~
In file included from dsp/dspcore.cpp:18:0:
dsp/dspcore.hpp: At global scope:
dsp/dspcore.hpp:176:8: error: ‘vector’ in namespace ‘std’ does not name a template type
   std::vector<float> transitionBuffer{};
        ^~~~~~
dsp/dspcore.cpp: In member function ‘void Note<Sample>::setup(int32_t, Sample, Sample, Sample, GlobalParameter&)’:
dsp/dspcore.cpp:56:13: error: ‘struct GlobalParameter’ has no member named ‘value’
   if (param.value[ParameterID::osc1PhaseLock]->getRaw())
             ^~~~~
dsp/dspcore.cpp:57:25: error: ‘struct GlobalParameter’ has no member named ‘value’
     saw1.setPhase(param.value[ParameterID::osc1Phase]->getRaw());
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

I've fixed it in this morning. Try `git pull` then build again.

`#include <vector>` was missing at the top of parameter.hpp. I'm not sure why this was successfully compiled while developing.
stanlea
Established Member
Posts: 700
Joined: Wed Apr 25, 2012 9:49 pm
Has thanked: 41 times
Been thanked: 23 times

Re: SevenDelay

Post by stanlea »

ryukau wrote:I've fixed it in this morning. Try `git pull` then build again.

`#include <vector>` was missing at the top of parameter.hpp. I'm not sure why this was successfully compiled while developing.
Indeed it works now. Both plugins load fine in Carla (including GUI). My first impression is that the sound is very good. Althought I suck at programming synths, I found the syncsaw very dynamic.
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

Thanks for trying out.

I'll put some tips to keep output sounds to stay tonal. Hope this helps.

Options under Sync knob has 4 items. Off and Ratio are just switch for hard-sync. Fixed-Master and Fixed-Slave aren't suitable for making tonal sounds but might be useful for creating sound effects. Always turn up Sync knob slowly with shift + drag. Sweet spot is narrow.

Only use bottom left parameters when you want some literal noise. They are meant to be used for equivalent of guitar bending, but with more devastating sounds.

It's better to stay under 12 o'clock for To Freq/Sync knobs on top right. Tuning them over 12 o'clock might be good for low frequency tones.

Tuning both Cut and Res knob under 12 o'clock might sounds too quiet. Those regions of Cut and Res could be useful with turning To Cut around 3 o'clock or higher.

Note that some combination of parameters produce DC offset. I'd recommend to insert high-pass filter after the synth for safety, and monitoring outputs with oscilloscope to catch problem faster. I didn't put high-pass on synth because DC offset sometimes makes nice sounds when going through distortion.

When checking Invert, slightly turns up one of Cent knob and/or some of To Freqs makes it to avoid sounds become too thin (impulse like waveform).

Also I've updated SyncSawSynth LV2 to version 0.1.3. I made some optimization for filter and math function. It runs a bit faster now. Also added a parameter to change number of voice. Reducing number of voice will greatly helps to lower DSP load.
stanlea
Established Member
Posts: 700
Joined: Wed Apr 25, 2012 9:49 pm
Has thanked: 41 times
Been thanked: 23 times

Re: SevenDelay

Post by stanlea »

Now with a third plugin "wavecymbal" : metallic sounds and also can work as effect. Thanks for that.
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

I added another synth/effect FDNCymbal to LV2Plugins repository.

https://github.com/ryukau/LV2Plugins

FDNCymbal sounds like gently hitting a metal plate. Sometimes it sounds similar to ride cymbal, but far from crash cymbal.
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

Added another one, TrapezoidSynth to repository.

https://github.com/ryukau/LV2Plugins

TrapezoidSynth uses some fancy algorithm for oscillator, but the sound is just another VA synth. Demo video is available on YouTube.

https://www.youtube.com/watch?v=Er38jzmMHjY

There is a breaking change that URI of the plugins are changed. It was changed because I used example.com without much thought. To avoid breaking existing projects, open DistrhoPluginInfo.h and change as following. Sorry for inconvenience.

Code: Select all

// Delete this line.
// #define DISTRHO_PLUGIN_URI "https://github.com/ryukau/LV2Plugins/tree/master/<PluginName>"

// Add this line.
#define DISTRHO_PLUGIN_URI "https://example.com/<PluginName>"
There's a fix for midi note on/off timing to all synth plugins. Now, notes are played at exact timing instead of the start of each audio processing call.

FDNCymbal had a bug which I forgot to connect Allpass.Stage1.Feedback in DSP code. It's now fixed and can be used to change decay of the sound.
stanlea
Established Member
Posts: 700
Joined: Wed Apr 25, 2012 9:49 pm
Has thanked: 41 times
Been thanked: 23 times

Re: SevenDelay

Post by stanlea »

Another synth in the line : IterativeSinCluster

Image

IterativeSinCluster is an additive synthesizer. This synth computes 512 sine waves per note to make tone cluster.

The number 512 come from 16 overtone * 8 note * 4 chord.

Gain envelope uses typical exponential curve. It implements a heuristic method to reduce click noise when attack/release time is very short. Attack curve can be changed.

There are several parameters to control sine wave frequency:

Semitone and Milli. 1 milli is 1 / 1000 semitone = 1 / 10 cent.
Up to 16th overtone.
Frequency multiplication and modulo.
Equal temperament control to change the amount of semitone.

Pitch randomization can be used to make some nice unison or detuned sounds.

Chorus is added to compensate the lack of modulation. It has 3 delays inside. Key follow can be used to automatically change delay time to follow note frequency.

One downside is that note frequency can't be changed during note on. This is due to the limitation of iterative sin algorithm, which is fast only if the frequency is constant.
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

Thanks stanlea for announcing new plugin. I was a bit late because porting presets from VST3 to LV2. So some presets are available for all of my plugins now.

To add the description, IterativeSinCluster is good for clean synth pad or some bright tones, but it's nowhere near useful to make bass sounds.

To quickly make some sounds, turn up some Semi and change some Overtone, then turn up Random->To Pitch around 9 o'clock. To add stereo spread, set 2 of Chord->Pan to leftmost and rightmost.
oddy.o.lynx
Established Member
Posts: 115
Joined: Sat Jun 30, 2018 2:54 am
Has thanked: 22 times
Been thanked: 22 times

Re: SevenDelay

Post by oddy.o.lynx »

Oddly VSTPlugins only build VST3 which has no GUI (only generic)

the LV2Plugins will build VST2 as well as LV2 which does have the GUI

https://github.com/ryukau/LV2Plugins

am able to build all except IterativeSinCluster

Carla does not recognize VST3 altough it claims to
rghvdberg
Established Member
Posts: 1067
Joined: Mon May 12, 2014 7:11 am
Has thanked: 15 times
Been thanked: 36 times

Re: SevenDelay

Post by rghvdberg »

IIRC vst3 in carla is windows (bridged) plugins
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

GUI for VST 3 on Linux is turned off because:

- Reaper crashed when opening the plugin compiled with GUI.
- Bitwig didn't show GUI. I guess it detected GUI crash and opened without it.

I reported crash to reaper forum with backtrace because same code works on Windows and macOS. Still it's possible that my code is at fault.

https://forum.cockos.com/showpost.php?p ... tcount=381

After this report, I fixed some bug related to GUI code but haven't test it on Linux. If you'd like to turn on GUI for VST 3 on Linux, open `<PluginName>/source/plugcontroller.cpp` and remove `#ifndef LINUX` and matching `#endif`.

Code: Select all

IPlugView *PLUGIN_API PlugController::createView(const char *name)
{
#ifndef LINUX // Remove this line to turn on GUI on Linux.
  if (name && strcmp(name, "editor") == 0) {
    auto plugEditor = new Vst::PlugEditor(this);
    plugEditor->remember();
    editor.push_back(plugEditor);
    return plugEditor;
  }
#endif // Remove this line to turn on GUI on Linux.
  return 0;
}
Just in case, DSP code is identical between LV2 and VST 3. I didn't implement VST 3 specific features like note expression for now.

---

To build IterativeSinCluster, AVX2 instruction was required. If your build error contains `Illegal instruction`, it's fixed now. (See: https://github.com/ryukau/LV2Plugins/issues/2)

Otherwise, I'd like to see build error message.
ryukau
Established Member
Posts: 28
Joined: Tue Oct 15, 2019 12:56 am

Re: SevenDelay

Post by ryukau »

I added another additive synth EnvelopedSine to my repositoy.

https://github.com/ryukau/LV2Plugins

EnvelopedSine synth computes 64 sine wave per note and has controls of AD envelope and tanh saturator for each sine wave.

Currently, no presets are available. It will be added once VST 3 port is done.

There's some keyboard shortcuts for overtone controls to quickly make up a sound. Note that shortcuts are enabled only when cursor is on overtone control. You can open cheat sheet of all shortcuts by clicking plugin name at bottom left.

Some quick recipe:
1. Press shortcut `r` then `d` (Randomize then sort Descending order) on overtone `Decay`, `Gain` and `Saturation`.
2. Press shortcut `r` then `a` (Randomize then sort Ascending order) on overtone `Attack`.
3. Check `Unison` at bottom left.
4. Set `To Pitch` on center left to around 10 o'clock.
5. Set `To Phase` to maximum.
6. Turn some knobs in `Modifier` section.
7. Set `Mix` at bottom center to 12 o'clock.
8. Change some parameters in `Phaser` section.

Step 3 to 8 is common steps to make richer stereo sound.

Another one:
1. Set all overtone parameters to maximum. Line drawing by mosue right drag may be useful.
2. Randomly press 1 to 9 key to decrease value in overtone controls. You can also use `i` to invert all values in a overtone control.
3. Optionally, press `n` or `Shift + n` to normalize value.
4. Change `Shift` at center left around 16.0.
5. Change `Octave` at top left to -2 or -3.
6. Hold `,` or `.` on overtone `Gain` to rotate values.

Yet another one:
1. Set all overtone parameters except `Decay` to minimum.
2. On overtone controls, press `Shift + r` to randomize. `Shift + r` changes value with 10% chance.
3. Press `p` to permute overtone values.
4. Set index 1 to 4 of overtone `Gain` and `Decay` to close to maximum.
Post Reply