SILICONAntiques™
12 Nov 2026Mellt FM-1, Tant KS-2 and Tonnau WT-3 are out: version 1.0.0, free.Apple Silicon only for now; the universal build for Intel Macs is next.What I'm doing this week →
Silicon Antiques › Coming soon › Corwynt
Coming soon · planned, not finished

Corwynt

Draw the sound, spin it, fold it.

corwynt · Welsh for a whirlwind · said KOR-wint

Programming sounds in Corwynt is not about visualising them, it’s about the audible realisation of the visual.

Corwynt is a synth of its own: three oscillators, a two-stage wavefolder and a gate. You draw the tone as a shape, brighten it with a loop that never moves the note, and fold it until it turns to metal. It comes from an old idea and copies no machine; every part does one thing you can see, the same way every time.

The thinking

The shape is the sound.

Corwynt's shape oscillator doesn't pick a waveform; it traces a shape. A dot runs round an outline, a triangle, a star, one you've made by dragging corners, and where the dot is, is what you hear: left to right is the left channel, up and down the right. So the shape is the tone and the stereo image at once. A round shape is soft, a spiky one bright, a lopsided one leans to one side.

That makes timbre something you can see and change with your hands. You don't need to know what a harmonic is to say "sharper", pull a corner out, and hear it. The picture on the panel is taken from inside the engine, not drawn from the knobs: when the shape on the screen flickers, the sound did too.

But it gets even funkier than that, a flat shape is one sound; a solid is a family of them. Pass a plane through a cube and the outline it cuts is what the oscillator traces: a small triangle near a corner, a hexagon at the middle, every shape in between on the way. Shape slides the plane; turn the solid and the same slide gives a different family.

Brightness that never moves the note.

The second oscillator is a loop: it bends its own pitch with its own output. Fed back gently it's a sine; fed back harder it grows a whole series of harmonics. One knob, Loop, takes it from pure to buzzing without a filter anywhere. Self-modulation is an old trick, and it always detuned as you pushed it. Corwynt solves the loop rather than running it and hoping, so the note stays where the key put it at every setting. Interval sets the loop's pitch as an exact musical interval from the note, not a detune: a fifth stays a fifth for ever.

Push any oscillator that feeds itself far enough and it stops being a tone. Corwynt puts that edge in one place, the rail, drawn on the panel with a lamp that lights when a voice touches it. Touching it isn't a fault. It's a hard, flattened buzz, the same every time, so you can aim for it: reach it on the accents and stay off it everywhere else.

Two oscillators that play each other.

The shape and the loop are played as a pair, and each can move the other, one way each. Whirl lets the loop turn the shape: the outline spins at the loop's pitch, from a shimmer across the speakers to a clangorous metal that is still in tune. Stir lets the shape bend the loop: the loop's brightness rises and falls as the dot goes round, a slow swell from a soft shape, a rhythmic buzz from a spiky one.

Cross-patching two oscillators into each other is an old trick and an unstable one: each drives the other's drift, and the sweet spot moves while you play. Here the pairing is a one-way chain with an exact rule at each end and the rail after it. The unruliness is composed, not suffered.

A fold adds; a filter takes away.

Most synthesizers make a bright sound and then take harmonics away with a filter. Corwynt goes the other way. Push the wave past the fold's edge and it bends back on itself, and every bend adds harmonics. One stage is a gentle thickening; the second, reached when you push harder, turns it to metal. Fold sets how hard; Symmetry leans it to one side, which changes which harmonics it adds.

A filter closing makes a sound smaller; a fold opening makes it bigger. Pushing into a note so it blooms is the fold's natural direction. The fold is corrected as it bends, so the top of the keyboard stays clean instead of fizzing.

A folded bass can lose its bottom, so under everything sits a third oscillator, ROOT: a plain sine or triangle at the note, with a sub below, added after the fold and never folded. Turn the top of the sound to metal and the bass line is still there.

Where the pluck lives.

There's no separate amplifier and filter at the end of the voice. There's a gate, which can shape the loudness, the tone, or both at once. Loudness and brightness falling together is what a plucked string, a struck bar and a damped drum all do, and it's why these sounds feel played rather than switched on.

