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
mono stream synth
5 posts
• Page 1 of 1
mono stream synth
Ok, I give up!
It takes me seconds to get a basic synth going: Midi in, midi to poly, set the module to only one voice. Done.
But when I want to go blue only, suddenly I can't get any sound out of Flowstone (other than the hidden triggering, when the schematic refreshes.
So, imagine a bunch of simple mono synths. OSC, Envelope, maybe filter. That several times, say 3 times for this example. Each oscillator has a fixed frequency that I provide with a simple float prim.
And now?
How to tigger them?
How can I get the midi signal (after some interpretation) to trigger either one, two or all three oscillators (each with their predefined, fixed, float-prim-provided frequencies), for that juicy sound I so desperately want?
Maybe I don't see the wood for the trees, but if someone could provide me with an example, I would not be embarrassed to admit that I won't have come to that solution
It takes me seconds to get a basic synth going: Midi in, midi to poly, set the module to only one voice. Done.
But when I want to go blue only, suddenly I can't get any sound out of Flowstone (other than the hidden triggering, when the schematic refreshes.
So, imagine a bunch of simple mono synths. OSC, Envelope, maybe filter. That several times, say 3 times for this example. Each oscillator has a fixed frequency that I provide with a simple float prim.
And now?
How to tigger them?
How can I get the midi signal (after some interpretation) to trigger either one, two or all three oscillators (each with their predefined, fixed, float-prim-provided frequencies), for that juicy sound I so desperately want?
Maybe I don't see the wood for the trees, but if someone could provide me with an example, I would not be embarrassed to admit that I won't have come to that solution
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: mono stream synth
Update:
If I use Ruby, connect midi in to it and run this code
and connect the float output to the trigger input of the stock envelopes, I get a sound.
BUT
Although I send 0 to close the gate, a new sound is only triggered when the envelope is gone completely through. It does not stop and restart on a new trigger, as I expect. AARRRRGGGHHHHH
If I use Ruby, connect midi in to it and run this code
- Code: Select all
def event(i, v)
if v.status == 144 or v.status == 128
if v.status == 144 and v.data2 > 0
output 0b1111_1111_1111_1111_1111_1111_1111_1111
else
output 0
end
end
end
and connect the float output to the trigger input of the stock envelopes, I get a sound.
BUT
Although I send 0 to close the gate, a new sound is only triggered when the envelope is gone completely through. It does not stop and restart on a new trigger, as I expect. AARRRRGGGHHHHH
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
Re: mono stream synth
Unfortunately, I can't upload again - but here are a couple of thoughts after having a bit of a tinker...
1) Do all of your envelopes have the 'gate' tickbox enabled in the properties panel? The gate input will be ignored otherwise! If you have more than one, they might interfere with each other if any are trying to access the "automatic" poly-voice activation.
2) Sending your binary value to a float output won't send a streambool true - the output will just be a normal 32-bit float representing the numeric value of that Fixnum (about 4.3 billion). However, you can get an "all-bits-true" bitmask as a Float (which is NaN) by using packing/unpacking (i.e. reinterpretation of bit-patterns, rather than number base conversion). As it involves several conversions via arrays and byte-Strings, it's best stored as a variable in the "init" method for re-use...
PS: It's strange how FS allows the green float to stream bool linking without having to force it. There is absolutely no normal green value which would automatically convert to a stream boolean correctly - not even a green boolean (which is really just an integer one)! The above Ruby or DSP/ASM are the only ways to do a proper bitmask conversion, and the bitmask value can be passed just as effectively via a normal stream float link. Streambools exists ONLY for the validation of connector types as defined by the designer - yet they will accept any old green floats, and won't convert green booleans properly!
1) Do all of your envelopes have the 'gate' tickbox enabled in the properties panel? The gate input will be ignored otherwise! If you have more than one, they might interfere with each other if any are trying to access the "automatic" poly-voice activation.
2) Sending your binary value to a float output won't send a streambool true - the output will just be a normal 32-bit float representing the numeric value of that Fixnum (about 4.3 billion). However, you can get an "all-bits-true" bitmask as a Float (which is NaN) by using packing/unpacking (i.e. reinterpretation of bit-patterns, rather than number base conversion). As it involves several conversions via arrays and byte-Strings, it's best stored as a variable in the "init" method for re-use...
- Code: Select all
@stream_true = [0xFFFFFFFF].pack('L').unpack('F').first
PS: It's strange how FS allows the green float to stream bool linking without having to force it. There is absolutely no normal green value which would automatically convert to a stream boolean correctly - not even a green boolean (which is really just an integer one)! The above Ruby or DSP/ASM are the only ways to do a proper bitmask conversion, and the bitmask value can be passed just as effectively via a normal stream float link. Streambools exists ONLY for the validation of connector types as defined by the designer - yet they will accept any old green floats, and won't convert green booleans properly!
All schematics/modules I post are free for all to use - but a credit is always polite!
Don't stagnate, mutate to create!
Don't stagnate, mutate to create!
-
trogluddite - Posts: 1730
- Joined: Fri Oct 22, 2010 12:46 am
- Location: Yorkshire, UK
Re: mono stream synth
I might have got it wrong, but I thought the intention was to implement it in stream, not poly. So here is how I'd approach it.
A slightly modified Ruby code:
and a stream envelope (connect the ruby output with stream input):
The envelope will be triggered at gate onset regardless of the current stage (and regardless of the note played). The release stage is exponential so after the "release time", the envelope will have decayed to 37%, not zero. Obviously it is not optimized.
A slightly modified Ruby code:
- Code: Select all
def event(i, v)
if v.status == 144 or v.status == 128
if v.status == 144 and v.data2 > 0
output 1
else
output 0
end
end
end
and a stream envelope (connect the ruby output with stream input):
- Code: Select all
streamin gate;
streamout env; // envelope
float attack = 4410; // attack duration (samples)
float hold = 22050; // hold duration (samples)
float release = 44100; // release time (samples)
float gate1 = 0; // previous gate value
float time = 0; // elapsed time (samples)
float denv = 0; // envelope increment per sample
// start envelope on gate onset
env = env & ((gate1 > 0) | (gate == 0));
time = time & ((gate1 > 0) | (gate == 0));
gate1 = gate;
// increment timer
time = min(time + 1, attack + hold + release);
// increment or decrement envelope
denv = (1/attack) & (time < attack);
denv = denv - (env/release) & (time > (attack + hold));
env = env + denv;
// terminate envelope via truncation at -60 dB
env = env & (env > 1e-3) | (time < attack)
The envelope will be triggered at gate onset regardless of the current stage (and regardless of the note played). The release stage is exponential so after the "release time", the envelope will have decayed to 37%, not zero. Obviously it is not optimized.
-
martinvicanek - Posts: 1328
- Joined: Sat Jun 22, 2013 8:28 pm
Re: mono stream synth
So I derped two times! First by creating a bitmask that isn't one. Then by trying to use it in mono stream. Yeah, I'm a solid pro
@trog
Thank you for the pack/unpack code! I will keep it for future applications! But as Martin pointed out, I derped, so please don't be disappointed from wasting your time
@Martin
Yes, I want the whole thing to work in the blue (mono) stream! I will check your example now, but already from reading I notice that it needs the envelope generator to accept this behavior, it cannot be forced, if it isn't in the envelope code. This thread belongs to my other one in the dsp subforum, and the envelope generator there already incorporates it. However, it would be awesome if you could have a look at it for a few seconds, just to check, if we are missing anything: http://www.dsprobotics.com/support/viewtopic.php?f=4&t=39767
Thank you both!
@trog
Thank you for the pack/unpack code! I will keep it for future applications! But as Martin pointed out, I derped, so please don't be disappointed from wasting your time
@Martin
Yes, I want the whole thing to work in the blue (mono) stream! I will check your example now, but already from reading I notice that it needs the envelope generator to accept this behavior, it cannot be forced, if it isn't in the envelope code. This thread belongs to my other one in the dsp subforum, and the envelope generator there already incorporates it. However, it would be awesome if you could have a look at it for a few seconds, just to check, if we are missing anything: http://www.dsprobotics.com/support/viewtopic.php?f=4&t=39767
Thank you both!
"There lies the dog buried" (German saying translated literally)
- tulamide
- Posts: 2714
- Joined: Sat Jun 21, 2014 2:48 pm
- Location: Germany
5 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 50 guests