SGTL5000 for DC control voltage output

Status
Not open for further replies.
BTW blakeA, if I am understanding you correcttly in your point about not doing things "in the audio path" here's something to consider: When you change a CV at a high rate of delta (as you do digitally with ease) you introduce audible steps. This is why my synth does absolutely everything as an analog model in the "signal path" as much as possible: because every "CV" change needs to happen at sample rate, with proper rate limiting. There's more than 30 filters in my machine that just make sure "control voltages" don't change too fast, or even that square waves from lfos behave more "analog."

So here's what I found. With my modified AudioEffectEnvelope, I can use an envelope as a source of value whether or not it's routed through the audio path. The only requirement is that there is a real, valid output driver. If the driver is there, I can have an envelope, not connected to anything, and use its value. So, for example, if I am willing to sacrifice pin 7 on my T4, I can create a dummy SPDIF output. As long as the envelope has an input, it just works and can pass its value to my callback function. As stated below, this is cool if for no other reason than my envelopes can have LEDS on my front panel. This approach has the "advantage" of not really passing any DC signal through my audio path, but I can see your way of mixing it all together is very powerful, too.
 
To recap, all I have done is extract a value from a class derived from the AudioEffectEnvelope class. This has taken me from a nebulous POC to some kind of Paleolithic Shruthi sitting on a few wired boards. I will need a way to get LFO and general midi-to-cv as well. If I can do it all with PWM that's nice, otherwise the outboard multi-channel DAC. Midi-to-cv really has nothing to do with the Audio Library, so that's just some cut-and-paste code. But it would be nice to obtain function values from a waveform synth for the LFO, knowing it could just as easily run at audio frequencies.
(I should explain that for now my VCO is a Jan Ostman synth-on-a-chip picking up MIDI from the Teensy. Long-term there's no need to use this cheap abomination. But it was just sitting there crying out. It's good enough to make a fat-sounding 303 sort of bass synth and that's okay for now. Long term I'm going to feed Teensy waveforms from MQS into my analog signal path. MQS should be more than good enough for monophonic oscillator waveforms, cross-modulated waveforms, and noise.)
 
Last edited:
I have a loop{} of about 1500 lines and it runs in like 15uS. I've had good success just reading the rms values from the lfos with the module. But, again, the whole main loop runs in less than one sample period. I could (and may) just as easily run about a dozen lfos with one simple timer loop and an array of phase accumulators. If there's 5uS jitter in a 1.5Hz modulation signal, who cares?
 
To follow up here, my patch to AudioEffectEnvelope solved my problems well. I was plagued by an analog VCA (AS3360 with just about perfect CV feedthrough rejection) clicking on rapid attack times. It took a lot of reading, testing, coding, and soldering, to figure this out. (and yeah I don't have a scope or a simulator, so yeah I am flying blind) Ultimately the Shruthi forums explained that a digital ADSR has such sharp attack times that any slow-moving low frequency sound, like a muted bass tone, will click if a super-fast VCA gates it. Solution? A bigger capacitor for the PWM filter. 1mF to 2.2mF seems to work for me. That makes the envelope retro in a credible way for my VCA. At this point I am liking how this sounds so I need to finish up the UI software. If I ever get this documented I promise I'll post a link.
 
one more thing, I noticed in some cases the attack envelope had some odd spikes in it... by filtering certain ADSR states in the effect module, and discarding falling values during attack time and rising decay values, I was able to get rid of a funny scratching noise.... also important to note that the envelope's "idle" state is where you get a signal to return to a zero (resting) state... So much learned.
 
Status
Not open for further replies.
Back
Top