Response sets how fast the gate opens and lets go. Hit a key hard and it opens wide and bright and closes quickly; play softly and it opens a little, darker, and lingers. The analog gates this idea comes from had a character players loved and a speed that changed with the weather; two units never matched. Corwynt keeps the character and puts the speed on a knob.

The engineering

One lap is one cycle.

The shape oscillator keeps apart two things most oscillators weld together: when the cycle repeats, and what happens inside it. The pitch belongs to a phase that runs from 0 to 1 once a cycle and knows nothing about the shape. The shape decides how the cycle is spent. The phase is a fraction of a lap, never a distance, so no outline, however long or lopsided, can move the note.

Think of a runner on a track. The outline is a chain of edges, each one straight or bowed by Curve, and the phase says what fraction of the lap is done. The lengths of the edges turn that fraction into a place: which edge the dot is on, and how far along it. Where the dot is from left to right goes to the left channel and where it is up and down goes to the right, both measured from the shape's centre.

Which centre matters. The published method (Argentieri and Scagliola, 2026) centres an outline on the average of its corners. The constant offset in the output is something else: the dot's average position over a lap, which on an irregular shape is a different point. One average counts corners; the other shares out time by length, so a long edge, where the dot spends longer, counts for more. So I subtract the average over time. Each edge gives its own average position, weighted by its share of the lap, and the offset is removed exactly, on every shape, with no filter and nothing to settle.

Now the harmonics. Along a straight edge nothing sudden happens: the dot moves in a straight line at a steady speed. Everything that makes a harmonic happens at the corners, where the direction changes at once. Three things follow. Every straight-edged shape loses its harmonics at the same rate on the way up, 12 dB an octave, the law of a triangle wave. Each corner contributes according to how sharply the path turns there, which is why pulling a corner out brightens the sound. And the corners' contributions add or cancel according to where round the lap they fall, so their arrangement decides which harmonics survive.

The Nerdy bit.

For a regular polygon of n sides the cancelling is complete, and what is left fits in two lines:

a_k = (n·sin(π/n)/π)^2 / k^2   when k = 1 + m·n
a_k = 0                      for every other k

a_k is the strength of harmonic k, and m is any whole number, negative ones included. A negative k is a harmonic turning backwards round the circle, heard as an ordinary harmonic of that number. So a pentagon keeps harmonics 1, 4, 6, 9, 11, one either side of each multiple of five, and nothing between. A square keeps 1, 3, 5, 7: stood on a corner, its left-to-right motion is exactly a triangle wave. As the sides multiply, the fundamental grows towards full size and the rest vanish: a circle is a sine. The rule belongs to symmetry, not to the count of corners. An outline that goes once round its centre and looks the same after 1/n of a turn keeps that same pattern and no other harmonics; one with no symmetry keeps them all.

Along a curved edge the dot's speed varies a little. Exactly constant speed would need a calculation that has no exact formula, so I don't attempt it. The variation moves no pitch and adds no aliasing.

What a corner costs.

A corner is a sudden change of slope, and a sampled system cannot hold one: its harmonics run on past half the sample rate and fold back as tones that belong to no note. The exact repair is known. A signal made of straight pieces is a sum of ramps, each beginning at a corner, and cleaning up a sum is the same as cleaning up each of its parts. So I leave the outline as it was sampled and add a small correction at each corner: the difference between a ramp the system can hold and a plain one, scaled by how sharply the path turns there. Being a sum, it holds however close the corners come.

The ideal correction never quite dies away, so I use a published four-point stand-in (Esqueda, Välimäki and Bilbao, 2016), exactly zero beyond two steps either side of the corner. Four samples are nudged, by amounts that depend on how sharp the corner is and on where between two steps it fell. When the corner lands exactly on a step, that step takes a little under a quarter of the jump and its two neighbours a sliver each.

Everything rests on two things being right: the size of the jump, and the moment the dot passes the corner. The regular-polygon work this descends from (Hohnerlein, Rest and Parker, 2017) could place each corner from its number in the sequence, because its pitch and shape stood still. Mine move, so I read both from this step's phase and this step's geometry and nothing earlier:

