← Research
Published Reeldemo

How to remove the click in a wavetable loop

By

TL;DR

Wavetable synths and looping sounds click when the end of a cycle does not meet its start. Reeldemo's signal healing (the DenoiseOpt method) searches for small repair programs that fix only that join. Averaged over five holdout seeds it scored 0.9708 out of 1, just below a trained neural model (0.9767) and far above a classic crossfade (0.542). No listening tests were run yet.

Reeldemoaudiopreprint

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. Reeldemo calls this signal healing.

Why do simple fades not fix it?

The usual trick is a short crossfade at the loop point. It can hide a seam once. On repeat it often smears the start of the cycle or leaves a softer click behind.

In the paper a two-sided cosine crossfade averaged 0.542 ± 0.038 on the 0 to 1 seam score. On hard cases with a big jump at the wrap, classic fades collapsed while the searched repairs kept working.

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?

Main result, mean over five holdout seeds: the short DenoiseOpt run scored 0.9708 ± 0.0014. A trained Noise2Noise model, a common neural denoiser, scored 0.9767 ± 0.0015 and was ahead on every seed. 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. Averaged over three search seeds, the hybrid search came first with 0.9748 ± 0.0018.

Best single run: when the hybrid kept training until its score stopped improving, one search seed reached 0.9912, above the frozen Noise2Noise reference of about 0.9750. The paper stresses that this is one seed, not a multi-seed mean.

On twenty different generated waveforms the two were level: DenoiseOpt 0.9337 ± 0.0028, Noise2Noise 0.9308 ± 0.0045, with no significant difference.

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. Wavetable synths, drones, repeating textures and loops in a DAW all need joins you do not notice. When signal healing works, the loop disappears and you just hear the sound.

The same seam problem shows up outside music. Machines turn, hearts beat and power grids cycle. The article Signal discontinuities matter beyond music covers those tests.

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?

Not on the main test. Averaged over five holdout seeds, Noise2Noise scored 0.9767 and DenoiseOpt 0.9708. On twenty generated waveforms they were level. A single long run reached 0.9912, but that is one seed. Both are far ahead of a classic crossfade at 0.542.

Why does my wavetable or loop click?

The last sample of the cycle does not line up with the first one. Each time the sound wraps, the speaker jumps, and the jump is the click.

Is a crossfade enough?

Sometimes for a gentle seam. In the paper a cosine crossfade averaged 0.542 out of 1, while searched seam repairs averaged about 0.971.

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