Key Changer EngineAudio technology Try Key Changer

Audio technology by Misheno

Key Changer Engine

Key Changer Engine is the real-time audio processing engine behind Key Changer.

Key Changer popup set to +7 semitones, with minus and plus controls, a −12 to +12 pitch slider, an Original button, Keep vocals natural enabled, and Fine tune set to 0 cents.

Hear it before reading the numbers

It changes musical pitch while keeping the singer sounding closer to the same person, runs in the browser with WebAssembly, and is built for real-time playback.

Every engine below starts from the same source audio and uses the same pitch shift.

Demo tracks

Switch engines while the excerpt is playing. The playback position stays the same.

Engine
Pitch shift
+5

Same source. Same pitch shift. Same playback position.

See the benchmark 

Vocal similarity benchmark

Does the shifted vocal still resemble the original singer?

  • Key Changer Engine0.681
  • Rubber Band Library R30.662
  • Signalsmith Stretch0.601
  • soundtouchjs0.403

Higher means more similar to the original singer.

Mean ECAPA-TDNN cosine similarity across the 14 non-zero shifts from −7 to +7 semitones, using 13 single-lead vocal excerpts.

Key Changer Engine has the highest overall mean in this benchmark: 0.681, compared with 0.662 for Rubber Band R3, 0.601 for Signalsmith Stretch, and 0.403 for soundtouchjs.

Does the singer still sound like the same person?

We compare the vocal from each processed excerpt with the original using ECAPA-TDNN, a speaker-recognition model.

The primary analysis uses 13 excerpts with a single lead vocal. Higher cosine similarity means the shifted vocal remains more similar to the original singer.

These scores are similarity values, not percentages or probabilities.

Higher means the shifted vocal remains more similar to the original singer.

For each excerpt, vocals are separated with Demucs. ECAPA-TDNN similarity is measured on overlapping 3-second vocal segments, then averaged first within each excerpt and then across the 13 excerpts at each pitch shift.

The point at 0 semitones is shown as a reference. The overall comparison below uses only the 14 non-zero shifts from −7 to −1 and +1 to +7.

1.0 — more similar to the original singer0.0 — less similar

Same source material. Same pitch shift. Same output conditions.
View data tableHide data table
Similarity to the original singer, 0 to 1, by pitch shift in semitones.
Engine−7−6−5−4−3−2−10+1+2+3+4+5+6+7
Key Changer Engine0.5980.6320.6750.6740.7130.7540.8340.9870.8260.7420.6880.6560.6070.5890.552
Rubber Band R30.4900.5480.6140.6630.7100.7580.8470.9850.8360.7530.6940.6470.6030.5740.527
Signalsmith Stretch0.4710.5000.5340.5480.5920.6760.8160.9810.8140.6880.6130.5760.5450.5300.513
soundtouchjs0.2260.2470.2920.3340.4060.5570.7700.9750.7610.5490.3910.3140.2810.2680.245

Why it sounds natural

Changing pitch can also move the spectral shape that gives a voice much of its characteristic timbre.

A vocal-preserving pitch shifter tries to move the note while keeping that timbre closer to its original position.

The measurement below tests that directly.

Keeps vocal timbre near the original

At −5 and +5 semitones, the Key Changer Engine keeps the measured vocal envelope almost entirely in its original position.

Rubber Band R3 and Signalsmith Stretch also preserve it closely. soundtouchjs, which has no dedicated vocal-preservation mode in this comparison, moves the envelope almost completely with the pitch.

Timbre position is only part of vocal identity

The envelope measurement clearly separates the three formant-aware engines from soundtouchjs, but it does not explain the smaller differences between the Key Changer Engine, Rubber Band R3, and Signalsmith Stretch.

That is why we also measure speaker similarity with ECAPA-TDNN: it responds to a broader set of cues associated with the singer’s identity.

How much does the vocal timbre move with the pitch?

This measurement tracks how far the vocal spectral envelope between 1.5 and 5 kHz moves relative to the requested pitch shift.

0 means the measured timbre stays at its original position.

1 means it moves by the full pitch shift.

The values shown are medians across all 16 excerpts at −5 and +5 semitones.

Measured on the same 16 vocal excerpts at −5 and +5 semitones.
Lower means the vocal envelope remains closer to its original position.
View data tableHide data table
Vocal timbre movement, 0 to 1, medians across 16 excerpts. Lower means the envelope stays closer to its original position.
Engine−5+5
Key Changer Engine0.000.02
Rubber Band Library R30.010.04
Signalsmith Stretch0.030.05
soundtouchjs1.001.00

Key Changer Engine, Rubber Band R3, and Signalsmith Stretch all keep the measured vocal envelope close to its original position.

The differences between those three engines are small on this metric.

soundtouchjs behaves differently: without a vocal-preservation mode, its measured envelope follows the pitch almost completely in both directions.

Performance

94 ms

Built-in processing latency at 48 kHz

Under a tenth of a second

About 2–3%

Of one CPU core

Measured on Apple M3 Pro

How we measured it

The benchmark compares pitch engines under the same input and output conditions.

The source excerpts were selected before any engine measurements were run.

Benchmark at a glance

  • 16 song excerpts
  • 13 single-lead excerpts in the speaker-similarity benchmark
  • 15 pitch positions from −7 to +7 semitones
  • 4 pitch engines compared

Source material