δ = (φ_now − c_now)
    / ((φ_now − φ_prev) − (c_now − c_prev))

δ, from 0 to 1, is how far before this step the corner was passed. φ is the oscillator's phase at this step and the one before, and c the corner's own place in the cycle at the same two steps. Within a step the phase moves in a straight line, and so does the corner, because geometry is ramped in straight lines. The crossing is where two lines meet: exact under a bend, a glide or a morph, not an estimate.

The correction reaches back two steps, so the oscillator runs two steps behind its own traced point. That delay must never change. The published method raises its oversampling with pitch; under my rules a glide across a change of factor would move the delay mid-note, and a voice's cost would depend on its key. So the factor is fixed, and the rule that fixes it is about elbow room: on average, corners need at least four oversampled steps between them. More corners crowd them, and so does a higher note. Corwynt works at four times the rate at 44.1 and 48 kHz, twice at double those rates and once above, so a voice always works at 176.4 or 192 kHz. At 48 kHz that leaves room for eleven corners on the top C of a piano. An outline stops at 24 corners, and above a fixed pitch a many-cornered shape morphs towards a simpler partner of itself as a fixed function of pitch, its dropped corners going to sleep on their neighbours so that nothing jumps.

What the correction leaves is stated too. On a curved edge the bend also jumps at a corner, and that jump is uncorrected. Beside the slope jump it is roughly three times the Curve amount divided by the number of steps the dot spends on the edge. Its aliasing falls at 18 dB an octave against 12, and each doubling of the working rate halves it.

Two kinds of turning.

Spin turns the outline in its own plane. Turning every corner about the centre changes no length, so the walk is unchanged and the turn can be applied to the output pair, after the corners are corrected:

X' = cos α·X − sin α·Y
Y' = sin α·X + cos α·Y
z' = e^(jα)·z

α is the Spin angle, held as a whole-number fraction of a turn that wraps by itself. X and Y are the pair before the turn and X' and Y' the pair after it; the third line says the same thing in one stroke, with the pair treated as a single point on a plane. Four multiplications, no geometry rebuilt. Every forward-turning harmonic gains the angle in phase and every backward-turning one loses it, which is how a turn reshapes each channel, and the difference between them, without moving a harmonic. Spin is applied ahead of the filters that bring the voice down, so whatever a fast turn throws above the audio band is removed, not folded back.

The other turning changes which outline there is. A library solid is a convex polyhedron, sized so that the largest ball that fits inside it has radius 1. It turns, a fixed plane cuts it, and the cut is the outline. Finding the cut is a matter of heights. After the turn every vertex is either on or above the plane or below it, and an edge is cut when its two ends lie on opposite sides. The new corner sits where the edge passes through the plane, placed in proportion to the two heights. A vertex exactly on the plane counts as above, so the sum never has to divide by nothing. Solids are convex because a plane cuts a convex solid in exactly one polygon, and one dot cannot follow several.

Two bounds follow. Each side of the outline lies in one face and a face gives at most one side, so a solid gives at most as many corners as it has faces. And the plane never goes further from the centre than nine tenths of the inner ball's radius, so it always cuts that ball in a disc whose radius is at least 0.44 of the ball's. The disc lies inside the outline, so the outline never shrinks to a point and the lap never reaches zero. The library holds solids of ten faces or fewer, and the corner rule allows ten corners on the top C of a piano at 44.1 kHz. So a solid needs no simplifying at the top of the keyboard, by proof and not by listening; one with more faces would have to earn its place by measurement.

Take a cube stood on a corner. One vertex is at the bottom, a ring of three sits a third of the way up, another ring of three two thirds of the way up, and one is at the top. With the plane between the two rings it cuts six edges, a hexagon, regular at the exact middle. Outside that band it cuts three, a triangle. At a ring it meets three vertices at once and three sides close to nothing.

