If you have a problem or need to report a bug please email : support@dsprobotics.com
There are 3 sections to this support area:
DOWNLOADS: access to product manuals, support files and drivers
HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects
USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here
NEW REGISTRATIONS - please contact us if you wish to register on the forum
Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright
Volume Shaper
23 posts
• Page 2 of 3 • 1, 2, 3
Re: Volume Shaper
Nubeat7 wrote:i don't think so.. this for sure is not an afternoon project, also for a skilled programmer codes doesn't get written by themselfes
Of course it will take some time and effort. I don't mean to suggest someone else could do it like it's nothing without any investment on their part. What I do mean is that... well, lets just say my work tends to get done very, very inefficiently due to a potent case of ADD.
I have a number of other things I'm in the middle of working on (that involve stuff I'm confident in actually knowing how to do) so I can't have a go at something like this right now. But if there was some way I could help out I would be happy to. I offered some ideas in the last post... Maybe instead of calculating the curves at audio-time it could be precalculated and put into an array of values that only changes/recalculates when the user moves points. Then it would be a simple matter of drawing the values out every X samples. I'm not sure how important interpolation will end up being (to prevent "steppy-ness"); maybe that could be a switchable option. I would guess that linear interpolation would be enough if needed though.
Of course, ultimately, I don't expect anyone here to make this and share it freely with everyone unless they themselves want to do so. I was just concurring with the thought that it would be nice to have.
- Perfect Human Interface
- Posts: 643
- Joined: Sun Mar 10, 2013 7:32 pm
Re: Volume Shaper
i wouldn't built this in a "read every step from array" style, i would do it as envelope, calculating section after section in a dsp code at samplerate to get 'smooth' sliding from on to the next point..
-
Nubeat7 - Posts: 1347
- Joined: Sat Apr 14, 2012 9:59 am
- Location: Vienna
Re: Volume Shaper
Nubeat7 wrote:i wouldn't built this in a "read every step from array" style, i would do it as envelope, calculating section after section in a dsp code at samplerate to get 'smooth' sliding from on to the next point..
Agreed. The important part is to provide a formula to calculate the value between 2 points, considering the curve amount.Then it can be easily expanded to more points.
- Father
- Posts: 177
- Joined: Thu Jan 09, 2014 5:48 pm
Re: Volume Shaper
This might help a a lot. I have made parametric custom curve maker.
It receives several input parameter arrays:
curve type index - each curve type has it's own index, we may add new custom curve types
list of Y's of points - list of points that will be interpolated by the custom curves. Also the end point must be given
X distances between points in samples
parameter per curve - each curve type may receive a parameter that further defines the shape. The range of this parameter and it's effect is unique per curve type
The module has no gui yet. It is SSE compatible, so the channels are calculated completely separately. Also there is a smart Assembly code that works sort of like a selector - only currently selected curve type is calculated (or multiple types if different curve types are requested per channel) so adding additional curve types will not increase CPU usage.
There is also a way, to add additional custom curve shapes.
3 curve types are already there and their Code block versions are present in the "curve types" module.
To add new curve type you may write it in Code Block and it must fit following standard:
1. The inputs and outputs must be following
Where Start and End are the Y values the two interpolated points.
Par is is the parameter input for your curve type - it is optional and also it's range and effect is defined by you
phase is the interpolation X value in range 0-1. For 0 the curve output is "Start" value and for 1 the "End" value
amp is the curve output
2. You cannot use variable of a name STATE or Type because they is used internally to switch between curve types
3. the code can be only in stage(2). Using other stages requires quite a lot of assembly skills to implement and also using a lot of unique variable names and complicates adding new curve types.
Once you have your code working connect it to a text primitive to extract the assembly code.
Copy all your variables that were declared into the "custom curve" assembler block (double check if the new added variables weren't added before, if so, you shouldn't have them doubled or FS may crash. I recommend doing this part with the "custom curve" assembler disconnected ). Do NOT copy the streamin and streamout declarations!!!
Now copy the execution part of your assembly code into following code scheme:
Do not forget to replace text in < > with your custom values (unique curve type name and index). Also check if the F<index of your curve type> is declared - if not do so in the declaration part.
Now copy you new updated code at the very bottom of the "custom curve" assembler block.
Your new custom curve type should now be supported( or crash flowstone if you've done something wrong).
P.S. I hope I had not forgotten anything
It receives several input parameter arrays:
curve type index - each curve type has it's own index, we may add new custom curve types
list of Y's of points - list of points that will be interpolated by the custom curves. Also the end point must be given
X distances between points in samples
parameter per curve - each curve type may receive a parameter that further defines the shape. The range of this parameter and it's effect is unique per curve type
The module has no gui yet. It is SSE compatible, so the channels are calculated completely separately. Also there is a smart Assembly code that works sort of like a selector - only currently selected curve type is calculated (or multiple types if different curve types are requested per channel) so adding additional curve types will not increase CPU usage.
There is also a way, to add additional custom curve shapes.
3 curve types are already there and their Code block versions are present in the "curve types" module.
To add new curve type you may write it in Code Block and it must fit following standard:
1. The inputs and outputs must be following
- Code: Select all
streamin Start;
streamin End;
streamin Par;
streamin phase;
streamout amp;
Where Start and End are the Y values the two interpolated points.
Par is is the parameter input for your curve type - it is optional and also it's range and effect is defined by you
phase is the interpolation X value in range 0-1. For 0 the curve output is "Start" value and for 1 the "End" value
amp is the curve output
2. You cannot use variable of a name STATE or Type because they is used internally to switch between curve types
3. the code can be only in stage(2). Using other stages requires quite a lot of assembly skills to implement and also using a lot of unique variable names and complicates adding new curve types.
Once you have your code working connect it to a text primitive to extract the assembly code.
Copy all your variables that were declared into the "custom curve" assembler block (double check if the new added variables weren't added before, if so, you shouldn't have them doubled or FS may crash. I recommend doing this part with the "custom curve" assembler disconnected ). Do NOT copy the streamin and streamout declarations!!!
Now copy the execution part of your assembly code into following code scheme:
- Code: Select all
movaps xmm0,Type;
cmpps xmm0,F<index of your curve type>,0; //is equal?
movaps STATE,xmm0;
mov eax,STATE[0];
add eax,STATE[1];
add eax,STATE[2];
add eax,STATE[3];
cmp eax,0; //false if all Temp are false
jz Skip<your curve name>;
//add code of the custom curve in this gap:
//updates ampOUT
movaps xmm0,amp;
andps xmm0,STATE;
addps xmm0,ampOUT;
movaps ampOUT,xmm0;
Skip<You curve name>:
Do not forget to replace text in < > with your custom values (unique curve type name and index). Also check if the F<index of your curve type> is declared - if not do so in the declaration part.
Now copy you new updated code at the very bottom of the "custom curve" assembler block.
Your new custom curve type should now be supported( or crash flowstone if you've done something wrong).
P.S. I hope I had not forgotten anything
- Attachments
-
- Custom Envelope.fsm
- (11.08 KiB) Downloaded 884 times
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Volume Shaper
Thanks for the informative explanations KG! there is a lot going on there. will study it more later.
I was experimenting with DSP code and bezier curve last night. It gives interesting results.
start point; p0
end point; p2
curve point; p1
Value(t)= ((1-t)*(1-t)*p0)+(2*(1-t)*t*p1)+(t*t*p2);
I'm good at using stuff not creating them so Its gonna take me a while..like 2 years haha and when im done FS is going to drop vst support!
I was experimenting with DSP code and bezier curve last night. It gives interesting results.
start point; p0
end point; p2
curve point; p1
Value(t)= ((1-t)*(1-t)*p0)+(2*(1-t)*t*p1)+(t*t*p2);
I'm good at using stuff not creating them so Its gonna take me a while..like 2 years haha and when im done FS is going to drop vst support!
- Father
- Posts: 177
- Joined: Thu Jan 09, 2014 5:48 pm
Re: Volume Shaper
Nubeat7 wrote:i wouldn't built this in a "read every step from array" style, i would do it as envelope, calculating section after section in a dsp code at samplerate to get 'smooth' sliding from on to the next point..
Smoothness wouldn't be a factor. It needs to be calculated at some point either way, so I was just suggesting loading some of the calculation off into green so that it only has to be done when tweaking the envelopes instead of every time audio is running through it. Theoretically it would spike CPU more during editing but lessen it at every other time.
Either way, calculating point values at audio rate (unhopped) would be massive overkill. Just as a point of reference, FL Studio (I'm guessing true as well for other DAWs) has a default PPQ rate of 96, which means that automation of controls is updating at something like 200 times per second (depending on tempo), and it never sounds "steppy." Internal envelopes in synths and effects could conceivably be running faster than that, especially since they deal closer with transients, but I doubt you could even hear it updating at 100 times per second, let alone 44,100.
All this said... a certain TheOm seems to have done all the hard work for us already.
viewtopic.php?f=3&t=2721&start=0
Though there seems to be a bug with it currently.
- Perfect Human Interface
- Posts: 643
- Joined: Sun Mar 10, 2013 7:32 pm
Re: Volume Shaper
Perfect Human Interface wrote:All this said... a certain TheOm seems to have done all the hard work for us already.
viewtopic.php?f=3&t=2721&start=0
Though there seems to be a bug with it currently.
That's what I'm talking about!
I just tested it with the position sync module from our friend Nubeat7 and other than some minor bugs, it works really great. Hopefully this can lead us to an optimized and elegant envelope that can be used to modulate any parameter, not only the volume.
Thank you TheOm!
Edit: Still stuck in loading issues on TheOm's line editor..
- Father
- Posts: 177
- Joined: Thu Jan 09, 2014 5:48 pm
Re: Volume Shaper
okay, I've have used the line editor to create the advanced envelope here: viewtopic.php?f=3&t=3388
- Father
- Posts: 177
- Joined: Thu Jan 09, 2014 5:48 pm
Re: Volume Shaper
Your after a sidechain effect?
FL gross beat can do sidechaining very good. I think its based of some kind of Tranceghate thing. Step seq.
Like you pushing away the sound like u using a TG.
But with more curves. Hope im not totaly out here.
Actually i think make some waveform shape in it.
I mean in FL gross beat u can do some Ramp or what ever you like. Im pretty sure its based of a trancegate. or something similar.
Because if u remove the sound from the kick. like trancegate. Up and own u will get something similar but with doing it on a ramp will do better.
Also on my gross beat i have a preset thats so very good. Its used in many mellbourne leads. Its like a sine ramp.
FL gross beat can do sidechaining very good. I think its based of some kind of Tranceghate thing. Step seq.
Like you pushing away the sound like u using a TG.
But with more curves. Hope im not totaly out here.
Actually i think make some waveform shape in it.
I mean in FL gross beat u can do some Ramp or what ever you like. Im pretty sure its based of a trancegate. or something similar.
Because if u remove the sound from the kick. like trancegate. Up and own u will get something similar but with doing it on a ramp will do better.
Also on my gross beat i have a preset thats so very good. Its used in many mellbourne leads. Its like a sine ramp.
- djbrynte
- Posts: 613
- Joined: Mon Jun 22, 2009 10:51 am
Re: Volume Shaper
djbrynte wrote:Your after a sidechain effect?
FL gross beat can do sidechaining very good. I think its based of some kind of Tranceghate thing. Step seq.
We were trying to create a tool like that in flowstone.
Take a look at the advanced envelope: viewtopic.php?f=3&t=3388
Im happy with the result.
- Father
- Posts: 177
- Joined: Thu Jan 09, 2014 5:48 pm
23 posts
• Page 2 of 3 • 1, 2, 3
Who is online
Users browsing this forum: No registered users and 73 guests