Show HN: Transposify–change Spotify song key from your menubar for singing

evanhu_1 pts0 comments

GitHub - evanhu1/transposify: Sing along to any Spotify song in your range — real-time pitch shifting (Rubber Band R3) as a macOS menu-bar app. · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

evanhu1

transposify

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>7 Commits<br>7 Commits

Resources

Resources

Sources

Sources

docs

docs

tools

tools

.gitignore

.gitignore

LICENSE

LICENSE

Package.swift

Package.swift

README.md

README.md

install.sh

install.sh

make-app.sh

make-app.sh

probe.swift

probe.swift

View all files

Repository files navigation

Transposify

A macOS menu-bar app that lets you sing along to any Spotify song in your<br>range — shift the key up or down by semitones in real time, pitch without<br>tempo change. It stays out of the way: a small 𝄞 +2 / 𝄞 −3 / 𝄞 0 in the<br>menu bar, and a popup when you click it. Settings are remembered per song.

Install

You build it on your own Mac with one script. Because it's compiled locally,<br>macOS doesn't quarantine it — no Apple Developer account, no notarization, no<br>"unidentified developer" warning.

git clone https://github.com/evanhu1/transposify.git<br>cd transposify<br>./install.sh

That builds the app, ad-hoc-signs it, installs it to /Applications, and<br>launches it. On first launch macOS asks for Microphone access — that's the<br>permission Core Audio uses to capture Spotify's audio; it never touches your<br>real microphone. Click Allow , then look for the 𝄞 in your menu bar.

Requirements: macOS 14.4 or later, the Spotify desktop app, and Apple's<br>command-line tools (xcode-select --install if swift isn't found).

Uninstall:

rm -rf /Applications/Transposify.app && tccutil reset Microphone com.evanhu.transposify

Using it

Click the menu-bar item to open the popup:

Now playing — current track + artist.

Transpose — − / value / +, or the slider (±12 semitones). Reset<br>(↺) appears when shifted.

Reduce vocals (karaoke) — experimental center-channel cancellation to duck<br>the original lead vocal; works best on stereo tracks.

Remember key for this song — on by default; your setting auto-applies when<br>that track plays again. New songs start at the original key.

Launch at login — register as a login item via SMAppService.

The menu-bar item (treble clef + signed value) always reflects the current<br>offset, at fixed width so it never shifts. The app auto-adjusts when you switch<br>output devices (e.g. plug in headphones) and engages only while Spotify is<br>playing.

How it works

Spotify's desktop client never exposes its decoded audio — it's DRM-protected,<br>so no injected code (Spicetify etc.) can touch the stream for DSP. The only way<br>to pitch-shift it is to capture Spotify's audio output and process it before<br>your speakers:

Spotify ─► Core Audio process tap (muted-when-tapped) ─► ring buffer<br>popup sets semitones ─► [vocal reduce] ─► Rubber Band R3 ◄── source node<br>└─► default output device

Capture : a Core Audio process tap (AudioHardwareCreateProcessTap,<br>macOS 14.4+) grabs only Spotify's audio — no virtual device, no extension. The<br>tap is created muted-when-tapped, so Spotify's untouched output is silenced<br>and you hear only the processed copy.

Transpose : the Rubber Band Library<br>R3 ("finer") engine in real-time mode — a state-of-the-art music pitch<br>shifter, run directly in the audio render callback. Latency is higher than<br>Apple's built-in unit, but that's irrelevant here (you sing along to the<br>output, so there's no monitoring loop). Verified accurate to Pristine passthrough at 0 : the pipeline engages only while Spotify is<br>playing and there's something to do (pitch ≠ 0 or karaoke on). At 0 with<br>karaoke off the tap is fully torn down, so Spotify plays untouched —<br>bit-perfect, zero added latency. It also disengages when you pause.

Now playing / per-song memory : read from Spotify's PlaybackStateChanged<br>distributed notification (instant, no polling), keyed by track ID.

Diagnostics & tests

swift probe.swift # OSStatus of each Core Audio tap...

spotify audio transposify menu swift song

Related Articles