There, corners appear and vanish. I could have crossfaded at each passage, but a cube turning twice a second meets a vertex sixteen or more times a second, each time running the oscillator twice to blend two nearly identical outlines. I could have blurred the plane, which is inexact and changes every solid. I decided to do neither. A corner about to appear is already there, asleep exactly on its neighbour, joined to it by an edge of length zero that takes no time and makes no jump; then it moves out along a straight line. The outline is continuous through the passage: nothing to crossfade.

This turning is geometry, read on a 16-sample grid and ramped between. Spin remains the one turn fast enough to be a tone.

The loop, solved rather than run.

An oscillator that bends its own pitch with its own output can be written as a rule for turning: each sample, turn a little further, by an amount that depends on where you already are. Picture a point going round a circle, hurrying on one side and dawdling on the other. The unevenness is what makes the harmonics. It is also the old trouble, because the hurrying and the dawdling do not cancel: the point spends longer where it is slow, the whole lap takes longer, and the note goes flat. With the loop amount at a half the note sounds about two and a half semitones flat; at nine tenths, more than an octave flat. Run this way the loop also needs a sample of delay inside itself, and its error builds.

Smyth and Hsu (2019) gave a closed form for the same wave, written at the pitch that sounds:

z0 = (b0 + w) / (1 + b0·w),   w = e^(jθ)
b0 = −B / (1 + √((1 − B)·(1 + B)))

w is a point going steadily round a circle at the pitch that sounds, and θ is its angle. z0 is the wave: another point on the circle, pushed and pulled by one number, b0, and its left-to-right position is the sound. B is the loop amount, strictly between −1 and 1, and the second line finds b0 from it. Corwynt's loop is this form, by definition, and owes the run loop nothing. I advance θ at the note's pitch; B survives as a way of finding b0, and the driving frequency is never computed. I rearranged b0 from the published expression, which at the exact centre of Loop asks for nought divided by nought; this form never subtracts near-equal numbers and has nothing to divide by zero.

Unpacked, the wave is a constant plus a ladder of harmonics at exactly whole multiples of the note, each a fixed fraction of the size of the one below. Loop sets the fraction. With the loop amount at a half each harmonic is about 11 dB under the last; close to the top it is about 1 dB, and the ladder runs a long way up. The constant I leave out by never computing it. A blocking filter would have delay and settling time, and a constant that moves with Loop would thump under an envelope and, with Loop driven at audio speed, leak the driving wave into the sound.

A ladder that regular can be stopped at any rung, and the shortened ladder still has an exact formula. I stop it at the last harmonic under a fixed band edge, so with Loop still the oscillator makes no aliasing, and a low note of 400 harmonics costs what a high note of 3 does: two sines, two cosines, about six multiplications and a division. The top harmonic is weighted continuously with pitch, so a glide never clicks.

The pitch cannot move, and the form shows why: the angle is advanced by the note alone and nothing in it depends on b0. Loop changes how loud each harmonic is, never where it is, however fast it moves.

Then the rail. Nothing runs away as Loop nears its end: the formula has no feedback. What grows is one number, the height of the wave's peak over the depth of its trough. The wave's crest grows with it, and rounding in the arithmetic is magnified by about that much. It is between 4 and 5 with the loop amount at nine tenths and 45 at 0.999, where the rounding of 32-bit arithmetic still leaves the error near 110 dB down. Choosing the rail is choosing the largest value of that number I accept: one number, the same on every note and every rate, a hard stop applied after every modulation has been added. The knob works in b0, not in B: near the top, b0 moves about six times as fast as B.

A chain, one way round.

The shape and the loop each move the other, in an order fixed by two lines:

b0[t] = clamp(β + d_L·P[t] + m[t], −b_rail, +b_rail)
α[t]  = Spin + d_S·L[t]

The upper line is Stir. The loop's shaping number b0 is Loop's own setting β, plus the outline's left-to-right position P times the depth of Stir d_L, plus any other modulation of Loop m, and the total is held between the rails. P is taken before any Spin and scaled to stay within ±1. The lower line is Whirl: the Spin angle α is Spin's own setting plus the loop's wave L, divided by its exact peak, times the depth of Whirl d_S. t counts oversampled steps. Each step runs in that order, outline, Loop, loop wave, Spin, sound, and nothing returns to where it started.

