Support

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

Copy & Paste Funtcion

For general discussion related FlowStone

Re: Copy & Paste Funtcion

Postby Drnkhobo » Tue Nov 06, 2012 12:23 pm

Thanks Trog, Will read up on your trigger tutorials on SM forums.( ALOT of info there! )

And about the INF, you are right im getting the INF out of my RMS module. Essentially its just fed the signal and outputs to a M2F. Which then reads the INF. So I know my rms module is to blame!

I guess its trying to divide by 0 when the signal drops , so I just added 0.0000001 to the division in DSP.

It seems to work now 8-)

And my copy paste module now uses a .txt file :oops:
Nice and Easy! lol, there's me trying to dive headfirst in the deep-end when there is a paddling pool right next to me!
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

Re: Copy & Paste Funtcion

Postby trogluddite » Tue Nov 06, 2012 7:36 pm

Drnkhobo wrote:Nice and Easy! lol, there's me trying to dive headfirst in the deep-end when there is a paddling pool right next to me!

He he, well I see now a lot of familiar name appearing here - old SM'ers come to play with the new toys. So I guess the paddling pool has come closer!
Looking forward to this - we will learn as much as we teach, I am sure - trade some trigger skills for some Ruby tips! :D

Played a bit now with the FS3 demo (oops - got a bit late, tired eyes at work today!). Pretty much everything I tried of my old things have worked great so far, so I think getting some of those tutorials over here shouldn't be too hard - just replace the odd component here and there with the nice shiny new ones, and ready o go!

NB) For RMS the conversion is best to be done in DSP code - the Mono2Float can only read approx.100 samples per second maximum, and missing so many samples will distort the reading very badly (often the highest peaks will just go past without registering). Keep your eye out for the new module packs that get posted up - there's sure to be an audio pack with a decent RMS convertor for audio in there somewhere. If not, I'll have a rummage in my old schematics, it is something I have used in many old designs.
All schematics/modules I post are free for all to use - but a credit is always polite!
Don't stagnate, mutate to create!
User avatar
trogluddite
 
Posts: 1730
Joined: Fri Oct 22, 2010 12:46 am
Location: Yorkshire, UK

Re: Copy & Paste Funtcion

Postby Drnkhobo » Tue Nov 06, 2012 8:32 pm

NB) For RMS the conversion is best to be done in DSP code - the Mono2Float can only read approx.100 samples per second maximum. . .


I dont understand Trog, my mono to float is AFTER the rms, and how else can I get float data from a stream?
(I tried in DSP module but it didnt work. Having said that, I dont really know much of the DSP's own little language so maybe I got it wrong. . ) But anyway my rms is in the DSP code module.


Code: Select all
streamin in;
streamin bufferSize;
streamout average;

float buffer[44100];
float n,sum,size=512;

size = bufferSize;

sum = (sum + in) - buffer[n];

buffer[n]= in;

average = sum/size;

n = n + 1;
n = n- (n>=size)&size;


This was a example that exo put up here.

This and a simple-(ish) automatic gain corrector is giving me grief! :cry:
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

RMS Value

Postby Tronic » Tue Nov 06, 2012 10:49 pm

I created an example, for a quick RSM value

(Tronic)_RMS_example_FSMv3.fsm
(30.69 KiB) Downloaded 1001 times
Tronic
 
Posts: 539
Joined: Wed Dec 21, 2011 12:59 pm

Re: Copy & Paste Funtcion

Postby Drnkhobo » Tue Nov 06, 2012 11:42 pm

Thanks Tronic, ill check it in the morn.

:D
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

Re: Copy & Paste Funtcion

Postby trogluddite » Wed Nov 07, 2012 2:22 am

Drnkhobo wrote:I dont understand Trog, my mono to float is AFTER the rms

Ah sorry, my mistake, I read your screenshot a bit wrong - I could only see that the dB conversion was in 'green', and thought that maybe the whole routine was in there.

Tronic's solution is the right one for RMS code- the code that you posted is only finding the average signal. That's not quite the same as RMS - you need the square/square-root parts that you see in Tronic's code, otherwise positive and negative audio values will tend to cancel each other out.
From what I can see though, the meter is not really a dB meter - the value from the code is RMS, but I don't see a dB conversion anywhere, so it is showing the absolute value, not logarithmically scaled as it should be for dB.
I'd also use just a Mono2Float from a custom ticker rather than the 'V' frame buffer - only one value from each buffer is ever being read, and the ballistics of the RMS code will smooth the result well enough that reading only occasional samples will not give too much error. Using small soundcard buffer sizes, the frames will be coming in much faster than the display could ever be updated, and 100s of buffer values are being passed for no reason - which will use a lot of unnecessary CPU power.
All schematics/modules I post are free for all to use - but a credit is always polite!
Don't stagnate, mutate to create!
User avatar
trogluddite
 
Posts: 1730
Joined: Fri Oct 22, 2010 12:46 am
Location: Yorkshire, UK

Re: Copy & Paste Funtcion

Postby Drnkhobo » Wed Nov 07, 2012 5:34 pm

Ive got a sqr module in assembly after the rms

Code: Select all
streamin in;
streamout out;

movaps xmm0,in;
sqrtps xmm0,xmm0;
movaps out,xmm0;


I dont understand what you mean about V buffers Trog? - Aaah, Tronics example . . .
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

Re: Copy & Paste Funtcion

Postby Drnkhobo » Wed Nov 07, 2012 7:57 pm

Ok here it is,

RMS.fsm
(1.87 KiB) Downloaded 977 times


Its my rms module. I am going to change the rms sample size down to +-4000
Anyway here is where i get my INF errors. . .
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

Re: Copy & Paste Funtcion

Postby trogluddite » Wed Nov 07, 2012 8:39 pm

Taking shape nicely! :) - in fact it is engineered a little TOO well, and there are now quite a few bits that you can safely remove.

