Is there any chance to get longer enveloppe in the next teensyduino version :) ?

Status
Not open for further replies.

MadMind

Well-known member
Hi there !

Hope everyone is well. I haven't seen any topic about the enveloppe sizes so I'm making a new one to have a thread about this precious function.

I'm currently making a FM4 synthesizer with that great audio library (would like to get as close as possible that the FM8 plugin). It already sounds very interesting and the possibilities are amazing now but I think it's a shame to not have the possibility to get longer enveloppes in order to be able to make more textured sounds and atmospheric pad.

Code:
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioSynthNoiseWhite     noise1;         //xy=244.28564453125,229.99996948242188
AudioSynthNoiseWhite     noise2;         //xy=251.78570556640625,430.8927917480469
AudioSynthWaveform       waveform1;      //xy=252.85723876953125,191.42852783203125
AudioSynthNoiseWhite     noise3;         //xy=252.6785888671875,706.4286499023438
AudioSynthWaveform       waveform2;      //xy=261.9643249511719,392.6785583496094
AudioSynthWaveform       waveform3;      //xy=262.67857360839844,670.3571166992188
AudioSynthWaveformDc     PitchEnvDepthOsc1;            //xy=279.642822265625,85.71430969238281
AudioSynthWaveformDc     PitchEnvDepthOsc3; //xy=289.8213806152344,562.7857666015625
AudioSynthWaveformDc     PitchEnvDepthOsc2; //xy=291.5714111328125,289.9643249511719
AudioSynthWaveformDc     PitchEnvDepthOsc4; //xy=297.0714111328125,847.0357666015625
AudioSynthNoiseWhite     noise4;         //xy=341.9642639160156,983.5714111328125
AudioSynthWaveform       waveform4;      //xy=348.0357142857143,946.7857142857142
AudioMixer4              mixerOSCtoOSC2; //xy=457.5714111328125,341.7143249511719
AudioMixer4              mixerOSCtoOSC1;         //xy=461.4285583496094,137.1428985595703
AudioMixer4              mixerOSCtoOSC3; //xy=459.5714111328125,617.2857666015625
AudioMixer4              mixerOSCtoOSC4; //xy=468.3214111328125,895.0357666015625
AudioEffectEnvelope      PitchEnvOsc3;   //xy=470.23809814453125,561.9524230957031
AudioEffectEnvelope      PitchEnvOsc2;   //xy=471.5714111328125,289.7143249511719
AudioEffectEnvelope      PitchEnvOsc1;      //xy=474.28570556640625,85.71430969238281
AudioEffectEnvelope      EnvNoise1;      //xy=475.7142028808594,228.57138061523438
AudioEffectEnvelope      EnvWave1;      //xy=478.57147216796875,191.42855834960938
AudioEffectEnvelope      EnvNoise3;      //xy=480.1785888671875,707.1429443359375
AudioEffectEnvelope      EnvWave3;      //xy=480.892822265625,673.21435546875
AudioEffectEnvelope      EnvWave2;      //xy=482.8571472167969,392.8571472167969
AudioEffectEnvelope      PitchEnvOsc4;   //xy=481.3214111328125,847.0357666015625
AudioEffectEnvelope      EnvNoise2;      //xy=483.2142639160156,430.35711669921875
AudioEffectEnvelope      EnvNoise4;      //xy=490.53570556640625,982.5
AudioEffectEnvelope      EnvWave4;      //xy=490.8928527832031,946.7857055664062
AudioMixer4              mixerOSC2;      //xy=650.4285278320312,347.857177734375
AudioMixer4              mixerOSC3;      //xy=655.5714111328125,623.2857666015625
AudioMixer4              mixerOSC1;         //xy=658.5712890625,144.28567504882812
AudioMixer4              mixerOSC4;      //xy=660.3214111328125,901.0357666015625
AudioSynthWaveformSineModulated OSC3;           //xy=795.5714111328125,623.2857666015625
AudioSynthWaveformSineModulated OSC4;           //xy=798.3214111328125,901.0357666015625
AudioSynthWaveformSineModulated OSC2;           //xy=802.5714111328125,349.7143249511719
AudioSynthWaveformSineModulated OSC1;       //xy=815.7142944335938,144.28567504882812
AudioEffectEnvelope      VolEnvOsc3;     //xy=975.5714111328125,549.2857666015625
AudioEffectEnvelope      VolEnvOsc2;     //xy=980.5714111328125,286.7143249511719
AudioEffectEnvelope      VolEnvOsc1;     //xy=984.8571166992188,89.14286804199219
AudioEffectEnvelope      VolEnvOsc4;     //xy=988.3214111328125,867.0357666015625
AudioMixer4              mixerMASTER;    //xy=1214,336.0000305175781
AudioOutputI2S           i2s1;           //xy=1497.2376708984375,341.3334045410156
AudioConnection          patchCord1(noise1, EnvNoise1);
AudioConnection          patchCord2(noise2, EnvNoise2);
AudioConnection          patchCord3(waveform1, EnvWave1);
AudioConnection          patchCord4(noise3, EnvNoise3);
AudioConnection          patchCord5(waveform2, EnvWave2);
AudioConnection          patchCord6(waveform3, EnvWave3);
AudioConnection          patchCord7(PitchEnvDepthOsc1, PitchEnvOsc1);
AudioConnection          patchCord8(PitchEnvDepthOsc3, PitchEnvOsc3);
AudioConnection          patchCord9(PitchEnvDepthOsc2, PitchEnvOsc2);
AudioConnection          patchCord10(PitchEnvDepthOsc4, PitchEnvOsc4);
AudioConnection          patchCord11(noise4, EnvNoise4);
AudioConnection          patchCord12(waveform4, EnvWave4);
AudioConnection          patchCord13(mixerOSCtoOSC2, 0, mixerOSC2, 1);
AudioConnection          patchCord14(mixerOSCtoOSC1, 0, mixerOSC1, 1);
AudioConnection          patchCord15(mixerOSCtoOSC3, 0, mixerOSC3, 1);
AudioConnection          patchCord16(mixerOSCtoOSC4, 0, mixerOSC4, 1);
AudioConnection          patchCord17(PitchEnvOsc3, 0, mixerOSC3, 0);
AudioConnection          patchCord18(PitchEnvOsc2, 0, mixerOSC2, 0);
AudioConnection          patchCord19(PitchEnvOsc1, 0, mixerOSC1, 0);
AudioConnection          patchCord20(EnvNoise1, 0, mixerOSC1, 3);
AudioConnection          patchCord21(EnvWave1, 0, mixerOSC1, 2);
AudioConnection          patchCord22(EnvNoise3, 0, mixerOSC3, 3);
AudioConnection          patchCord23(EnvWave3, 0, mixerOSC3, 2);
AudioConnection          patchCord24(EnvWave2, 0, mixerOSC2, 2);
AudioConnection          patchCord25(PitchEnvOsc4, 0, mixerOSC4, 0);
AudioConnection          patchCord26(EnvNoise2, 0, mixerOSC2, 3);
AudioConnection          patchCord27(EnvNoise4, 0, mixerOSC4, 3);
AudioConnection          patchCord28(EnvWave4, 0, mixerOSC4, 2);
AudioConnection          patchCord29(mixerOSC2, OSC2);
AudioConnection          patchCord30(mixerOSC3, OSC3);
AudioConnection          patchCord31(mixerOSC1, OSC1);
AudioConnection          patchCord32(mixerOSC4, OSC4);
AudioConnection          patchCord33(OSC3, VolEnvOsc3);
AudioConnection          patchCord34(OSC4, VolEnvOsc4);
AudioConnection          patchCord35(OSC2, VolEnvOsc2);
AudioConnection          patchCord36(OSC1, VolEnvOsc1);
AudioConnection          patchCord37(VolEnvOsc3, 0, mixerMASTER, 2);
AudioConnection          patchCord38(VolEnvOsc3, 0, mixerOSCtoOSC2, 2);
AudioConnection          patchCord39(VolEnvOsc3, 0, mixerOSCtoOSC3, 2);
AudioConnection          patchCord40(VolEnvOsc3, 0, mixerOSCtoOSC4, 2);
AudioConnection          patchCord41(VolEnvOsc3, 0, mixerOSCtoOSC1, 2);
AudioConnection          patchCord42(VolEnvOsc2, 0, mixerMASTER, 1);
AudioConnection          patchCord43(VolEnvOsc2, 0, mixerOSCtoOSC2, 1);
AudioConnection          patchCord44(VolEnvOsc2, 0, mixerOSCtoOSC3, 1);
AudioConnection          patchCord45(VolEnvOsc2, 0, mixerOSCtoOSC4, 1);
AudioConnection          patchCord46(VolEnvOsc2, 0, mixerOSCtoOSC1, 1);
AudioConnection          patchCord47(VolEnvOsc1, 0, mixerMASTER, 0);
AudioConnection          patchCord48(VolEnvOsc1, 0, mixerOSCtoOSC2, 0);
AudioConnection          patchCord49(VolEnvOsc1, 0, mixerOSCtoOSC3, 0);
AudioConnection          patchCord50(VolEnvOsc1, 0, mixerOSCtoOSC4, 0);
AudioConnection          patchCord51(VolEnvOsc1, 0, mixerOSCtoOSC1, 0);
AudioConnection          patchCord52(VolEnvOsc4, 0, mixerMASTER, 3);
AudioConnection          patchCord53(VolEnvOsc4, 0, mixerOSCtoOSC2, 3);
AudioConnection          patchCord54(VolEnvOsc4, 0, mixerOSCtoOSC3, 3);
AudioConnection          patchCord55(VolEnvOsc4, 0, mixerOSCtoOSC4, 3);
AudioConnection          patchCord56(VolEnvOsc4, 0, mixerOSCtoOSC1, 3);
AudioConnection          patchCord57(mixerMASTER, 0, i2s1, 0);
AudioConnection          patchCord58(mixerMASTER, 0, i2s1, 1);
AudioControlSGTL5000     sgtl5000_1;     //xy=1493.2379150390625,396.00006103515625
// GUItool: end automatically generated code