I could have closed it. Feed the turned outline back to Stir one step late and the pair make a true loop, bounded, since rotation keeps size and the rail holds b0. I left it open because a true loop can be chaotic, so that getting the same sound twice would rest on the last digit of the arithmetic; because its bandwidth grows each time round and cannot be bounded by hand; and because Spin would begin to change the loop's tone. Nothing in a voice depends on chaos staying tame.

Whirl is the plainer direction. Spin turns the whole outline, so every harmonic of the shape has its phase pushed back and forth through the same angle. With Loop at its centre the loop's wave is a sine, and this is the textbook case: each harmonic of the shape grows sidebands above and below it, spaced by the loop's pitch, with sizes set by Whirl's depth. It is Chowning's rule (1973) exactly, with Whirl's depth as the index, the same for every harmonic and every shape. Interval is a ratio of two whole numbers, so every sideband lands on a single harmonic series, that of the note's pitch divided by the lower number of the ratio, which is why the clang stays in tune.

For any Loop there is a bound. The loop's wave has a highest harmonic and a peak of 1, and a wave like that has a limit on how fast it can change (Bernstein's inequality). That limits how far Whirl can throw the shape's harmonics, and a standard estimate (Carson's rule) turns the limit into the highest frequency the pair can make. At four times the rate the harm is not in passing half the oversampled rate but in folding back from far beyond it into the band you can hear. Worked through, with the loop's band edge and the top of the pass band both at 20 kHz, Whirl is safe to a little over a whole turn at 48 kHz and to a little under one at 44.1. Half a turn clears both rates on this estimate; a whole turn would clear 48 kHz and not 44.1. That is the reasoning behind a rail of half a turn on Whirl.

Stir is a different animal. Loop never moves a frequency, so the shape cannot bend the loop's pitch; it modulates the loudness of each harmonic. As the dot goes round, each harmonic of the loop swells and shrinks, and a harmonic whose loudness is swinging grows partials either side of itself, spaced by the rate of the swing. The higher the harmonic, the more it grows: when the swing is a plain sine, harmonic k gathers up to k + 1 of them on each side. So the note's harmonics stay where they were while new partials gather round each. "The pitch is exact" means the harmonics stay put. It does not mean that nothing is added.

For both directions at full depth, near the rail, on the highest note, I have a loose bound by hand and nothing tighter. That corner is decided by measurement against a reference worked at sixty-four times the rate: no aliased component between 20 Hz and 20 kHz within 90 dB of the output's peak.

The fold and its integral.

A filter can scale the harmonics already there. It cannot make one. A curve applied to the wave can, so the design of the fold is the choice of a curve, and I chose mine for its mathematics, not from a circuit. The published analyses of the classic folding circuits (Esqueda, Pöntynen, Parker and Bilbao, 2017) give their curves exactly, at the cost of a special function on every sample. I kept the behaviour they measure in a function whose integral is a few low polynomials.

The curve starts as a plain zigzag. Inside its limits the wave passes untouched; push past the top and it turns back down, as if the ceiling were a mirror; push further and it turns up again off the floor, and so on without end. Then every tip of the zigzag is rounded, by averaging the zigzag over a small window. The flanks stay straight and each tip becomes a parabola. The width of the window is the roundness, one constant voiced by ear. What goes in is the mix of shape and loop, each held to a peak of 1 so that Fold means the same whatever they are doing, multiplied by a gain that comes from Fold and shifted by an offset that comes from Symmetry.

Why a fold adds: put a sine through the zigzag and the sum is a classical one, softened a little by the rounding, with a plain result. The harder you push, the further up the harmonics reach, in direct proportion: twice the level, twice the bandwidth. With Symmetry at its centre the harmonics are all odd; at either end they are all even; between, a blend of the two.

Bandwidth in proportion to level is aliasing in proportion to level. The cure (Parker, Zavalishin and Le Bivic, 2016), in its plainest form, replaces the curve's value with its average along the straight line from the previous input to this one:

y = (F(x1) − F(x0)) / (x1 − x0)