We started with 57 candidate tracks from Pixabay and automatically selected 16 excerpts from 16 different songs.

Each excerpt is 20 seconds long.

The selection criteria were based only on the source audio: vocals had to be present through most of the excerpt and clearly audible over the music.

Source MP3 files were decoded to 48 kHz stereo floating-point WAV before processing.

Primary speaker-similarity analysis

The ECAPA-TDNN benchmark uses 13 excerpts with a single identifiable lead vocal.

Three of the 16 preselected excerpts contain choral or multiple-voice material:

  • “Chant”
  • “Tribal Vocal Atmosphere Chant”
  • “Workout Song”

They are excluded from the primary speaker-similarity analysis because ECAPA-TDNN measures speaker identity and a chorus does not represent one speaker.

The timbre-movement measurement uses all 16 excerpts because it does not depend on identifying one individual singer.

Pitch shifts

Every excerpt was rendered at every integer pitch shift from −7 to +7 semitones.

The same shift was used for every engine.

The 0-semitone result is included in the graph as a reference but is excluded from the overall ±1…±7 mean.

Vocal separation

Demucs 4.1.0 with the htdemucs model was used to separate vocals from accompaniment.

The same separation process was applied to the original source and to every processed output.

Speaker-similarity model

SpeechBrain 1.1.1 with the spkrec-ecapa-voxceleb ECAPA-TDNN model was used.

For each source and processed pair, cosine similarity was calculated between the original vocal and the processed vocal.

Only 3-second segments containing vocals were measured.

Segments advance in 1.5-second steps.

Aggregation

Similarity scores are averaged in two stages.

First, the ECAPA-TDNN cosine similarities of the voiced 3-second segments are averaged within each excerpt.

Second, the excerpt scores are averaged across the 13 single-lead excerpts at each pitch shift.

The overall figure shown for each engine is the arithmetic mean of the 14 non-zero per-shift results from −7 through −1 and +1 through +7.

Each excerpt and each non-zero pitch shift therefore contribute equally to the final summary figure.

Timbre movement

The timbre measurement tracks the position of the vocal spectral envelope between 1.5 and 5 kHz.

Movement is expressed as a fraction of the requested pitch shift:

  • 0 = the envelope remains at its original position
  • 1 = the envelope moves by the full pitch shift

The graph shows the median value across all 16 excerpts at −5 and +5 semitones.

Benchmark date

October 1, 2026

Engines

Key Changer Engine
Build:
Key Changer 0.1.0
Mode:
Keep vocals natural enabled
Rubber Band Library 4.0.0
Build:
WebAssembly
Mode:
real-time
Engine:
R3
Formant preservation:
enabled
Channels:
processed together
Signalsmith Stretch 1.3.2
Package:
npm
Preset:
default
Formant compensation:
enabled
Tonality limit:
8 kHz
soundtouchjs 0.3.0 (SoundTouch port)
Implementation:
soundtouchjs 0.3.0
Mode:
standard pitch shifting
Dedicated vocal-preservation mode:
none
Overlap:
16 ms

Rendering conditions

All engines received:

  • 48 kHz audio
  • stereo input
  • 128-sample processing blocks

Rendering was performed offline in Node 24.20.0 using the same block size as Web Audio.

Each engine’s processing latency was removed by alignment before measurement.

Audio processing

Benchmark source:
Pixabay MP3 decoded to 48 kHz stereo floating-point WAV
Processing:
48 kHz stereo floating-point audio
128-sample blocks
Runtime:
Node 24.20.0
Engine latency:
removed by alignment before measurement

Demo audio

The four public demo excerpts are 20 seconds long.

Format:
MP3
Bit rate:
128 kbps
Sample rate:
48 kHz

For each track, one gain value is used for every engine variant. It is set so that the loudest variant reaches −1 dBFS peak.

The demo audio on this page is pre-rendered so every engine can be compared from the same playback position.

Every benchmark comparison uses the same source material, pitch shift, processing format, and measurement pipeline.

The four public demo excerpts were selected after measurement; benchmark results use the full defined analysis set.

Latency and processor load

  • 94 ms at 48 kHz
  • WebAssembly
  • Real-time

Key Changer Engine has a fixed processing latency of 94 ms at a 48 kHz sample rate.

Excludes additional latency from the browser, operating system, and audio output device.

Measured in Node 24.20.0 using the same engine WebAssembly build that ships in Key Changer, on an Apple M3 Pro running macOS 26.5.

The test used 48 kHz stereo audio processed in 128-sample blocks.

Engine latency

Key Changer Engine has a fixed processing latency of 94 ms at a 48 kHz sample rate.

This value comes from the engine’s processing design and is not a hardware benchmark.

Additional latency can be introduced by the browser, operating system, and audio output path.

CPU load

Approximate CPU load was measured using the same engine WebAssembly build that ships in Key Changer.

Hardware:
Apple M3 Pro
Operating system:
macOS 26.5
Runtime:
Node 24.20.0
Sample rate:
48 kHz
Channels:
stereo
Block size:
128 samples
Measured load:
about 2–3% of one CPU core

Where to try it

Hear the engine live in Key Changer

Key Changer Engine runs inside Key Changer, Misheno’s Chrome extension for real-time pitch control.

Key Changer lets you shift audio playing in a Chrome tab from −12 to +12 semitones, fine-tune by ±50 cents, and keep vocals natural during playback.