DaisyWheel - Hammond organ clone project on a Pod

Hey all, now that I have finally got my development environment (sort of) working, I have made some great progress on my first project: a pretty full-featured Hammond organ simulation, i.e. a “clonewheel”. Here is a short clip of what it can do:

https://youtu.be/Y5-8cD4BIzo

Some notes about the project:

  • It is MIDI driven. I use a Korg TR workstation for the keyboard, which can also play short “audition” MIDI streams as in the video.

  • Like Hammond, it continuously generates nine octaves of sine wave tones. The tone frequencies are true to Hammond’s close-to-equal temperament, based on his tonewheel gear ratios.

  • It is fully polyphonic. I have it set as 32-way in the code right now, but there is no fundamental limit.

  • The encoder cycles through several preset drawbar registrations, like popular settings for rock, blues, gospel, reggae etc. (Of course a real clonewheel would use nine pots for drawbars.)

  • The left button selects 2nd or 3rd harmonic percussion, the right button selects slow or fast decay, and the left knob set percussion volume.

  • The chorus is a simple Hammond emulation, using a 1ms delay line modulated with a 9Hz sine LFO. The right knob sets the chorus depth. (No vibrato option, as no one seems to use it.)

  • The Pod LEDs show the percussion and chorus action, pretty much just for fun.

  • Notice the one-second blinking LED on the Seed module. It is off during the callback and on when essentially idle. So I am currently using about a third of the processor horsepower!

  • I use preemphasis to reduce key click. This could be made variable, but I currently pre-compute the preemphasis values at initialization-time for efficiency

  • I don’t currently emulate tonewheel leakage. My goal was to simulate the organ that Hammond intended, not a “broke down” version with bad caps, noisy key contacts, etc.

  • I need to adjust some parameters like the percussion speed and depth, overall EQ, etc. I have a real A100 in the basement I can fire up for comparison.

Some comments on my programming: As you can see, I am pretty familiar with the workings of Hammond organs, and am pretty good at algorithm development. But I am a baby C++ programmer. My code is basically C-style, with mostly global variables. I old-school comment a lot. Decent function structure but with no real protection of encapsulation. One big file, only the Daisy and Pod #includes, like the example programs.

I am willing to share the code in the near future, but with these caveats:

  • I am not a Git user, so it won’t be on GitHub.

  • Source code only. I don’t want to generate and support the binary. To use it you will need your own functional development environment.

  • No license requirements. You can do whatever you want with it.

  • You can easily change the controls code to port to other hardware, but please don’t ask me about it.

  • I am happy to discuss anything about the code itself, the underlying algorithms, or the working of Hammond organs in this thread.

  • Please don’t ask me about how to make it work in your development environment. I have spent enough time in “IT hell” as it is!

.

5 Likes

Very cool (fwiw I used to use V3 on my clone for a couple songs that actually were more fit for a combo organ heh) I was wondering if the scanner vibrato circuit also added a bit of filtering - not sure if modulating a filter in parallel with the chorus would be part of an emulation…

Speaking of combos - I actually did a top octave organ generator not long ago - in that there were 12 independent top octave oscillators that could be detuned each, plus the vibrato LFO could affect each one by slightly different amounts. Seemed to me to be a more faithful reproduction (heh I even added the 6xLFO vibrato on the novachord). Once Pollen8 is all done I’ll probably port that to this too.

Don’t sweat the non c++ style stuff, most of mine is straight c - style as well (even some assembler when needed) - though using multiple files (not a big deal once you’re used to writing c/c++ stuff)

Heh I don’t have an A100 but an L100 - I unfortunately can’t get to it due to covid right now but I was even thinking on getting single cycle samples from the tonewheels directly. Have been contemplating on modelling the leslie cabs as well - all in time…!

In my opinion… for what it’s worth - unless you’re playing well, effectively church organ music, leakage, keyclick, overdrive etc - are an integral part of the sound :slight_smile: again, in my opinion. I mean I get it - that is from what I understand the original goal of the organ was - to provide an affordable alternative to pipes.

Always thought would be interesting to play with varying levels of keyclick based on velocity and or varying timing of bussbar activation.

1 Like

Thanks, Jason.

I probably will add vibrato, since it simply skips the addition of the dry signal to the scanned signal. Control-wise, I can make the knob be center off, left vibrato depth, right chorus depth. I want to experiment with adding a little LFO’ed low-pass filtering and maybe a little tremolo to make it more realistic. Years ago I actually built a 25-stage LC delay line which was scanned with a PIC processor that PWMed analog switches at the proper tap positions. It sounded great. I could literally emulate the tapped delay line and scanner in code, but it is probably overkill.

I hear you about what it takes to make a truly realistic emulation - one that doesn’t sound sterile. For sure it needs overdrive, from subtle all the way to that iconic Winwood “Gimme Some Lovin” scream. Leakage - maybe. I overdid the preemphasis to the point of almost no key click. It does need to be variable, and I like the idea of using the velocity info.

At some point, the imperfections of a real Hammond become so random that no two sound the same, so what is “realistic” becomes impossible to pin down. For example, the tone generator output levels on my professionally refurbished A100 vary from key to key by as much as two to one.

I probably will try to add a Leslie simulation. I understand the basics, but getting something that doesn’t sound cheesy is difficult. I used to read on organ forums how bad the Leslie simulations were on most clonewheels. And I don’t have a real Leslie to compare to. :thinking:

Hi @donstavely - I’m curious if you’ve done any more on this Hammond project over the last several months, and in particular if you’ve looked into what would be involved to realistically simulate a Leslie effect. Seems like that might be tricky, but worth the effort.

Hi! This so cool, can you share the code with me? Thanks!