x0 is the previous input, x1 the present one and y the output. F is the running total of the curve, its integral, so the top is what the curve adds up to between the two inputs and the bottom is the distance between them: an average. The method assumes one thing, that the curve is the same on every step, and nothing about how the input moves. So Fold and Symmetry, being parts of the input, may move on every sample, and a morph of the fold's own shape does not exist. A sharper relative (Gabrielli and Squartini, 2026) reads a sample or two ahead, and nothing in a voice may wait on the future.

The quotient misbehaves when the two inputs are nearly equal, and the usual cure is a threshold. A threshold is an allowance, and I keep none. This is where the choice of curve pays. Within any one piece of it the running total is a low polynomial, so the division can be done on paper, in advance, and what is left to compute has no division in it. When the two inputs are the same it gives the curve's own value exactly. What remains is which pieces two numbers fall in: comparisons against the fold's own breakpoints.

Give the method a perfectly straight curve and it returns the average of two neighbouring samples, which dulls the top: nearly 12 dB down at 20 kHz when the rate is 48 kHz, and half a dB down at four times that. So the fold runs at the oscillators' rate, in two stages. One stage of a repeating curve folds without limit; the second adds a fixed fold within the fold, and squares an account: each delays by half a step, and two halves make a whole.

One openness, two curves.

There is no amplifier followed by a filter. There is one number, the openness, and loudness and brightness are functions of it, so they fall together, as they do in a plucked string or a struck bar. Nothing here reproduces a circuit. Every curve, time and range is mine, voiced by ear; this is their form.

a(λ) = λ^2
γ(λ) = γ_lo·(γ_hi/γ_lo)^λ,   γ = tan(π·fc/fs)

λ is the openness, 0 closed to 1 open, one value per voice, every sample. a is the level: the openness squared. γ is the filter's own setting, which stands for a cutoff fc at sample rate fs, and γ_lo and γ_hi are its values at the two ends of the range. The square makes level fall faster than openness, so a closing gate fades and darkens together. The second curve is an exponential, so equal steps of openness are nearly equal musical intervals of cutoff.

A strike sweeps this filter on every sample, so its form matters more than its order. Each stage keeps one number as its memory, and the filter's feedback is solved inside the sample. One stage is the form for loudness and tone together. It obeys a rule that is exact on every sample: the energy in its memory changes by what the input supplies, less a loss that is never negative, and by nothing else. The cutoff scales both of those and appears nowhere else, so a change of cutoff by any amount adds no energy of its own: with no input the energy falls or holds whatever the cutoff does. The same holds for the two-stage form, used for tone alone. A filter that stores past inputs and outputs has no such property: a sudden change of coefficient reinterprets its stored past.

Resonance belongs to the tone-alone mode and must mean the same at every openness, so it is set by the knob, never by the openness. The height of the resonant peak depends on the filter's damping and nothing else, and this filter form keeps every value of the continuous response: the same peak at every openness and every sample rate. In that mode a filter at its lowest cutoff passes what lies beneath it, so the gate closes through a short knee at the bottom, and every mode ends each note in exact silence.

The openness follows its target at two speeds. The target is the strike plus anything pinned to the gate, held between 0 and 1. Opening, the gate covers a fixed fraction of the remaining distance on every sample, a fraction that is always less than the whole, so the response cannot overshoot or ring. Closing, it does the same with its own time, which shortens by a fixed fraction the further open the gate is, and a small straight-line fall is added. Near the bottom, where covering a fraction of what remains would approach zero for ever, the straight line takes over and brings the openness to exactly 0 in finitely many samples. A note ends on a sample, and no threshold decides when it is quiet enough to stop.

A strike is a pulse into the target, held long enough for the openness to rise to about 95 per cent of its height. Velocity sets the height. So a hard note is high on all three curves: loud by the square, bright by the exponential, quick to let go because the closing time is short up there. A soft note opens part of the way, quieter and darker, and closes slowly from there. With the square, half the height is a quarter of the level, 12 dB down.

Every sample named.