I was wondering wether this option was possible (let's say for having about a 5-10 seconds long enveloppe) and if there was someone that tried this already ?

Any suggested improvment ?

Thanks a lot.
 
More seconds means more memory. More memory means to use other MCU more expensive and maybe a whole new board design.
10 seconds * 2 (16 bits) * 2 (audio channels) * 44100 (Hz) = 1764000 Bytes = 1,764 MB Ram
Only for hold that 10 seconds.
Teensy 3.6 has 1MB Ram and it's a lot for a MCU.
Features almost always come at a cost.
How much do you want to pay for the next Teensy?
 
I have some good news for you. AudioEffectEnvelope was improved almost 1 year ago, to support up to 11.8 seconds. The old 0.2 second limit is long gone.

Here's the conversation you missed, about the change from 16 to 30 bits for the incremental gain.

https://forum.pjrc.com/threads/2720...ted-to-1000-ms?p=142040&viewfull=1#post142040

Since then, AudioEffectEnvelope also got more work to add a special fast (but not instant pop/click generating) release phase if you begin a new note before the envelope has finished. That feature is controlled by releaseNoteOn(milliseconds);
 
Oupss, sorry for having missed that thread !
That's a great great new indeed ! Thanks a lot Paul for that brilliant work ! can't wait for playing with it ! I also discovered the releaseNoteOn() function today ! That also works perfectly ! It really push further the possibilities and the quality of the library.

Well done !
 
Status
Not open for further replies.
Back
Top