btw…AULOS —> no more cpu spikes in the last two days ![]()
Newest nightly build is up.
Glass - I made it louder. Then, to balance it out, when you play multiple notes simultaneously the pressure is decreased per note. This decreases the loudness a little bit as you hold down more notes at once.
Aulos - I got rid of the clicky transient at the start. Damp now darkens the tone, and the damper intensity control is moved to context. Also I added a ‘legato’ effect that’s a bit of slew and some envelopes, but I think it works. You can also disable it!
They both sound really great. I still get a transient in Aulos if I hold the gate down and change notes. Sort of a loud pop like it’s struck over the end of the tube.
Drat. I made a little edit, I think I fixed that… but it’s really hard to tell. Let me know if it’s any better.
Its different yes, but still present.
new funk.vcv (6.6 KB)
Funny enough its a good sound, very physical in nature.
Just wish I could control when I “pop” and when I don’t. Feels like it may be in sync with the gate releasing, not neccesarily note change.
Great stuff, the glass harmonica is stunningly beautiful.
Thanks, that helps a lot in making it sound amazing. no more 10dB needed. Still have to redo the mix for the etherial patch, but it starting to sound good at this stage….
I spent some time looking at your patch… it was a little hard to follow. But I think I figured out what is going on, and I’m not sure if it’s a bug or a feature. Probably a feature
What I gather is happening is the pipe is changing lengths at the same time as the gate is going low.
If you want the legato effect, you need to v/oct the finger input, as only the fingering can legato. At least this made sense to me somehow…
Also, controlling the fingering will result in more interesting timbers than just controlling the base pipe length. Or controlling both! but it gets confusing fast as you need to keep the fingering within the range of the pipe.
I made a little sound test.
Overall I’m not displeased with the sounds these two modules make. I want to go further, but I just can’t with the underlying architectures.
I had high hopes for making more realistic flute/clarinet sounds, but in this exercise I’ve finally learned enough about waveguide synthesis to find I’ve basically done it all wrong so far. Rather than a proper bi-directional waveguide, I’ve ended up with two uni-directional ones with different timbres… It still makes a physical pipe sound, but because the underlying architecture is wrong for a flute, I can’t refine the Bore/Bell parts to work in a proper physical way. The odd harmonics can’t cancel out unless I make a proper bidirectional waveguide, and so I’d need to start over to get the fully morphable pipe architecture I had aimed for.
Sooo… maybe I’ll have to save the bidirectional wave math for the next physical synthesis module!
What do you all think?
I really like it!
And –if you are like me– it is hard to unknow something… so when you are up for it, going for an Aulos mk2 sounds like a good idea.
I think I’ll need a link to your GitHub for the new modules as I’ve got plenty of catching up to do, what’s a few more noisemakers to modulate? I bet the glass armonica monster is gonna get me charged up to put some effects on it
Haha, yeah. No need for any embarrassment. The more you know, the more you realize how much more you don’t know. The cynical view on this phenomenon is the Dunning Kruger Effect…facing the Valley of Dispear…
But hey, no need to discover/reinvent what was already discovered/invented/shared by others. As they say, most major innovators stand on the shoulders of giants that preceded them. And most inventions are extensions or recombinations of earlier inventions.
Doing some (historical) research sure helps you to explore problem- and solution domains and also helps decide to discover/get ideas, determine scopes and goals and how to actually achieve them. Great to live in an age where so much knowledge and tooling is available for so many. Much of it free or affordable.
BTW, I’m old enough to remember the Yamaha VL-1 hitting the market. The realism and expressiveness were revolutionary for the day (still great).
The (Yamaha) Breath Controller played an important role in that expressiveness. But somehow the breath controller never really took of. Maybe because many earlier synth architectures (e.g. earlier subtractive synths) could not really exploit it for expressiveness the way physical modeling can.
Physical modelling also never really widely took off. Mainly because of what happened with FM/PM. The Waveguide modeling technology was patented (by Stanford and Yamaha).
Around that time (1995) just about only Technics brought a Waveguide based synthesizer to the market: the Technics SX-WSA1
BTW The Yamaha DX7 (1983) was already equipped with a dedicated 3.5 mm mini-jack breathcontroller input port, which was a great option when combined with the FM/PM carrier/modulator frequency/amplitude modulation options of the DX7. Several other/later Yamaha synths were also equiped with such a breath controller input. They were (originally) analog modulation sources. These days, there are USB/MIDI options too.
Breath Controller was put into the original MIDI 1.0 specifications (1982). MIDI itself was an amazing cooperation between the (then) major synth producers, initiated by Ikutaro Kakehashi (Roland) who mainly coordinated with the Japanese manufacturers and Dave Smith (Sequential Circuits) who coordinated with the american manufacturers .
In the MIDI definitions, Breath Controller is the second modulation source in the MIDI Continuous Controller (CC) list: CC 02 Breath Controller, right after CC 01 Modulation Wheel. But it is currently mostly used for Aftertouch and generally often even referred to as Aftertouch.
VCV is totally the appropriate place to tinker with these ideas. And far from an imposter, you are a leader in this space, it takes experimentation to get there.
I worked on the Aulos model more. New beta in the nightly.
I think I fixed the waveguide design finally. In making the Strings bowed string model for Sands I finally sorted out it works.
Here’s a rundown of how the model works:
I really learned a lot along the way… so I’ll try to summarize some of the main bits here:
• In the first iteration I was modeling the flute as a single directional delay line with feedback and filtering in the loop. You can imagine it as an unfolded flute model. This model got some flute-like sounds, but misses out on the effect that cancelling waves creates. But a proper waveguide model needs to be a full loop, in two directions.
• Now with both rails as one-way delays that inject into the embochure and bell junctions at each end. The next problem was that the loop gain totally changes in this configuration, and to split the same energy into two different junctions I needed to take the sqrt of the original round-trip gain.
• The rails need to be two half-period rails, to add up to one round-trip period. However, the junctions also contributed a fixed group-delay as well, and this took some figuring out to get it to track pitch correctly. Even a 1 sample error on these delays will take you out of pitch by a significant amount over an octave.
• For the Reed configuration to produce odd-harmonics the reflection sign at the mouthpiece needs to be inverted. If you get it wrong you still get sounds.
• The pickup and excitation location on the waveguide is important. The physical model has node points and if you tap a node you won’t get sound!
• Closed loops won’t tolerate any DC. It’s super important to block DC correctly at the excitation source. Otherwise DC will recirculate and then it interferes with the amplitude dependent compression.
• Crossfading between different physical models can create holes. For example, crossfading between the flute and reed models changes the excited waveform but also the sign of the embochure reflection (it’s an open vs closed end). At the midpoint the sign crosses through zero, so to avoid a dead-zone I had to get a little creative. Rather than linear crossfade between the two, I needed to use an equal-power law so that the excitation energy didn’t dip in the middle. Also, as the reflection sign gets closer to zero, I needed to add a compensating excitation boost so the sound wouldn’t cut out in the middle of the fade.
• Any state that resets or snaps to an event needs to have smoothing applied, since the model needs to ‘warm up’ the waveguide, and turning it on in one sample will cause an energy spike. In my model I turn the waveguides on/off to save CPU, but actually I learn that in the classic design they avoid doing this for the noise reason.
Here’s a new demo of the latest build using a MIDI file:
I also expose some of the weird-zone… it’s there if you like it, but avoid the midpoint of the Reed slider if you want to avoid it! hahahahahaha
I really appreciate you listing all the lessons you learned. I have always been interested in the physics of a flute. I know a little about it, and I thought I would share it for others reading here. Hopefully this is a little bit interesting or useful.
Modeling a flute as a tube that is closed at one end and open at the the other, the closed end has a positive reflection: a positive pressure wave bounces off the wall just like a basketball and returns the other direction.
But the open end does something else. It lets a high pressure wave pass through it, and draw some of the tube air along with it thanks to momentum (air has mass too). This creates an under-pressure at the open end. This low pressure travels back along the tube as a negative reflection.
So you end up getting alternating factors multiplied by the wave (neglecting finite decay time): -1, +1, -1, +1, … It takes two full round trips before the wave comes back to the same state as it started. This effectively doubles the length of the open/close tube, cutting its resonant frequency in half (subtracts an octave), compared to a tube that is closed at both ends or open at both ends.
You can hear this effect if you have a piece of PVC pipe open at both ends. If you smack the end of the tube with your hand and remove it quickly, it is open at both ends as it resonates and makes a higher note than if you smack it with your hand but leave it sealing the end of the tube (the sound drops an octave).
I love this stuff, and it’s great to see how you took the simple model and made it so much more sophisticated. It sounds very cool!
The flute sounds is definitely much improved. My first patch with it all of the sudden actually sounds good, where it was still a bit `meh` before the latest nightly. Awesome modules, keep em coming. Physical modelling modules are just up my alley…
Heer come som proofreadi! ![]()
Embouchure has a u in it FYI.
And see “controleld by breath” in the Jet text?
Spelling aside, some of these explanations are way more technical in tone (“…inverts sign at embouchure reflection”) and others much less so (“Air adds the blowing noise”). Perhaps unify a bit? I find the Reed ↔ Jet explanation a bit confusing too. Is it a crossfade control? From the other notes I think it is, but I’m not sure. A less technical explanation would probably be helpful here.
Anyway, excited to try the finished model!
Just for fun, here’s a little sound demo of the hurdy gurdy module with all the hurdy gurdy turned OFF, so it’s just a violin sound:
Flute and Violin both use waveguide synthesis, but a bit differently. In the flute model we have a single loop with the non-linear exciter at one end. In the violin model the bow splits the waveguide loop into two loops, with the bow acting as a fixed-delay group in the middle. So the position of the bow on the waveguide is important, especially if you try to bow over a node.
How it was interesting. If you want to learn more about the bow model I can try to explain it more, it’s very simply a slip-stick model of friction.
It would be really handy to be able to adjust ROOT in GLASS via cv.
update: thanks, works great.
