• Recently we have been getting a lot of tools for making phase modulation synthesis in Audulus, so I thought I would start a thread applying some of those ideas to recreating parts of the Elektron Digitone synth engine. For now, here is a link to the manual and some reference videos.

    Not really a eurorack clone, but something that is studying a specific instrument rather than a general concept.


  • Screen Shot 2018-02-01 at 6.44.02 PM.png
    462 x 297 - 25K
    Screen Shot 2018-02-01 at 6.52.39 PM.png
    455 x 329 - 34K
    Screen Shot 2018-02-01 at 6.47.06 PM.png
    576 x 339 - 50K
    Screen Shot 2018-02-02 at 8.36.03 AM.png
    778 x 188 - 43K
  • A lot of complexity here! You could probably get close on the waveforms using a set of uMorphs. Each uMorph will morph across eight waveforms. It currently interpolates between harmonic sets, but that could be changed. If the different wave types need to stay phase locked you could feed them with an external phasor, rather than the internal one. I did a square wave for example.
    uMorph Square.audulus
  • Good timing, I was just messing around with the harmonic generator, trying to turn it into a phase modulation operator :)
    Screen Shot 2018-02-02 at 12.57.39 PM.png
    980 x 579 - 151K
    Hamonic Tilt PROTO.audulus
  • In theory the phase of each partial could be modulated using the uMorph but the low resolution imposed by the digitizer would probably be undesirable. I was thinking about using the guts of the uMorph as a substitute for the wavetables and modulating the phase of the whole mess either by using an external phasor or adding an overall phase shift input to the internal one.
  • @stschoen you can actually just add to the internal phasor to phase modulate, since the sine function naturally acts like a mod/fract expression. That’s what was working for me with the harmonic generator.
  • Thats true! Circular reasoning at its best.
  • Ok so I made an adaptation of sorts of the STS Sandcastle with the digitone algorithms/ratios and just to spice things up a little I gave each operator a feedback control. Also all the operators are simple sin(x) functions. The X-Y mix is always direct from the operator, no level, and since operator C never modulates anything it doesn't get a level. Also the ratio of B1:B2 is fixed in the way mentioned above, so B2 gets no independent control of it's multiplier.

    I made a generative demo with it and am generally having a good time with all these PM synths happening here in the forum. The demo might be a little over patched for some peoples iPads but the Feedback Tone, as I am calling it, seems pretty well-behaved in terms of CPU. Also you might need to start the clock on the left for the demo to start :)

    Now to take a look at emulating those harmonic waveforms!
    Feedback Tone v1.audulus
    Screen Shot 2018-02-02 at 10.18.39 PM.png
    837 x 550 - 76K
    Feedback Tone demo.audulus
    Screen Shot 2018-02-02 at 11.37.13 PM.png
    1000 x 719 - 310K
  • Nice demo! I haven't looked at the Digitone manual as yet. But I do have one question regarding the algorithms. What's the difference between thew solid and dotted lines in the diagram? Also regarding emulating the wavetable, the uMorph currently does a linear interpolation between each set of harmonics but it would be easy to modify it to make an abrupt switch. Which do you think would be more appropriate?
  • Here's a uMorph with a saw
    uMorph saw.audulus
  • @stschoen Looking good with the uMorph Saw! My understanding is the dashed lines go to the X-Y crossfade mixer without any operator envelope. The FM part of the digitone synth engine is just the oscillator portion of a traditional subtractive signal path so the X-Y blend is then sent to an overdrive, couple filters, and finally a traditional ADSR.

    Their operator envelopes are pretty unique, they are ASDL where it L is level is leaving the signal open a little bit. I have been approximating these by just attenuating and offsetting the envelope signal to the operators but eventually I would like to tackle that too.

    Also I think linear blending is the way to go as they make a point in their videos that the harmonic waveforms crossfade with each other. If anyone wants steps, it's easy enough to quantize your modulation in Audulus.
  • Here's the square and reduced square. I think the drawings of the reduced square waveforms 1 and 2 may be reversed. In any case the first waveform clearly has more partials than the second. My emulation goes from less harmonics to more. I'm not sure that this is the most elegant approach to generating these. But I guess it'll work for now.
    uMorph Square and Square Reduced.audulus
  • I tried working on the reduced saw and didn't really get very far. After some additional reading of the manual I concluded that the harmonic series is a continuous series that morphs from sin to saw to odd/even to square etc. I'm guessing that both the amplitude and phase of each partial are continuously changing as it morphs. Ill have to do some more testing.
  • This is a different approach to the morph. It uses a smoothstep() function to sequentially add the harmonics in one at a time. This one morphs between a sine and square wave
    Sine to Square Harmonic Morph.audulus
  • This is deep as hell
  • @stschoen, wow, the sine to square is literally 5 times more CPU efficient than the others, super tidy on the inside, has more consistent amplitude, and the smoothstep makes the addition of harmonics sound really organic! Iike legit additive synthesis from the Fairlight CMI :)
  • I thought it sounded good. Now to figure out how to morph through the others!
  • Here's an improved sine to square, sine to saw and sine to saw to square. I think you'll like these.
    Sine to Ramp to Square Harmonic Morph.audulus
    Screen Shot 2018-02-05 at 10.45.59 AM.png
    2264 x 1658 - 377K
  • Wow! So those sound great! It looks like the sum of the partials on the sine to saw and square are exceeding the 1/-1 scale but that's a minor detail. I really wanna play around with these guys when I have a chance. Looks like I may say up late :)
  • I used a mapper node to try to normalize the volume. You could pull it down a bit more if you don’t mind the saw being a bit low. It’s a shame we can’t add a second control point. I still need to add the bell if I can figure out the right mix of harmonics.
  • Here's the final sine to saw to square to bell harmonic morph. I used a spline node to do a bit finer control over the output volume.
    Sine to Saw to Square to Bell Harmonic Morph.audulus
  • Sounds good!
  • Thanks, it’s my contribution to Robert’s Digitone project. I also plan to make a uPMop operator using it.
  • @stschoen, that would be ace!
  • Here's the optimized harmonic morph. I improved the generator by about 40%. I also added a 0 - 1phase input (it will actually go negative as well)
    Sine to Saw to Square to Bell Harmonic Morph V2.audulus
  • I took a crack at making the Feedback Tone v2 and while I am pleased with the variety of sounds it can create, it is a huge CPU hog.
    Screen Shot 2018-02-11 at 2.58.36 PM.png
    1861 x 1036 - 399K
    Feedback Tone v2 Demo.audulus
  • I don't think it's too awful. The patch is running at 27% on my iMac. Some cool sounds! BTW just in case you missed it, the output of the upper three muxes on the left aren't connected to anything.
  • @stschoen Thanks XD! I reuploaded the demo patch with the proper connections. On my Mac it's running at 52% and glitches out if I have two of them open. So I don't think I can get 8 voices going like the digitone, but I can definitely sample some tones and layer the composition.
  • I'm beginning to think that less is more when it comes to Audulus. I enjoy cloning the Eurorack modules for the intellectual challenge, but when it actually comes to creating patches I think the uModule, compact, single function approach is generally the best. Since its easy to rewire, and CPU load seems to be the limiting factor in most cases, I'd rather work with smaller components I can duplicate as necessary for a particular patch. BTW the binary to decimal and decimal to binary converters in the latest version of the uQuant are quite a bit more efficient than the previous versions. You might want to update your pattern generator.
  • Well said. I will definitely take a look at the pattern generator to try and streamline it.
  • I took another look at the harmonic morph this morning to see if I could squeeze anymore performance out of it and I think it's probably about as good as it can get, at least with this version of Audulus. You could do a straight crossfade between the waveforms and probably save some CPU, but I really like the progressive addition of the harmonics. It doesn't sound nearly as neat with a straight linear interpolation. I explored crossfading each harmonic separately but couldn't figure out a way around the different number of harmonics in each waveform. The current model ramps from 1 to 16 harmonics for the ramp, 8 for the square and 6 for the bell. If I do a straight crossfade I get these obvious "stair steps" on the square and bell.