How to use a unit delay in DSP code? and knobs not working..

For general discussion related FlowStone
Post Reply
zoobooboozoo
Posts: 32
Joined: Tue Sep 23, 2014 12:14 pm

How to use a unit delay in DSP code? and knobs not working..

Post by zoobooboozoo »

Hi all.

I have the input audio go through a ruby module.
I'm writing a filter schematics into ruby(seems easier to write in code for me, much faster...).
I need to know two things:
1) How can I express unit delay in ruby? like:
Audio in of ruby -> ruby process the audio by simply delaying it by one unit delay -> audio out put

2) Why doesn't the built-in knobs in flowstone correspond properly with ruby? I have:
Knob - > float input of ruby -> float output of ruby
and when I fiddle with the knob the output float doesn't change its value. why is that? I tried some alternative knob I found here on the forums and it works fine but I still wonder what's the deal with the built-in ones

thx in advance for the help guys.
Last edited by zoobooboozoo on Thu Sep 25, 2014 1:00 pm, edited 1 time in total.
KG_is_back
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: Qs about Ruby - Unit Delay, Knobs Input

Post by KG_is_back »

zoobooboozoo wrote:I have the input audio go through a ruby module.I'm writing a filter schematics into ruby(seems easier to write in code for me, much faster...).


In this particular case use DSP code component instead of ruby. You can add code component by hotkey "c". It has very simple syntax and it is much much faster than ruby (CPU wise). It is best for things like filters, delays, distortions, saturations etc. It however doesn't contain classical if/else branching and unfortunately only fixed sized loops and hops.
See the flowstone manual, it has a section dedicated to the DSP code component.
zoobooboozoo
Posts: 32
Joined: Tue Sep 23, 2014 12:14 pm

Re: Qs about Ruby - Unit Delay, Knobs Input

Post by zoobooboozoo »

giving DSP a try.
1) I'm wondering about the inputs: should I use streamin/polyin/monoin for incoming audio to the filter? and what should I use for a float value input? (for freq of the filter for example)
2) what's the most efficient way of writing a code that makes the audio go through 5 different filters(each is the same but with different parameters and each of them is gonna be writting in dsp) times 2(since I need one cascade of filters for left and one for right)
3) and what about unit delay? how do I implement it in the DSP code? I went over the manual and couldn't find an answer...
4)is there a expononent function? couldn't find it.
5) what about the knob?

thx a lot for the help
KG_is_back
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: How to use a unit delay in DSP code? and knobs not worki

Post by KG_is_back »

zoobooboozoo wrote:giving DSP a try.
1) I'm wondering about the inputs: should I use streamin/polyin/monoin for incoming audio to the filter? and what should I use for a float value input? (for freq of the filter for example)
2) what's the most efficient way of writing a code that makes the audio go through 5 different filters(each is the same but with different parameters and each of them is gonna be writting in dsp) times 2(since I need one cascade of filters for left and one for right)
3) and what about unit delay? how do I implement it in the DSP code? I went over the manual and couldn't find an answer...
4)is there a expononent function? couldn't find it.
5) what about the knob?

thx a lot for the help


1.Generally use streamin. They simply turn into any type of connector you connect them to. You can only pass values inside using streamin and out for streamout. In both cases the values are floats (or automatically converted to floats). There is no difference in the code between inputing signal and parameters (they both are just stream of floats).
2. The most effective way is, to write code for one filter. Copy the module 5 times and chain them. You can then use mono4 (pack/unpack primitives do that), to compute both Left and right channel simultaneously. DSP code uses SSE so it can preform the same computations on 4 channels at the same time (without increasing CPU).
3. simply use intermediate variables. the variables keep their values until you change them or reset the audio stream

Code: Select all

streamin x;
streamout y;
float previousX=0;

y=previousX;
previousX=x; //the values of variables persist - they do not get reset each sample

4. for some reason it is missing in the manual. Here is the expresion for it:

Code: Select all

v=pow(x,y) //x^y

For better CPU performance use it only when you need to rise a number to a noninteger, because the power uses quite a lot of CPU. For rising number to fixed integer exponent rather chain the multiplications.
The manual is also missing some other operations:

Code: Select all

a=b|c; //bitwise or operation
a=sqrt(b) //square root



5. Unfortunately I do not know nothing about this problem.
zoobooboozoo
Posts: 32
Joined: Tue Sep 23, 2014 12:14 pm

Re: How to use a unit delay in DSP code? and knobs not worki

Post by zoobooboozoo »

Thx for deatiled reply KG.

2. Can you explain more about mono4 and the stereo mechanism you suggested? I didn't understand exactly what I should do to implement it.

3. so even if there's a a line in your code that defines and set a value: "float previousX=0" the value wouldn't change to 0 in the next run of the code on the next sample?
KG_is_back
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: How to use a unit delay in DSP code? and knobs not worki

Post by KG_is_back »

zoobooboozoo wrote:Thx for deatiled reply KG.

2. Can you explain more about mono4 and the stereo mechanism you suggested? I didn't understand exactly what I should do to implement it.

3. so even if there's a a line in your code that defines and set a value: "float previousX=0" the value wouldn't change to 0 in the next run of the code on the next sample?


2. streams in Flowstone can process 4 channels at the same time. The example in the schematic should make it clear enough.

3. No. The variable is initialized only before the first sample when you turn on the ASIO or the schematic gets recompiled. You may force this to happen using "Clear Audio" primitive. Otherwise the variable holds the value until you change it, even to next samples - that is the whole idea of DSP processing - only variable that changes it's value automatically is the input.
Attachments
mono4tutorial.fsm
(4.53 KiB) Downloaded 1057 times
zoobooboozoo
Posts: 32
Joined: Tue Sep 23, 2014 12:14 pm

Re: How to use a unit delay in DSP code? and knobs not worki

Post by zoobooboozoo »

Got it.

another question: I want to control a simple filter cutoff with an exact frequency.
set the cutoff to 440hz for example. how can I log the linear frequncy so that the builtin filter can "understand" what I want?
Xtinct
Posts: 106
Joined: Fri Feb 11, 2011 12:06 am

Re: How to use a unit delay in DSP code? and knobs not worki

Post by Xtinct »

If you look inside the stock filters there's a switch for setting cutoff in hz
KG_is_back
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: How to use a unit delay in DSP code? and knobs not worki

Post by KG_is_back »

zoobooboozoo wrote:Got it.

another question: I want to control a simple filter cutoff with an exact frequency.
set the cutoff to 440hz for example. how can I log the linear frequncy so that the builtin filter can "understand" what I want?


In the toolbox there is a module called "Hz to 0-1" - it converts Hz frequency representation into 0-1 representation (where 0 is DC and 1 is Nyquist. In DSP terminology it is called normalized frequency ). the equation goes like this:

f(0-1)=f(Hz)*2/samplerate

There is a primitive in Flowstone that outputs current sample rate.
zoobooboozoo
Posts: 32
Joined: Tue Sep 23, 2014 12:14 pm

Re: How to use a unit delay in DSP code? and knobs not worki

Post by zoobooboozoo »

Thanks a lot KG, you're incredibly helpful. and quick too :)
Post Reply