How to remove the click in a wavetable loop
TL;DR
Wavetable synths click when the end of a stored sound cycle does not meet its start. DenoiseOpt searches for small repair programs that fix only that join. On a five-seed test it scored 0.9708 out of 1, near a trained neural model (0.9767) and far above a classic crossfade (0.542). No listening tests were run yet.
Why do wavetable synths click?
A wavetable synth stores one short cycle of sound and plays it over and over. In this paper each cycle is 256 samples long. When the last sample does not line up with the first one, the speaker has to jump. You hear that jump as a click or buzz, and it repeats every cycle.
The middle of the cycle can sound perfect. The fault sits only at the wrap, the point where the end becomes the start again. We call that point the seam.
Most cleanup tools treat the whole sound as noisy. That is the wrong picture here. Only one small spot is broken, so the repair should touch that spot and leave the rest alone.
What does DenoiseOpt do?
DenoiseOpt does not hand-design a filter. It searches for one. The search tries many small repair programs (the paper calls them operators), scores each one, keeps the best and changes them a little. Then it repeats.
The search mixes three known tools. A genetic algorithm breeds and mutates candidates. PPO, a reinforcement learning method, learns which changes pay off. Population-based training adjusts the settings of the search while it runs. The paper says plainly that it reuses these tools and does not claim a new search algorithm.
No clean recordings are needed. The test sounds come from a generator. For every broken cycle the generator can also make the same cycle without the break, an ideal sibling. That gives a fair target without any human labelling.
How is a repair scored?
Every repair gets one number, R_blend, between 0 and 1. Higher is better. It rewards two things at once. The seam should match the ideal sibling, and the middle of the cycle should stay as it was. A filter that smooths everything fails the second test. A filter that does nothing fails the first.
The score is locked before experiments start, so the method cannot quietly move the goalposts. To catch problems that only show up on repeat, each cycle is played 16 times in a row before scoring.
What did the tests show?
On a holdout test with five random seeds, a short DenoiseOpt run scored 0.9708 ± 0.0014. A trained Noise2Noise model, a common neural denoiser, scored 0.9767 ± 0.0015. A classic two-sided cosine crossfade scored only 0.542 ± 0.038.
The paper also ran a fair contest between six kinds of search, each with the same budget of 5,000 evaluations and three search seeds. The hybrid search came first with 0.9748 ± 0.0018.
When the hybrid kept training until its score stopped improving, it reached about 0.991 inside the training loop on one search seed. The paper marks that run as provisional. On the five-seed holdout, a short hybrid run scored 0.9708 ± 0.0014, slightly below Noise2Noise (0.9767 ± 0.0015).
On hard cases with a big jump at the wrap, classic fades collapse while the searched repairs keep working. The follow-up article on other signals shows the same test on machine vibration and heartbeat data.
Key terms in plain language
Wavetable: a short stored cycle of sound that a synth repeats to make a tone. Changing which cycle plays creates movement in the sound.
Seam or wrap: the point where the last sample of the cycle hands over to the first sample of the next repeat.
Operator: a small repair program that changes samples near the seam. DenoiseOpt searches for good operators instead of designing them by hand.
Noise2Noise: a neural network training method that learns to clean signals from pairs of noisy examples, without clean targets. It is the strongest baseline in the paper.
Seed: the starting value for a random process. Testing on several seeds shows whether a result holds up or was luck. The paper reports mean and spread over five evaluation seeds or three search seeds.
Holdout: test data the method never saw during search, used to check that a repair generalises.
What are the limits?
All evidence is the R_blend score. No people listened to the results yet, so the paper makes no claim about how much better it sounds. The test sounds are synthetic, plus a set of real single-cycle waveforms used as a check.
The best Noise2Noise comparison rests on a small number of seeds, and more runs are pending. The paper is a preprint and has not been peer reviewed.
Where is it used?
The work comes from Reeldemo, the sail.black music tools team. Clean loops matter for wavetable synths, repeating textures and loops in a DAW. The Reeldemo signal healing article explains the idea for musicians.
Frequently asked questions
What is a wrap discontinuity?
It is the jump between the last and first sample of a looped sound cycle. Because the cycle repeats, the jump repeats too and you hear a steady click or buzz.
Does DenoiseOpt beat neural denoisers?
No. On the paper's five-seed holdout a short hybrid run scored 0.9708 and Noise2Noise scored 0.9767. Both are far ahead of a classic crossfade at 0.542. One longer search run reached about 0.991 in-loop, which the paper calls provisional.
Was it tested by listeners?
No. The paper reports zero listeners. All results use the objective R_blend score.
Can I use the code?
Yes. The paper links its code on GitHub, and the paper states that ReelSynth and denoise-opt-meta are MIT licensed.
Read the paper
Unsupervised Wrap-Discontinuity Repair in Wavetable Synthesis via Hybrid GA-PPO Meta-Search
Julian M. Kleber. aiXiv preprint, 2026-08-03. Not peer reviewed.
How to cite: Kleber, J. M. (2026). Unsupervised Wrap-Discontinuity Repair in Wavetable Synthesis via Hybrid GA-PPO Meta-Search. aiXiv preprint aixiv.260719.000003.
Links
About the author
Julian M. Kleber is a scientist and engineer in Berlin working on chemistry, machine learning and scientific software. ORCID · Google Scholar · LinkedIn · julianmkleber.com
More
Can a tiny grid of cells predict an SI agent's next step?
Reeldemo
How we search for better deep learning algorithms
sail.black
How do you stay in control of many SI agents at once?
Reeldemo
Signal discontinuities matter beyond music
Li
Li: a programming language for fast, checkable software
How do bacteria close the rings of antibiotics? A new idea
Can fluorine form triple bonds? A plain-language look
CARATE: teaching computers to read molecules as graphs
CACHE #1: can computers find drugs for a Parkinson's target?
Watching drugs move: Markov models of protein interactions