Skip to content

[Feature]: Pitch / key transposition for vocal practice and karaoke #245

Description

@thcp

What problem does this solve?

There's no way to change the musical key of a track. This is essential for vocal practice and karaoke:

  • Singers need to lower songs with high notes to practice safely before attempting the original key.
  • Users want to transpose backing tracks to fit their natural vocal range when it doesn't match the original artist's.

Pairs naturally with the existing stem separation + speed control: separate stems → mute vocals → transpose the backing track to your range → practice at your tempo. Key change is the missing piece that turns the stem separator into a real vocal-practice tool.

Proposed solution

Add a pitch / key transposition control (e.g. a ±6 or ±12 semitone stepper with a key label) alongside the existing playback speed control — pitch shift without changing tempo, the complement to the speed control (tempo without pitch) shipped in #241 / #242.

Implementation notes:

  • The audio engine already runs a WSOLA time-stretcher in an AudioWorklet (static/vendor/soundtouch-processor.js), but it implements the tempo stage only — no resampler / pitch parameter. Pitch shift needs a resampling stage added (the standard SoundTouch time-stretch + resample design).
  • Recommended: add a pitch parameter + interpolating resampler inside the worklet, keeping pitch out of the delicate playback-rate/scheduling math in the audio engines.
  • Start real-time, client-side, scoped to backing-track transposition — instrumental artifacts from WSOLA + resampling are far less objectionable than on isolated vocals. Higher-quality, formant-aware vocal shifting can be a later server-side enhancement.

Alternatives considered

  • Prior art: the Transpose browser extension, and Moises.ai's key-change feature.
  • Compose existing primitives (playbackRate = 2^(N/12) on the source + SoundTouch tempo = 1/2^(N/12) to restore duration) instead of adding a resampler — quicker, but tangles pitch into the existing scheduling math, which is a likely source of bugs.
  • Server-side offline render for maximum quality (formant preservation) — heavier and slower; better as a follow-up if users want to transpose isolated vocals well.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions