SevenDelay

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

Announcements of proprietary software may fit better in the Marketplace.

Moderators: raboof, khz, MattKingUSA

User avatar
sysrqer
Established Member
Posts: 1953
Joined: Thu Nov 14, 2013 11:47 pm
Contact:

Re: SevenDelay

Post by sysrqer »

I've just built these and they seem to work well. The vst3 download wasn't recognised by reaper but the regular built vst are seen.

I love the delay, I've been wanting one like that for ages. It's a crazy one, some of the sounds you can get out of it mad!

Thank you!

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

Re: SevenDelay

Post by ryukau »

Hi, sysrqer.

Deleting `~/.config/REAPER/reaper-vstplugins64.ini` might help to recognize VST 3 plugins. `reaper-vstplugins64.ini` will be recreated when restarts reaper. Just in case, I don't recommend my VST 3 plugins on Linux for now because they won't display GUI.

Some tips for SevenDelay:
Max delay time is defined in `SevenDelay/parameter.hpp`. Currently it's on line 26.

Code: Select all

constexpr double maxDelayTime = 8.0; // max 8 seconds.
When changing max delay time, it may be better to change tuning of `Time` knob. It's defined in `SevenDelay/parameter.cpp`, line 23.

Code: Select all

LogScale<double> Scales::time(0.0001, maxDelayTime, 0.5, 1.0);
Arguments are (timeMin, timeMax, guiAnchor, timeAnchor). It must be (0.0 < guiAnchor < 1.0) and (timeMin < timeAnchor < timeMax).

In GUI, value is normalized in range of [0.0, 1.0]. When gui value is `guiAnchor`, then value will be mapped to `timeAnchor`. In other words, tuning curve is determined by `guiAnchor` and `timeAnchor`.

Some example:

Code: Select all

- (0.01, maxDelayTime, 0.5, maxDelayTime / 2.0) // Mostly linear.
- (0.01, maxDelayTime, 0.7, 0.5) // Tuning towards short delay.
- (0.01, maxDelayTime, 0.3, 2.0) // Tuning towards long delay.
If you'd like to experiment with EightDelay, NineDelay and so on, it can be changed in `SevenDelay/dsp/dspcore.hpp`, line 29.

Code: Select all

// Change 7 to some integer value greater than 0.
using DelayTypeName = DelayLagrange<float, 7>;

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

Re: SevenDelay

Post by ryukau »

I added another plugin EsPhaser to my repository.

https://github.com/ryukau/LV2Plugins

EsPhaser is an experimental phaser which is equipped with 4096 all-pass filters. At this large number of all-passes, it sounds more like a blurred delay rather than a phaser. Also note that it's very CPU intensive.

I've also fixed VST 3 plugins to display GUI on Linux. It works without problem on REAPER. On Bitwig, GUI blackouts sometimes.

https://github.com/ryukau/VSTPlugins/issues/3

User avatar
kuacgraxa
Established Member
Posts: 13
Joined: Fri Sep 27, 2019 10:45 am

Re: SevenDelay

Post by kuacgraxa »

Thanks, finally running on Reaper, I'm very happy for that, good job, and keep going with your projects, I'm ready to share with more friends :D 8)

Kott
Established Member
Posts: 327
Joined: Thu Mar 21, 2013 12:55 am
Location: Vladivostok

Re: SevenDelay

Post by Kott »

kuacgraxa wrote:Thanks, finally running on Reaper, I'm very happy for that
VST2 version works in Reaper since first releases

User avatar
sysrqer
Established Member
Posts: 1953
Joined: Thu Nov 14, 2013 11:47 pm
Contact:

Re: SevenDelay

Post by sysrqer »

ryukau wrote:Hi, sysrqer.

Deleting `~/.config/REAPER/reaper-vstplugins64.ini` might help to recognize VST 3 plugins. `reaper-vstplugins64.ini` will be recreated when restarts reaper. Just in case, I don't recommend my VST 3 plugins on Linux for now because they won't display GUI.

Some tips for SevenDelay:
Max delay time is defined in `SevenDelay/parameter.hpp`. Currently it's on line 26.

Code: Select all

constexpr double maxDelayTime = 8.0; // max 8 seconds.
When changing max delay time, it may be better to change tuning of `Time` knob. It's defined in `SevenDelay/parameter.cpp`, line 23.

Code: Select all

LogScale<double> Scales::time(0.0001, maxDelayTime, 0.5, 1.0);
Arguments are (timeMin, timeMax, guiAnchor, timeAnchor). It must be (0.0 < guiAnchor < 1.0) and (timeMin < timeAnchor < timeMax).

In GUI, value is normalized in range of [0.0, 1.0]. When gui value is `guiAnchor`, then value will be mapped to `timeAnchor`. In other words, tuning curve is determined by `guiAnchor` and `timeAnchor`.

Some example:

Code: Select all

- (0.01, maxDelayTime, 0.5, maxDelayTime / 2.0) // Mostly linear.
- (0.01, maxDelayTime, 0.7, 0.5) // Tuning towards short delay.
- (0.01, maxDelayTime, 0.3, 2.0) // Tuning towards long delay.
If you'd like to experiment with EightDelay, NineDelay and so on, it can be changed in `SevenDelay/dsp/dspcore.hpp`, line 29.

Code: Select all

// Change 7 to some integer value greater than 0.
using DelayTypeName = DelayLagrange<float, 7>;
Hey, sorry, I've had this tab open at work for ages and meant to respond but didn't get around to it. Thanks so much for the tips, I will definitely have a play around and see what I can come up with!

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

Re: SevenDelay

Post by ryukau »

A new plugin CubicPadSynth is added to my repository.

LV2: https://github.com/ryukau/LV2Plugins
VST 3: https://github.com/ryukau/VSTPlugins
Manual: https://ryukau.github.io/VSTPlugins/man ... th_en.html

Edit: To build LV2 repository, a patch to DPF is required for now. See building section on README.md.

CubicPadSynth is a wavetable synthesizer using PADsynth algorithm. Difference to ZynAddSubFX or Yoshimi is mostly user interface. CubicPadSynth has more direct control for each profile parameters (gain, width, pitch and phase randomization). I think it's better for sound effect but not good for tonal sound.

This synth is heavy. Perhaps it uses too much memory for wavetable. To reduce DSP load, following change can be applied to source code. Beware that it changes character of output.

In `CubicPadSynth/parameter.hpp`, line 39:

Code: Select all

// Reduce this number to shorten wavetable size.
constexpr int32_t tableSize = 262144;
In `CubicPadSynth/dsp/dspcore.cpp`, line 290:

Code: Select all

// Use bilinear interpolation instead of bicubic interpolation.
// Vec16f sig = osc.processCubic(lowpassPitch + pitch, wavetable.table);
Vec16f sig = osc.process(lowpassPitch + pitch, wavetable.table);
Sometimes generated wavetable contains pop noise. To avoid this, try setting profile phases for higher overtone to almost maximum. Profile phase control is the one with blue bars on Wavetable tab.

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

Re: SevenDelay

Post by ryukau »

A new synthesizer LightPadSynth is added to my repository.

LV2 Repository: https://github.com/ryukau/LV2Plugins
Manual and VST 3: https://ryukau.github.io/VSTPlugins/man ... th_en.html

LightPadSynth is a lightweight version of CubicPadSynth. Pitch modulation is omitted for efficiency. A feedback delay (or a comb filter) is added for each voice instead.

This synth is better than CubicPadSynth to make human-voice-ish sounds because of the delay.

Kott
Established Member
Posts: 327
Joined: Thu Mar 21, 2013 12:55 am
Location: Vladivostok

Re: SevenDelay

Post by Kott »

A new synthesizer LightPadSynth is added to my repository.
cool! :)

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

Re: SevenDelay

Post by ryukau »

A new plugin LatticeReverb is added to my repository.

LV2 Repository: https://github.com/ryukau/LV2Plugins
Manual and VST 3: https://ryukau.github.io/VSTPlugins/man ... rb_en.html

LatticeReverb uses lattice structure to nest all-pass filters. All-pass filter in this case is basically a delay with a feedback and a feedforward path.

LatticeReverb is exposing all internal parameters but doesn't have any clever algorithm to set delay time and feed amount. So sometimes it sounds artificial, which is like just a bunch of short delays. LFO in Modulation tab may help in this case.

User avatar
Shupacabras
Established Member
Posts: 113
Joined: Fri Jun 08, 2012 11:12 pm

Re: SevenDelay

Post by Shupacabras »

Hi, I have an error when compiling.

Code: Select all

../../Makefile.plugins.mk:131: recipe for target '../../build/CV_ExpLoopEnvelope/ui.cpp.o' failed
make[2]: *** [../../build/CV_ExpLoopEnvelope/ui.cpp.o] Error 1
make[2]: se sale del directorio '/home/cristian/LV2Plugins/lv2cvport/CV_ExpLoopEnvelope'
Makefile:55: recipe for target 'CV_ExpLoopEnvelope' failed
make[1]: *** [CV_ExpLoopEnvelope] Error 2
make[1]: se sale del directorio '/home/cristian/LV2Plugins/lv2cvport'
Makefile:42: recipe for target 'lv2cvport' failed
make: *** [lv2cvport] Error 2

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

