yeah, it's there. thanks
Drawbar organ emulation
Just uploaded a new version. Applied tone generator calibration curve for a 1935-1940 organ which I found from the web. I also figured out that I have a fundamental error in my percussion code which I haven't fixed yet.
Hi Janifr,
I played with some of your code and with some of Johannes to go in another direction
Here is an experiment to get some paraphonic pipe organ:
test_PipeOrgan.axp (20.7 KB)
Updated: corrected tuning!
Here is a short audio demo: excerpt of toccata and fugue on an Axoloti
To get something more like pipe organs i tried some tricks:
- I use self phase modulated oscillators. (pipes do not generate sine waves)
- Slight random detune
- Smoother Attack for the lower oscillators (bigger pipes take more time to oscillate).
- Reverb
I'll get some documentation to get a more accurate idea of how stops work in a pipe organ.
I think that using self PM osc can be useful for a simple model of basic pipe types (reed/flute).
Update:
I added an updated version in the library/community/tiar/organs/020-ChurchOrgan-tiar.axp
It is more widely polyphonic (from MIDI note 5 (F) to MIDI note 114 (F#))
It is based on 91 oscillators.
It uses different kinds of oscillators depending on the frequency:
- pure sine
- for low freq oscillators to avoid muddy beatings in the basses
- for high freq oscillators
- self phase modulated sine oscs (they generate even and odd harmonics).
- used in for the mid to obtain a full sound.
- self square phase modulated (they only have odd harmonics).
- used in the high mid to have a clear/woody character.
These generators roughly simulates the different organ pipes.
- used in the high mid to have a clear/woody character.
Very impressive SmashedTransistors! I wish our neighbouring church had hear of Axo before of spending 620 000 € for new pipe organ
In mean time I have been fulfilling my Ham^H^H^H Drawbar organ fetish and done slight improvements. Manual tapering and foldback are now working as they should.
Well, i didn't planned at all to do that with the Axoloti... got distracted. I have to refocus on my psyché synth project...
Your work is impressive, the Ham'organ is such a classic.
After that, you'll have to add a scanner chorus or/and a rotary speaker effect
Converted my floating point vibrato scanner from my other project to fixed point and rewrote it for my axo patch. Comments appreciated.
nice! it sounds very good i think. the click at the beginning is a little prominent, at least to my ears. (you cannot remove it i know)
one subtle approach to reduce the clickyness is not to close all (virtual) key switches simultaneously but spread them a little in time. Mechanical switches will also not close simultaneously and even bounce a bit.
In jt/drawbars/switched
this is achieved by not evaluating all tonewheel gains at k-rate but only evaluating 1/8th of the tonewheel gains so all tonewheel gains are effectively updated at 1/8th of k-rate. While this is not an accurate model of the keyswitch timing, I think it helps a bit to "decorrelate" the click, and also reduces the computation load.
May I also suggest to consider splitting your hammond/pipe organs into tuning, drawbars, and tonewheels like I did in jt/tuning/...
etc, and moving the chorus/vibrato effect into a separate object so it becomes more modular?
While spreading switching in time would probably be the best way for a realistick click I personally think it is too costly for cpu. Since I try to save as many cpu cycles as i can I'm not going this way. I made some research with the famous GSi's VB3-plugin and found out that raw generator output (it has configurable output for this) produces quite loud clicks at the beginning and ending of a tone. It gets filtered a lot in the rotary speaker stage, though it is still there. As far as I have understood this clicky sound is part of the famous organ sound.
I was about to create a separate module for the vibrato scanner, but found no way to create new empty object. I probably need some advice.
not necessarily, the trick in jt/drawbars/switched
actually reduces the cpu load by a factor of 8!
Create a patch/object
object, that creates an embedded object (saved inside the patch), and when ready, selelect "copy to library" in the file menu of the object editor to turn it into a library object.
Just uploaded 2 manual version with a bit more modular design. Does anyone have 2 keyboard setup to test it?
I'm still in an "explorative"/"experimentative" phase, but yes, it would be great to have re usable modules for paraphonic organs and other string machines.
- paraphonic keyboard
- drawbar/mixture/register : to derive multiple controls from the keyboard to oscillator bank(s)
- tuning bank : tables and/or vibratos/fluctuations (ex: slight pitch variation during attack...)
- envelope bank
- oscillator bank
Hi @janifr it's great to see this project evolve so fast.
About the sinewave generation, i've just tested an old trick:
cos(2*x) = 2 * (cos(x)^2 - 0.5)
this is frequency doubling by waveshaping.
The direct application consists in generating the 12 lowest tones and to create the higher octaves by iterating this simple formula.
Here is the code for the frequency doubling of "y" a q30 sinewave:
y = __SMMLA(y, y, 0xF8000000 ) << 3;
q30 q30 q30 - 0.5_q28 * 2 and q28->q30
Here is a small patch with a 91 osc object :
FreqDoublerTest.axp (6.0 KB) 35% CPU
Fake reverb idea:
The gain envelope for each oscillator is the superposition of two AR envelopes:
- a fast AR : anti click
- a slow AR : pseudo reverberation
This is a nice way to get free reverb and use those 91 oscillators.
FakeReverbTest.axp (9.2 KB) 48%CPU with triple vibrato
Here is a patch that uses this tricks plus a triple vibrato and some allpass filters to get a smooth vibrato. You can connect the object directly to the output (bypass the vibrato effect) to get an idea of how the fake reverb sounds.
@janifr and @SmashedTransistors
it would be great, although very unintuitively for you if you could release a mono version of your tone wheel organ and string machine stuff. i mean something like a one-voice hammond sound or a one-voice string sound oscillator that one can then easily control in a modular way. (midi control is external, with pitch input)
for @SmashedTransistors stuff i am not sure if his selfpm oscillators covers already the sounds coming from the string machine (minus the effects of course).
hope this makes some sense.
You guessed well @lokki the Dark Strings patch is based on the selfpm oscillator.
I'm working on a DPW waveform generator (see objects\tiar\osc\Osc_Bnk_I ), and i will certainly make a mono version of these ones too.
@janifr @johannes I have experimented with multirate processing for my String machines, but this is not a good way to gain CPU in this particular case. The oscillators have lots of harmonics - even at low frequencies - so even with 14 tap interpolators I still have imaging/aliasing
The good news is that I think this can be useful for sine based oscillators:
MultipleDownTest.axp (8.4 KB) 15%CPU
- 4 1/2 lower octaves (32 to 740Hz) are 16 x downsampled
- the octave above is 8 x downsampled
- the octave above is 4 x downsampled
- the highest octave is 2 x downsampled
Each stage consists in a 2x interpolator.
Linear interpolators are not good enough, they induce strong imaging (i.e. images of the signals above the interpolator's cutoff frequency).
The 2x interpolators are based on a 14 tap FIR (for steep transition zone) and two one pole LPF (to remove high frequency imaging, it can be enhanced to a better IIR).
Hardware limits for heavy emulator