How feasible is this? Valley Plateau for NE Versio

Hello all!

This will be my first post and the very beginning stages of the project, literally the first few hours. Before getting into hardware Eurorack I used VCV Rack extensively and my favorite reverb was the Valley Plateau. I haven’t found anything else that executes the classic Dattorro reverb as nicely as the Valley Plateau. It has some really nice clipping when overdriven, which is how I mainly use it in a song. Large swathes of reverb and then building to heavy distortion. Neither the Desmodus Versio or the Electus Versio firmware get close to this. The output, when overdriven, is either too dampened by low pass filtering, too bright, too digital, or all of the above. Also the Valley Plateau has some very nice chorusing that none of the Versio firmware replicate.

With all of that said I have spent today evaluating the logistics of such a project. First I planned out how the module would function:

Then I looked at Dale Johnson’s Valley Plateau code and consolidated it into all necessary components to create a boilerplate for libDaisy. Forgive my lack of knowledge using Github, this will improve later:

Then I planned out what I will actually implement in code. The output of the Desmodus Versio is around 5.3v maximum. The Valley Plateau, however, can go to -10v to +10v and beyond which is how a lot of the clipping character is achieved in VCV rack. To tame this while preserving the clipping characteristics, I will also implement Bogaudio’s LMTR to “hard” clip at -10dB to keep the output maximum around 5v. I put hard in quotes because it’s more like a soft clip. The hard clip comes next with implementing VCV’s RSCL to scale the output of the LMTR to 75% and then absolute hard clip if it ever goes past 5.3v. This gets it sounding at the same volume as the Desmodus Versio and I assume will help preserve the tone before it passes through output opamps on the Versio.

I can’t put more than three links in my post… So if you want to know more about these modules you will have to Google them…

It seems pretty simple, but now I need to review the libDaisy platform. How feasible is this project for my purposes? If anyone else in here is familiar with the Versio, what is the highest voltage that may be output without clipping? I assume looking at the oscilloscope the highest voltage is around 5.3v. I also suspect the opamps on the output of the Versio are not rail-to-rail judging by how the output is slightly dampened.

Any other tips or recommendations or even help from the community is greatly appreciated.

Huge progress!

See the following code dump:

This took a lot of trial and error to get to somewhere where it was even moderately working, especially given the fact I’m doing no debugging because I don’t have the proper connector for my ST Link.

Currently it does work as a reverb, it has the proper reverb tail.

Some issues:

When an output cable is inserted it is horribly distorted and loud for 10 seconds before it calms down.
Knobs are not set up yet.
CVs are not set up yet.
LEDs flash rapidly because I have the audio blocks at size 48.

The code is very messy in spots and I am wasting a lost of space with 32 arrays storing 200000 floats stored in SDRAM for the delay lines. I figured that wasting a lot of space was preferable to it not working.

Next on the agenda is to set up knobs and CV inputs and to solve that heavy distortion.

What’s great though is that the distortion already sounds a hundred times better than that of the stock Desmodus Versio.

Anyone who is familiar with the Dottorro reverb, what might be causing this heavy initial distortion?

I figure once I get my ST Link connector in a couple days I’ll be able to definitively see. I’ve tried using an envelope to control the initial volume of the wet output. I just tried clamping the outputs between -10 and 10v and that worked but it has a terrible popping sound after it goes inside this range. I guess that is to be expected?

Anyway, I’ll report back with more progress later!

Alright so clipping the output audio to -6 and 6 worked a charm:

        leftOutput = reverb.getLeftOutput();
        rightOutput = reverb.getRightOutput();

        if(leftOutput > 6 || leftOutput < -6)
            leftOutput = 0;

        if(rightOutput > 6 || rightOutput < -6)
            rightOutput = 0;

        out[i] = in[i] * dry + leftOutput * 2 * wet *
                    envelope._value;
        out[i + 1] = in[i + 1] * dry + rightOutput * 2 * wet *
                    envelope._value;

So now only the knobs and CVs are left. There’s still a loud pop when the module boots up. Also I’m not sure about the output scaling. Check back later to see the finished project hopefully! Shouldn’t take more than a couple days.

Aren’t Daisy samples represented as floats between -1.f and 1.f?

Yeah they are. I suspect that the Dattoro reverb code I’m using is meant to work with inputs from -10 to 10 in VCV rack. Instead of changing the actual Dattorro code,I;ve decided to multiply the input float by 10 before passing it into the Dattorro process function. The Dattorro output should be -10 to 10… but for some reason it starts out super loud and then goes to manageable levels, like -1.f and 1.f… You’d think it would need to be multiplied by 0.1f. Is there internal clipping/normalization/etc. built into the Daisy audio buffer classes?

Okay so I just got all the knobs working. I had to set the audio block size to 1 because the size control wasn’t playing nicely. It sounds so amazing!! Very exciting!