Re: SevenDelay

Post by ryukau »

Hi, Shupacabras. Thanks for the report.

I found that `lv2cvport/Makefile` was using spaces for indentation instead of tabs. It's now fixed.

If the build is still failing, I'd like to read the full build log.

If CV_ExpLoopEnvelope is the only one failing to build, you can change `lv2cvport/Makefile` as following to bypass the build.

Code: Select all

build: \
	CV_3PoleLP \
	CV_AudioToCv \
	CV_CvToAudio \
	CV_DelayLP3 \
	CV_DoubleFilter \
	CV_ExpADSREnvelope \
	CV_ExpPolyADEnvelope \
	CV_Gate16 \
	CV_HoldFilter \
	CV_Invert \
	CV_LinearADSREnvelope \
	CV_LinearMap \
	CV_LongAllpass \
	CV_Multiply \
	CV_NaiveDelay \
	CV_NestedLongAllpass \
	CV_ParabolicADEnvelope \
	CV_PController \
	CV_PolyLoopEnvelope \
	CV_PTRSaw \
	CV_PTRTrapezoid \
	CV_RampFilter \
	CV_RateLimiter \
	CV_Sin \
	CV_StereoGain \
#	CV_ExpLoopEnvelope \ # Disable to build.

User avatar
Shupacabras
Established Member
Posts: 113
Joined: Fri Jun 08, 2012 11:12 pm

Re: SevenDelay

Post by Shupacabras »

I still have errors
In detail what were my strict steps
SO KDE Neon 18.04 + repos KXStudio

Code: Select all


sudo apt install  git pkg-config libjack-jackd2-dev libgl1-mesa-dev liblo-dev python-rdflib

git clone --recursive  https://github.com/ryukau/LV2Plugins.git

cd LV2Plugins

cp patch/NanoVG.cpp lib/DPF/dgl/src/NanoVG.cpp

make
after the first error I tried in `lv2cvport/Makefile`

Code: Select all

build: \
#	CV_3PoleLP \
#	CV_AudioToCv \
#	CV_CvToAudio \
#	CV_DelayLP3 \
#	CV_DoubleFilter \
#	CV_ExpADSREnvelope \
#	CV_ExpPolyADEnvelope \
#	CV_Gate16 \
#	CV_HoldFilter \
#	CV_Invert \
#	CV_LinearADSREnvelope \
#	CV_LinearMap \
#	CV_LongAllpass \
#	CV_Multiply \
#	CV_NaiveDelay \
#	CV_NestedLongAllpass \
#	CV_ParabolicADEnvelope \
#	CV_PController \
#	CV_PolyLoopEnvelope \
#	CV_PTRSaw \
#	CV_PTRTrapezoid \
#	CV_RampFilter \
#	CV_RateLimiter \
#	CV_Sin \
#	CV_StereoGain \
#	CV_ExpLoopEnvelope \
now i get a new error

Code: Select all

Compiling parameter.cpp
Compiling ui.cpp
ui.cpp:412:8: error: ‘unordered_map’ in namespace ‘std’ does not name a template type
   std::unordered_map<int, std::shared_ptr<ValueWidget>> valueWidget;
        ^~~~~~~~~~~~~
ui.cpp:413:8: error: ‘unordered_map’ in namespace ‘std’ does not name a template type
   std::unordered_map<int, std::shared_ptr<ArrayWidget>> arrayWidget;
        ^~~~~~~~~~~~~
ui.cpp: In member function ‘virtual void DISTRHO::EnvelopedSineUI::updateUI(uint32_t, float)’:
ui.cpp:346:20: error: ‘valueWidget’ was not declared in this scope
     auto vWidget = valueWidget.find(id);
                    ^~~~~~~~~~~
ui.cpp:346:20: note: suggested alternative: ‘ValueWidget’
     auto vWidget = valueWidget.find(id);
                    ^~~~~~~~~~~
                    ValueWidget
ui.cpp:353:20: error: ‘arrayWidget’ was not declared in this scope
     auto aWidget = arrayWidget.find(id);
                    ^~~~~~~~~~~
ui.cpp:353:20: note: suggested alternative: ‘ArrayWidget’
     auto aWidget = arrayWidget.find(id);
                    ^~~~~~~~~~~
                    ArrayWidget
ui.cpp: In member function ‘virtual void DISTRHO::EnvelopedSineUI::programLoaded(uint32_t)’:
ui.cpp:374:24: error: ‘valueWidget’ was not declared in this scope
     for (auto &vPair : valueWidget) {
                        ^~~~~~~~~~~
ui.cpp:374:24: note: suggested alternative: ‘ValueWidget’
     for (auto &vPair : valueWidget) {
                        ^~~~~~~~~~~
                        ValueWidget
ui.cpp:379:24: error: ‘arrayWidget’ was not declared in this scope
     for (auto &aPair : arrayWidget) {
                        ^~~~~~~~~~~
ui.cpp:379:24: note: suggested alternative: ‘ArrayWidget’
     for (auto &aPair : arrayWidget) {
                        ^~~~~~~~~~~
                        ArrayWidget
ui.cpp: In member function ‘std::shared_ptr<BarBox<Scale> > DISTRHO::EnvelopedSineUI::addBarBox(float, float, float, float, uint32_t, size_t, Scale&)’:
ui.cpp:449:7: error: ‘arrayWidget’ was not declared in this scope
       arrayWidget.emplace(std::make_pair(id0 + i, barBox));
       ^~~~~~~~~~~
ui.cpp:449:7: note: suggested alternative: ‘ArrayWidget’
       arrayWidget.emplace(std::make_pair(id0 + i, barBox));
       ^~~~~~~~~~~
       ArrayWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addButton(float, float, float, const char*, uint32_t)’:
ui.cpp:462:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, button));
     ^~~~~~~~~~~
ui.cpp:462:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, button));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addCheckbox(float, float, float, const char*, uint32_t)’:
ui.cpp:474:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, checkbox));
     ^~~~~~~~~~~
ui.cpp:474:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, checkbox));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addKnob(float, float, float, DGL::Color, const char*, uint32_t, DISTRHO::EnvelopedSineUI::LabelPosition)’:
ui.cpp:540:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
ui.cpp:540:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addNumberKnob(float, float, float, DGL::Color, const char*, uint32_t, Scale&, DISTRHO::EnvelopedSineUI::LabelPosition)’:
ui.cpp:566:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
ui.cpp:566:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addRotaryKnob(float, float, float, DGL::Color, const char*, uint32_t, DISTRHO::EnvelopedSineUI::LabelPosition)’:
ui.cpp:590:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
ui.cpp:590:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addTextKnob(float, float, float, DGL::Color, uint32_t, Scale&, bool, uint32_t, int32_t)’:
ui.cpp:651:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
ui.cpp:651:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, knob));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addOptionMenu(float, float, float, uint32_t, const std::vector<std::__cxx11::basic_string<char> >&)’:
ui.cpp:669:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, menu));
     ^~~~~~~~~~~
ui.cpp:669:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, menu));
     ^~~~~~~~~~~
     ValueWidget
ui.cpp: In member function ‘void DISTRHO::EnvelopedSineUI::addVSlider(float, float, DGL::Color, const char*, uint32_t)’:
ui.cpp:715:5: error: ‘valueWidget’ was not declared in this scope
     valueWidget.emplace(std::make_pair(id, slider));
     ^~~~~~~~~~~
ui.cpp:715:5: note: suggested alternative: ‘ValueWidget’
     valueWidget.emplace(std::make_pair(id, slider));
     ^~~~~~~~~~~
     ValueWidget
../Makefile.plugins.mk:131: recipe for target '../build/EnvelopedSine/ui.cpp.o' failed
make[1]: *** [../build/EnvelopedSine/ui.cpp.o] Error 1
make[1]: se sale del directorio '/home/cristian/LV2Plugins/EnvelopedSine'
Makefile:50: recipe for target 'EnvelopedSine' failed
make: *** [EnvelopedSine] Error 2
/code]

I did not find any log file or error.log in the LV2Plugins folder
Do I need to install or compile something beforehand?

Sorry my bad english

User avatar
SpotlightKid
Established Member
Posts: 177
Joined: Sun Jul 02, 2017 1:24 pm

Re: SevenDelay

Post by SpotlightKid »

Try adding

Code: Select all

#include <unordered_map>
to EnvelopedSine/ui.cpp maybe?

User avatar
Shupacabras
Established Member
Posts: 113
Joined: Fri Jun 08, 2012 11:12 pm

Re: SevenDelay

Post by Shupacabras »

Code: Select all

#include <unordered_map>
to EnvelopedSine/ui.cpp

Code: Select all

#include <unordered_map>
to IterativeSinCluster/ui.cpp

Code: Select all

#include <unordered_map>
to LatticeReverb/ui.cpp

solved the problem
Thank you

Post Reply