Organ Tone Wheel development.

1235

Comments

  • colB
    colB Member Posts: 953 Guru

    Yes of course - forgot about that option… and most of the math is compile time only to generate coefficients.

    There is still the issue that if we generate partials by 'multiplying up' we have to start with a pure sine, whereas, doing it more brute force allows other potential parameterisations relating to hardware that would be on a per tonewheel basis, like how pickup positioning changes the waveform and potentially other stuff we haven't even considered.

    Still pretty useful though. You could do something with a lot of partials pretty efficiently I suppose…

  • Studiowaves
    Studiowaves Member Posts: 634 Advisor

    I was listening to the song Whiter Shade of Pale and I think Colin has nailed it when talking about the artifacts. It really is far from being clean. There's a sort of open sound to it that I haven't heard in our organs. I think the pickups are also picking up some of the adjacent teeth. It's not exactly a noise but kind of an obscure tone that varies from note to note. It seems to be around 18 or so db down. It's just enough to give it an organic sound as though it's mechanical like an acoustic instrument.

  • ANDREW221231
    ANDREW221231 Member Posts: 347 Pro

    i was trying to figure out how i i would implement the square

    + subtract in light of the voice structure and the only reasonable thing i could come up with was assigning them manually to whatever voice they would originally be on

    because you want to be able to access all of the partials as needed, right? anything trying to shuffle them between some smaller number of voices seems like a good recipe for h3ll

    what i'd actually do is test phase offset idea with the setup you're using now to see if there's anything to it. heck that's assuming it even relatively easy to derive cosine from a frequency doubled sine? maybe frequency doubled triangle would be more straightforward instead

    assuming it can, what i'd go for is to generate a pure as possible sine/cosine and handle all per-partial processing as per-voice. beside the whole phase thing i would put money on the next most significant addition to be some kind of waveshaping/harmonic distortion. from that audio file i uploaded its pretty easy to see the extra pointiness compare to if it was a pure sine:



    i thought the parasitic FM thing was a good idea too but i didn't see any indication in that example. maybe the recording just had a high noise floor? 🤔

  • colB
    colB Member Posts: 953 Guru
    edited September 19

    i thought the parasitic FM thing was a good idea too but i didn't see any indication in that example. maybe the recording just had a high noise floor?

    I read that the mechanical wobble and the motor modulation are a thing, worked out they would be AM and FM respectively (obvious), then read another analysis that came to a similar conclusion. I also did some listening tests that suggested that a small still audible amount does give some character that makes it sound a little more real… although that could just be cognitive bias.

    what i'd actually do is test phase offset idea with the setup you're using now to see if there's anything to it. heck that's assuming it even relatively easy to derive cosine from a frequency doubled sine? maybe frequency doubled triangle would be more straightforward instead

    The maths for the phase offset is a thing, you can't just interpolate, because the magnitude of the resulting sinusoid changes.

    a = sin(x)

    b = cos(x)

    d [0..1] is the crossfade amount between sine and cosine.

    a linear crossfade would be this: c = db + (1 - d)a

    but we need to scale the final magnitude….

    lets call it: g = sqrt( d^2 + (1-d)^2 )

    then we scale c by 1/g and we get a sinusoid where d is the phase between sine and cosine… so 90 degrees.

    For wider phase offsets, I suppose we're looking at separating into quadrants or something ([a, b], [-a, b], [-a,-b], [a,-b]). That would be a pain because the routing logic can be a cpu hog in some circumstances.

    There is probably a better way to do this. if you know one, post please :)

    https://www.desmos.com/calculator/fgxeuhjsbp

    In terms of accessing partials turning them on and off etc. That's maybe just a scaling thing too, we're already applying a coefficient, so just multiply that with an 'amount' from 0 to 1...

    As long as that phase is not accessible at audio rate, the math is very cheap per partial, maybe cheaper to just turn off by multiplying with a zero gain than by checking if its 'on' and using routing logic. Maybe MUCH cheaper depending on the implementations.

    Managing the partials has always been the difficult and expensive part (hence partials framework ;-)).

  • colB
    colB Member Posts: 953 Guru

    One problem is deriving phase offset sinusoids for higher partials.

    We can generate a phase offset between two sinusoids that are 90degrees apart.

    So sin(x) and cos(x) are just great.

    But if we take sin(x), square it, multiply by 2 and subtract 1 to double the octave, then do the same for cos(x), we now have two sinusoids that are 180 degrees apart, so it doesn't work with them.

    possible options:

    • when a phase shifted partial is required, just generate a separate shifted fundamental partial, and multiply up… (might as well generate the partial individual unless there are others with the same phase shift)
    • Start with a range of fundamentals that can be chosen between… so not just cos and sin, but many more. Still limited in terms of how high the partial can be before we get the same problem.
    • Do phase shift times 2… so for a one octave higher shifted partial, create a 45 degrees shifted fundamental using the fundamental sin and cos, then use that with one of the fundamentals to generate the shifted partial… maybe this is doable in a way that's still cheaper than brute forcing every partial… maybe

  • colB
    colB Member Posts: 953 Guru

    beside the whole phase thing i would put money on the next most significant addition to be some kind of waveshaping/harmonic distortion. from that audio file i uploaded its pretty easy to see the extra pointiness compare to if it was a pure sine:

    Parasitic harmonics coming from nearby tonewheels can modify the resulting waveform in various ways, including 'extra pointiness'!

    Here's a sine:

    here's the same sine with an octave up harmonic mixed in at around -16dB

    A few other lower level related parasitic harmonics could make it even more like your pic…

    Here's a 2 octaves up -180 degrees -21dB is mixed in

    Some of the parasitics will be in or out of phase due to the physical position in relation to the pickup.

    The FM thing isn't something we would see as an obvious waveform change. The FM is low level, and at a frequency unrelated and mostly some distance away from the fundamental of whatever tonewheel (except form the very low ones that are weird and their own way - very far from sinusoidal)… but it is audible IMO as a grunge/distortion that doesn't sound like coloured noise, or like power supply noise.

    I think its likely visible on the spectragam you posted, but we would need to know what to look for. It would be at frequencies relating to the motor frequency and the driving gears (there are 12 of them), so 12 basic frequencies. Then for some partial, one of those frequencies depending on which driving gear is being used would FM it to get some sideband action, which would depend also on the driven gear, and the number of teeth on the tonewheel in question.

    Pretty sure I read that on a development version of the organ it was quite objectionable, and the generator was redesigned so that this FM effect might seem more like some intentional (he was fooling nobody :-)) vibrato effect… by better gearing choices etc.

  • ANDREW221231
    ANDREW221231 Member Posts: 347 Pro

    For wider phase offsets, I suppose we're looking at separating into quadrants or something ([a, b], [-a, b], [-a,-b], [a,-b]). That would be a pain because the routing logic can be a cpu hog in some circumstances.

    yap that's pretty much right, just think of it like a real and imaginary number, so just a coefficient single multiplication apiece between 1 and -1 for sine and cosine gives you all possible phase positions, and then i guess just use pythagoras to scale amplitude back to unity

    found a way to generate them pretty cheap i think using some bits and bobs, by squaring up the triangle wave


    there's always some trick, like zgabr just showed in another thread how to create subharmonics of a sine by taking the square root and inverting polarity every other half wave

    https://pub.dega-akustik.de/DAGA_2014/data/articles/000089.pdf

  • Z Gabr
    Z Gabr Member Posts: 80 Helper
    edited September 19

    there's always some trick, like zgabr just showed in another thread how to create subharmonics of a sine by taking the square root and inverting polarity every other half wave

    My circuit is still different from the one described in the document, because I gave up the rectifier and square root and built the algorithm a little differently, although my circuit also has a counter, but in my circuit the counter is triggering the integrator. And the counter itself is triggered by the upper half-wave obtained by separating....

  • ANDREW221231
    ANDREW221231 Member Posts: 347 Pro

    yeah int that example the most noticeable extra partial content was the second harmonic by a good margin. kinda like that "sine wave potato" from a while back, there's something kind of nice about even order harmonic component

    definitely not the sort of result you'd expect to get with classic saturation, as far as constructing them additively though might be a good first approximation but i can confirm that the other partial components are in fact a harmonic series, its probably some kind of legitimate waveshaping effect instead of neighboring tone wheels. guess you could try adding the nearest neighbor of any partial but a lot of them would probably be already partial components you'd be using anyway

    if not, they'd probably be a bit out of tune

    i honestly think sine generation with a second harmonic and randomized phases, maybe mixed in with a bit of the power supply noise you mentioned might be the winning formula! beyond that anything else seems to get much less directly noticeable

    just wish there were at least a couple more good and separated sound examples floating around

  • ANDREW221231
    ANDREW221231 Member Posts: 347 Pro

    dunno whether you saw in that example osc i posted but,

    when a phase shifted partial is required, just generate a separate shifted fundamental partial, and multiply up… (might as well generate the partial individual unless there are others with the same phase shift)

    Start with a range of fundamentals that can be chosen between… so not just cos and sin, but many more. Still limited in terms of how high the partial can be before we get the same problem.

    Do phase shift times 2… so for a one octave higher shifted partial, create a 45 degrees shifted fundamental using the fundamental sin and cos, then use that with one of the fundamentals to generate the shifted partial… maybe this is doable in a way that's still cheaper than brute forcing every partial… maybe

    none of this actually ends up being necessary. thought maybe there wouldn't be an easy way to generate a cosine from a frequency doubled sine but you can just repeatedly frequency double a triangle wave and you get a sine and cosine for just a couple more multiply adds a piece

    cr@p all these cheap sine cosine waves could even be a good way to do constant Q spectrum analysis on the cheap

  • Studiowaves
    Studiowaves Member Posts: 634 Advisor
    edited September 23

    I think the pickups aren't pure sine waves, they're just teeth and probably have some harmonics. The tone bar probably has some mechanical nuances too. Moving on I tried to simulate something to mimic what's going on.

  • Studiowaves
    Studiowaves Member Posts: 634 Advisor
    edited September 23

    I hooked up the following oscillator and listened to it. With just a tad of 2nd and 3rd harmonic distortion added it started to sound pretty close. In a sense it opened the sound up with a breath of fresh air. I also tried modulating the harmonics with a bit of filtered pink sound below 80 hz. It sees to have a slight rough chattered character about it. I think pink noise has a random build up of very low frequencies below 10 hz that seems to shift the noise up and down only because we can detect and follow those slow impulses. So it pretty much sounds like a dirty bearing or something that's distorting the tone wheels distance from the pickups. I'll try and upload a demo of something in a few days so you can hear what it sounds like. Some along the lines of slow blues like BB king would do.

  • Studiowaves
    Studiowaves Member Posts: 634 Advisor
    edited September 23

    The even harmonics are generated using fm synthesis. This is accomplished by feeding back a scaled down version of the sine wave shapers output. The 2nd input adjust the strength of the feedback. The odd harmonics are generated using the hyperbolic shaper. The spectrum shows the harmonic structure of the waveform. They overtones are 2 3 4 etc. As shown it's a tad too strong in both 2nd and 3rd. Not shown is the filtered noise but it makes the overtones fluctuate in volume.

    The Fm operator is used for the second harmonics and the Hyperbolic is used for the even harmonics.

  • Studiowaves
    Studiowaves Member Posts: 634 Advisor
    edited September 23

    This is how the noise modulates the 2nd and 3rd harmonic overtones. I like to use the squaring modules to simulate log or audio taper pots. The panel pots connect to these inputs.

    The Pink Noise internal workings.

  • colB
    colB Member Posts: 953 Guru

    none of this actually ends up being necessary. thought maybe there wouldn't be an easy way to generate a cosine from a frequency doubled sine but you can just repeatedly frequency double a triangle wave and you get a sine and cosine for just a couple more multiply adds a piece

    By the time you add the logic to calculate the quadrant to get the correct phase shift from the two fresh sinusoids, that you got from your doubled tri, it might be cheaper just to generate the partial from scratch from its own freshly generated phase shifted tri.

Back To Top