- The square of a number can never be negative, so you can safely delete all of the abs() functions (code and primitives).
- You can remove all of that "green protection" between the M2F and dB if you make a tiny modification of the averaging code...
Code: Select all
streamin in;
streamin bufferSize;
streamout average;

float buffer[44100];
float n,sum,size=512;
//in = abs(in);  Not needed any more due to In * in
size = bufferSize;

sum = (sum + in) - buffer[n];

buffer[n]= in;

average = sum/size;
average = max(average,0.000001);  //Can't go below this value
average = min(average,1);  //Can't go above 1

n = n + 1;
n = n- (n>=size)&size;

This is a little bit safer than adding the small offset as it is immune from any rounding errors that creep into the maths., It also means that "normal" values don't have anything added to them, so they'll never go off the scale of the meter (above 0dB).

PS) Watch out with those min and max functions - they confused me for ages. max(x,y) means "give me whichever if the biggest of these two values", so it doesn't set a maximum value for X, it's actually used when setting a minimum. I still get min and max the wrong way around about 5 million times a week!

And another thing to be aware of - it is not a good idea to modify a streamin variable (e.g. in = ...). Something done all the time in many programming languages, but due to a quirk of the way that input links work in FS, it can have some very strange side-effects sometimes. What happens is that the change to the input variable also changes the value at the other end of the link, inside the module/connector that is sending the value - and any other modules connected to the same source will see this modified value. I guess you could say that the link wires represent global variables, and they don't get made local inside a code block.
All schematics/modules I post are free for all to use - but a credit is always polite!
Don't stagnate, mutate to create!
User avatar
trogluddite
 
Posts: 1730
Joined: Fri Oct 22, 2010 12:46 am
Location: Yorkshire, UK

Re: Copy & Paste Funtcion

Postby Drnkhobo » Wed Nov 07, 2012 9:56 pm

Damn, thanks Trog! :lol:

Thanks for the tips on the whole "in=. . ."
Its weird that it works that way but I guess im just used to other languages.
Your code makes more sense than my feeble attempt lol

Im used to those min,max functions (used them in AVS) I dont know why I never thought of doing it like this!

:roll:


Ive just noticed (yes,only now) when you connect a text primitive to the dsp module, it shows the conversion to asm right?
- Also why not then just use the output and have a asm instead of dsp module???
Drnkhobo
 
Posts: 312
Joined: Sun Aug 19, 2012 7:13 pm
Location: ZA

PreviousNext

Return to General

Who is online

Users browsing this forum: No registered users and 80 guests