This kind of synthesis has long been celebrated for being unrepeatable, a polite way of saying it could not be relied on. Here the wildest setting on the panel is a setting. Every quantity in a voice is a fixed function of the note's own count of samples, of control values that hold on named samples, and of modulation that is a fixed function of the same. Nothing reads the host's buffer length or position. Nothing uses a tolerance, a threshold or a running estimate. What remains is constants, and a constant is not a tolerance: nothing is ever allowed either side of it.

A voice has one master phase, and every oscillator's phase is a whole-number multiple of it:

θ = 2π·frac(m·Ψ),   m = p·L/q,   L = 60

Ψ is the master, a 64-bit whole number counting fractions of a cycle, advancing at the note's pitch divided by 60 and wrapping by itself. Each oscillator multiplies it by its own whole number m and keeps the fractional part, which is its phase θ. p/q is the oscillator's ratio to the note, and m is whole because q divides 60: 90 for the loop a fifth up, 80 for a fourth. A wrapping whole number times a whole number is exact, so two oscillators stand in exactly their ratio on every sample, like gears cut on one shaft; separate phases would slide apart over a long drone.

Events land on their own sample. Settings are read on a 16-sample grid counted from the note's own start, and each value moves in a straight line, over the 16 samples that follow, to what was read. The ramp never waits for a later value, so a moved knob follows exactly 16 samples behind: a glide with a name and a length.

The voice works at four times the rate and comes down through filters, at a cost I would sooner print than hide. The voice's delay is a sum of four things: two steps for the corner correction, half a step for each fold stage, and the delays of the two filters that bring the rate down. It comes to 29 samples at 48 kHz and 48 samples at 44.1 kHz: six tenths of a millisecond, and just over one.

The filters are linear-phase, so each has one delay at every frequency. Their lengths come from a standard estimate (Kaiser's) for a stop band 120 dB down: the narrower the gap between what must pass and what must be stopped, the longer the filter. The lower rate needs the longer one, because about 2 kHz is all that separates 20 kHz from half of 44.1. A 19 kHz pass band or a 100 dB floor would have made the delay 33 or 39 samples. I refused both, so that the two rates sound the same.

The delay is the same on every note and every buffer size. The instrument reports it and the host puts every sample back in its place; inside, everything after the voice acts that many samples late, so that as heard each change lands where it was put. None of it is look-ahead. The one cost: a player hears each note that much later.

Between machines the arithmetic has to be pinned. The four operations and the square root round identically everywhere, provided nothing fuses or reorders them. A library's sine, cosine and exponential do not, so each one in the audio path is Corwynt's own: a fixed polynomial of a phase that is already a whole number. Identity across buffer sizes follows from the construction. Identity across machines is a stronger statement, and I make it for a pair of machines when their renders have been compared and found to match.

What it does

What Corwynt does.

Decided features only. The rest is below.

  • A shape oscillator: place and drag the corners of any shape, or slice through a turning solid. Shape, Spin and Curve.
  • A loop oscillator: Loop from sine to buzz, pitch fixed. Interval in exact octaves, fifths, fourths and thirds.
  • One rail for the whole instrument, with a lamp.
  • Whirl and Stir, so the two oscillators play each other.
  • A two-stage wavefolder, Fold and Symmetry, its curve drawn live.
  • ROOT: sine to triangle, with a sub one or two octaves down, never folded.
  • A gate for loudness, tone or both, with Response, and Resonance when it shapes tone. Play harder for brighter and snappier, softer for darker and longer.
  • The pin board: two sets of pins, A and B, and Morph between them.
  • The family sequencer as a tab, with locks on the shape, the fold, Whirl and Stir.
  • Delay, chorus and flanger, and a reverb whose shimmer happens inside its own tail: Octave, Fold or Ring.
  • Presets that teach: each says what to listen for and which knob to move.
Still being decided

On the bench.

How many notes it plays at once, the effects' full controls, and which solids join the library later. Drawing a shape by hand, rather than placing corners, is an idea, not a promise. I'll note each on the Workbench as it's settled.

If there's something you'd want Corwynt to do, or a shape you'd like to hear, tell me: [email protected]. Changes to the plan go on the Workbench.

All five on the Coming soon page