I very much suspect that this is a result of the code going through the entire Dattoro algorithm immediately after boot and putting everything into cache. or something like that? Maybe something starts high in the algorithm which works nicely in VCV rack and doesn’t work nicely in hardware?

Maybe it’s my implementation of the buffer to be used in InterpDelay.hpp? That was the only piece of code I significantly changed.

Original: ValleyRackFree/src/dsp/delays/InterpDelay.hpp at main · ValleyAudio/ValleyRackFree · GitHub

Versio rewrite:

The sdramData buffer is declared in a separate cpp and hpp as an extern in the SDRAM to be used globally. Not sure if this is a big no no or not.

I’m pretty sure that when I allocate the buffers in SDRAM it should be initialized with all 0’s right? Unless that is an incorrect assumption to make.

The only change I made in the actual Dattorro algorithm was taking the scale function from Utilities.hpp and putting it at the top of Dattorro.cpp. Maybe this function doesn’t work at all.

This definitely comes off as rambling, but this is essentially all the questions going through my mind and writing it out here helps me get it all on the table.

1 Like

Fixed the aforementioned bugs and lot more along with finishing the knob implementation. See details in the github readme. I’m sure there are more bugs and if you encounter any let me know.

I’m pretty sure that the CV inputs work along side the knobs, so I assume CV inputs work, but I have not tested it yet.

As of now I am comfortable enough with the implementation for others to try it out. Here is the hex file:

Let me know what you think. It sounds very similar to the Erbeverb. I honestly prefer Valley’s Plateau to the Erbeverb, hence why I’ve coded this up. And I especially like it a lot more than the Desmodus Versio.

Knob layouts:
Mix → Mix
Regen → Decay
Speed → Mod Rate
Index → Mod Depth
Size → Size
Dense → Pre-delay

Next things to do are to implement tank and input low and high cut filters along with the freeze function.

I also want to implement a limiter and clipper and gain control to set how much distortion is present.

Once I implement the filters and freeze function I’ll move this thread to the projects section of the forum.

Thank you for documenting the journey and sharing the firmware!
I unfortunately don’t have an NE Versio to try it out with, but I hope community members who do own one don’t over look this project.

I’m pretty sure there are Versio owners on this forum, so please feel free to start a new thread (or rename this thread) with “Check Out My Valley Plateau Firmware for NE Versio” or something along that line to get their attention :slight_smile:

And I would love to see a video to hear it in action too :pray:

1 Like

Thanks for replying to the post Takumi! Documenting the journey was super useful in organizing my thoughts, and I hope that this post might help others that are working with the daisy seed, even apart from the actual purpose of the implementation.

Unfortunately I can’t seem to be able to edit my original post. This might be because I made the post before I was trust level 1? It’s either that or I don’t know how to use the forums.

However, searching Google for “Plateau Valley Eurorack” brings this post up, so I guess I’m in Google’s good graces with that one! :grinning:

I’ll make a video probably tonight showcasing it. It sounds very analog and realistic whereas most other reverb algorithms I’ve tried sound obviously digital. Props to Dale Johnson for his amazing implementation here. The only thing digital about it is that there is sometimes some digital clipping when changing the size parameter, and I think this has to do with SDRAM not being initialized to 0 on the daisy seed. This same thing is what I think caused the loud initial sound and my solution above is only a “quick fix”. According to the website the SDRAM does not get initialized unless you specifically do it yourself using an init function after the hardware initialization, but it does not give any details on how to do that and I’ve only spent about 30 minutes reading through the hardware init functions and its sub functions.

Anyway, rambling aside, if I can’t edit it then I’ll definitely make a full fledged post in the Projects forums, and even if I can I probably will anyway.

It might be because you joined recently. I have the ability to edit the title so please feel free to let me know if you want me to change it to something else :slight_smile:

1 Like

I’ve finished the project just the other day and will be making a post in the projects forum. Also, I didn’t know it until last night when I was listening to Ryoji Ikeda, but I watch you on YouTube and dig your tutorials. Glad to find a fellow fan of Ikeda here!

For anyone who sees this thread, here’s the final version for Valley Plateau for NE Versio, “Campestria Versio”:

2 Likes

Congrats on finishing the project!!
If it’s not too much to ask, could you share an audio or video demo when you make a post on the projects forum? I currently don’t have a Versio but would love to hear it in action :smiley:

And I’m happy to hear that you enjoy the Sound Simulator tutorials! Thank you! Always nice to meet a fellow Ikeda fan too.

1 Like

Thanks Takumi! Here’s the video demo:

There are no talking demos in the intro and outro. The intro demo was inspired by Ryoji Ikeda because I was listening to him before filming and was putting that patch together, so you’d probably like that. The outro demo is just me fiddling around.

I’ll be posting on the projects forum in a little bit.

Awesome!! I’ll be checking out the video and the forum post :smiley:

I appreciate it :sparkles: