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
May I ...?
32 posts
• Page 1 of 4 • 1, 2, 3, 4
May I ...?
Hey Guys!
Lately it occured to me that there is a lot of help for people struggling with Green or Ruby. By that I don't mean the general help we all get for any question we have. I mean specifically tailor-made modules for your toolbox.
I don't have issues, so I contribute a lot in this area. However, I have issues beyond belief regarding DSP. Be it dsp code or even Assembler. It's not the language learning. I know the logic of the (pretty simple) dsp code. No, I struggle with the concept. This whole idea of changing a whole sequence of samples based on a window size of only one sample. And the bitmasking. Again, not the general logic, but when it comes to combining dozens of conditionals into one line of code via bitmasking. I just don't get it, and I never will. I know that because I tried. I tried very hard.
When I have a buffer, I know what to do, and I can with higher languages like C, Python, Ruby, even BASIC. But they are on another path. One that I understand.
I'm not looking for a teacher. I'm not looking for explanations on how things work. I've given up on that. But, I thaught maybe, just maybe, I could make requests, similar to the Green/Ruby contributions? Meaning, I would get a module that I can put in my toolbox and use as a working block?
The only one that ever made something like that for dsp/assembler was Martin. His Oscillators and the state variable filter are still building blocks for my work. But there is so much more missing that would help so much. As of now, one can only produce production-ready VST plugins, if you know how to optimize things in dsp/assembler. I can't. But I would also love to produce something that's fast, stable and with a small cpu and memory footprint.
So here's a list of things I wish would exist:
(1) A versatile Envelope. ADSR, or even ADHSR. Optimized (Assembler?). Switchable (for me as the developer, not neccesarily for the end user) between time and beat settings. With exact information on the time window. For example, the envelope covers a total of x seconds. Or, with A and D at 0.5, the envelope covers 2x the DAW's speed. Or whatever. But something that makes more sense than just a button from 0 to 1, without any reference to what 1 means.
(2) An optimized (Assembler?) 24 dB, self-resonating (switchable!) low pass filter. Modulatable on frequency and resonance, and with inputs (or knobs) that clearly use these terms. For example, full value on resonance means you only hear the resonance.
(3) An optimzed (Assembler?) comb filter, with frequency, resonance and odd/even (or is it +/-?) setting. Modulatable.
(4) An optimized (Assembler?) mixer for poly and mono.
Where mono mixes 4 streams into one stereo stream using inputs (or knobs) for signal strength and panning. Note, strength, not amplitude. If I set the four streams to 1, 0, 0, 0 it will output the first at 0 dB. But if I set 1, 0.5, 0, 0 then the first outputs at (roughly) -3.5 dB, and the second at (roughly) -9.5 dB. (dbFS that is) So it notices that, to get a total sum of voltage 1 = 0 dBFS, it needs to distribute the voltage in shares over the four streams. In the second example it's 0.666~, 0.333~ 0, 0 (voltage). 1, 0.5, 0.75, 0 would be 0.444~, 0.222~, 0.333~, 0. Etc.
For the poly stream the mixer would "reduce" the 4 to 1 stream. Not just adding them! Meaningful values are in the range -1/+1, if I'm not wrong, so that would be the range of values the one stream output would carry. Or do I miss something here?
All of them should be fully working in 3.0.6 (the most stable and bug-free version of Flowstone), which means no use of stream IDs that were added in 3.0.8. Not sure if there are any other things to consider for 3.0.6
I know this post will not get immediate attention, and people may also not be motivated to do such modules. But if only one of the points becomes a reality, that would already be awesome!
Lately it occured to me that there is a lot of help for people struggling with Green or Ruby. By that I don't mean the general help we all get for any question we have. I mean specifically tailor-made modules for your toolbox.
I don't have issues, so I contribute a lot in this area. However, I have issues beyond belief regarding DSP. Be it dsp code or even Assembler. It's not the language learning. I know the logic of the (pretty simple) dsp code. No, I struggle with the concept. This whole idea of changing a whole sequence of samples based on a window size of only one sample. And the bitmasking. Again, not the general logic, but when it comes to combining dozens of conditionals into one line of code via bitmasking. I just don't get it, and I never will. I know that because I tried. I tried very hard.
When I have a buffer, I know what to do, and I can with higher languages like C, Python, Ruby, even BASIC. But they are on another path. One that I understand.
I'm not looking for a teacher. I'm not looking for explanations on how things work. I've given up on that. But, I thaught maybe, just maybe, I could make requests, similar to the Green/Ruby contributions? Meaning, I would get a module that I can put in my toolbox and use as a working block?
The only one that ever made something like that for dsp/assembler was Martin. His Oscillators and the state variable filter are still building blocks for my work. But there is so much more missing that would help so much. As of now, one can only produce production-ready VST plugins, if you know how to optimize things in dsp/assembler. I can't. But I would also love to produce something that's fast, stable and with a small cpu and memory footprint.
So here's a list of things I wish would exist:
(1) A versatile Envelope. ADSR, or even ADHSR. Optimized (Assembler?). Switchable (for me as the developer, not neccesarily for the end user) between time and beat settings. With exact information on the time window. For example, the envelope covers a total of x seconds. Or, with A and D at 0.5, the envelope covers 2x the DAW's speed. Or whatever. But something that makes more sense than just a button from 0 to 1, without any reference to what 1 means.
(2) An optimized (Assembler?) 24 dB, self-resonating (switchable!) low pass filter. Modulatable on frequency and resonance, and with inputs (or knobs) that clearly use these terms. For example, full value on resonance means you only hear the resonance.
(3) An optimzed (Assembler?) comb filter, with frequency, resonance and odd/even (or is it +/-?) setting. Modulatable.
(4) An optimized (Assembler?) mixer for poly and mono.
Where mono mixes 4 streams into one stereo stream using inputs (or knobs) for signal strength and panning. Note, strength, not amplitude. If I set the four streams to 1, 0, 0, 0 it will output the first at 0 dB. But if I set 1, 0.5, 0, 0 then the first outputs at (roughly) -3.5 dB, and the second at (roughly) -9.5 dB. (dbFS that is) So it notices that, to get a total sum of voltage 1 = 0 dBFS, it needs to distribute the voltage in shares over the four streams. In the second example it's 0.666~, 0.333~ 0, 0 (voltage). 1, 0.5, 0.75, 0 would be 0.444~, 0.222~, 0.333~, 0. Etc.
For the poly stream the mixer would "reduce" the 4 to 1 stream. Not just adding them! Meaningful values are in the range -1/+1, if I'm not wrong, so that would be the range of values the one stream output would carry. Or do I miss something here?
All of them should be fully working in 3.0.6 (the most stable and bug-free version of Flowstone), which means no use of stream IDs that were added in 3.0.8. Not sure if there are any other things to consider for 3.0.6
I know this post will not get immediate attention, and people may also not be motivated to do such modules. But if only one of the points becomes a reality, that would already be awesome!
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: May I ...?
.
Last edited by MichaelBenjamin on Mon Sep 21, 2020 11:04 am, edited 2 times in total.
- MichaelBenjamin
- Posts: 275
- Joined: Tue Jul 13, 2010 1:32 pm
Re: May I ...?
1 - 3 are definately not easy and would each take several hours to create from scratch.
4 however is (potentially) very easy, so I will give it a shot.
To get values that sum to 1 the most simple approach would be to divide each "strength" value by the sum of all the strength values. But this only makes sense if all of them are greater than or equal to 0.
So you'll have to clarify if that is the case for your application.
There is a special case when all the values are 0 (because that would mean division by 0), but I think it makes sense to just set all the output volumes to 0 in that case.
That's not the only possibility though, you could also use softmax, which works for negative weights aswell, but weights that were 0 before normalization will be greater than 0 zero afterwards. I don't know if that's desirable.
4 however is (potentially) very easy, so I will give it a shot.
To get values that sum to 1 the most simple approach would be to divide each "strength" value by the sum of all the strength values. But this only makes sense if all of them are greater than or equal to 0.
So you'll have to clarify if that is the case for your application.
There is a special case when all the values are 0 (because that would mean division by 0), but I think it makes sense to just set all the output volumes to 0 in that case.
That's not the only possibility though, you could also use softmax, which works for negative weights aswell, but weights that were 0 before normalization will be greater than 0 zero afterwards. I don't know if that's desirable.
- TheOm
- Posts: 103
- Joined: Tue Jan 28, 2014 7:35 pm
- Location: Germany
Re: May I ...?
I second this, but who knows assembly except Martin? Maybe a newbie with dsp and assembly experience.
The ADHSR should have a linear / exponential switch and should also have a delay setting.
The filter should have the ability to RING. That is when a pulse is supplied the filter will ring giving bell, string, and percussion type tones. Maybe a switch to set this mode.
The comb filter should be based on "Eventides Instant flanger/Phaser" from the early 70's. This is a hardware device, but is the best I have ever heard and still is.
The mixer should have voltage control capability.
Just my thoughts!
Later then, BobF.....
The ADHSR should have a linear / exponential switch and should also have a delay setting.
The filter should have the ability to RING. That is when a pulse is supplied the filter will ring giving bell, string, and percussion type tones. Maybe a switch to set this mode.
The comb filter should be based on "Eventides Instant flanger/Phaser" from the early 70's. This is a hardware device, but is the best I have ever heard and still is.
The mixer should have voltage control capability.
Just my thoughts!
Later then, BobF.....
- BobF
- Posts: 598
- Joined: Mon Apr 20, 2015 9:54 pm
Re: May I ...?
MichaelBenjamin wrote:the things you want are the things you need to make yourselve.
I hope to never read that sentence again. In all the years I never even thought of giving that answer to the many persons asking for help because they couldn't make it themselves. Of course there are a few that prefer to grab all they can, and I also wouldn't want to feed them directly. But you're talking to a guy that has offered more solutions to others than he can count. I don't even care much about the invested time. Some of my help needed weeks to complete.
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: May I ...?
TheOm wrote:To get values that sum to 1 the most simple approach would be to divide each "strength" value by the sum of all the strength values. But this only makes sense if all of them are greater than or equal to 0.
So you'll have to clarify if that is the case for your application.
There is a special case when all the values are 0 (because that would mean division by 0), but I think it makes sense to just set all the output volumes to 0 in that case.
That's not the only possibility though, you could also use softmax, which works for negative weights aswell, but weights that were 0 before normalization will be greater than 0 zero afterwards. I don't know if that's desirable.
Thank you so much, TheOm! I didn't expect such a quick reaction. Unfortunately I have some issues with the provided module. I list them in case you're interested to further work on this. But I understand if you are not willing to.
(1) It's not stereo. That's why I asked for the pan settings for each input stream. I want to use it pretty much at the end of the whole produced chain, mixing secondary blue stream audio to the primary audio with stereo field placement. (Think of parallel effects, for example)
(2) All your assumptions are totally correct. I would want to use it exactly as you described it, incl. when all are at 0. Thanks to the Ruby module I understand what you did. Just a question for clarification: Execution speed is not affected by using Ruby there instead of, say, stream math? (Btw. without an event method, the RubyEdits in general will produce an error the first time they're used. This is because they remember the first input as a string input - which is the default. So any method call outside the scope of the string class will provoke an error.)
(3) I don't get the expected result. I've made a simple setup, but the output is just a click and the scope just shows some negative, but stable, value. I assume something like NaN or NiL. See the sceenshot. Maybe I was setting it up wrong?
https://prntscr.com/gnafnb
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: May I ...?
How embarrassing! I simply forgot to switch to normalized output on the midi-to-poly module!
So forget about (3)!
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: May I ...?
(2) An optimized (Assembler?) 24 dB, self-resonating (switchable!) low pass filter. Modulatable on frequency and resonance, and with inputs (or knobs) that clearly use these terms. For example, full value on resonance means you only hear the resonance.
If you look inside my ASS there are 2 ladder-type filters. One is assembler but mine is using "discreet" LPFs by Martin (in ASM). In mine you could switch the LPFs in/out to get the slope you need.
I'm sure you're aware but I'll say it anyway: to get self-oscillation you need a seed; a low level of noise, to excite the filter. In electronics this was never a problem due to inherent 1/f noise and old analogue filters were always noisy anyway.
The reduction of frequencies below Fc at high resonance is a result of inverting feedback progressively cancelling out the incoming signal.
With exact information on the time window. For example, the envelope covers a total of x seconds.
The slopes of an envelope are generally produced by sample counting so the slope times for attack, decay and release are in samples so it's an easy matter to convert to seconds or preferably mS. Of course the sustain time will depend on the player and it's just a 0-1 level.
A complication sets in when you have exponential slopes because if you say a time is 500mS the user won't actually hear the release slope on amplitude for the whole half second, it will sound much shorter due to the high fall rate to quite a low level. It gets even more difficult to give a meaningful readout value for a Moog-type decay because this uses an emulated R-C delay. For this reason I originally had readouts on my ASS but finally removed them because they were misleading.
Sorry tulamide if this is all old news for you but it might help someone else!
Cheers
Spogg
-
Spogg - Posts: 3358
- Joined: Thu Nov 20, 2014 4:24 pm
- Location: Birmingham, England
Re: May I ...?
tulamide wrote:(1) It's not stereo. That's why I asked for the pan settings for each input stream. I want to use it pretty much at the end of the whole produced chain, mixing secondary blue stream audio to the primary audio with stereo field placement. (Think of parallel effects, for example)
Sorry I missed that part about stereo. The module I posted was just meant as a first draft and to get clarification for some things anyway.
tulamide wrote:(2) All your assumptions are totally correct. I would want to use it exactly as you described it, incl. when all are at 0. Thanks to the Ruby module I understand what you did. Just a question for clarification: Execution speed is not affected by using Ruby there instead of, say, stream math?
Well ruby is of course slow, but so is green (Though as we recently learned all methods on ruby edits are run in a separate thread by Flowstone for timeout purposes, which I think is ridiculous).
It could of course also be done completely in stream/asm, but I don't know if you need sample rate accuracy for the volume and panning inputs or not.
tulamide wrote:Btw. without an event method, the RubyEdits in general will produce an error the first time they're used. This is because they remember the first input as a string input - which is the default. So any method call outside the scope of the string class will provoke an error.
Oh that's "interesting" (could that be considered a bug?), I had never even noticed that before.
- TheOm
- Posts: 103
- Joined: Tue Jan 28, 2014 7:35 pm
- Location: Germany
Re: May I ...?
Also what kind of panning do you need, linear, circular, balance?
- TheOm
- Posts: 103
- Joined: Tue Jan 28, 2014 7:35 pm
- Location: Germany
32 posts
• Page 1 of 4 • 1, 2, 3, 4
Who is online
Users browsing this forum: No registered users and 90 guests