How to Visualize a Song
We listen to songs all the time. Have you ever wondered what they look like?
I spend a lot of time wondering about things and recently I wondered if visualizing songs might help my improvisational skills. I’m an avid jazz guitarist, and the thing about jazz is there’s plenty of improvisation. Each song has the same formula. Someone plays the “Head”, which is the melody, and then each musician takes a turn and plays a solo over a few choruses (passes thru the song), then a musician plays the “Out Head” to end the song. The solos aren’t memorized, they’re made up on the fly.
It’s fun, and it’s not easy. And while there are plenty of resources available to help you learn how to do it you’ll still need a lifetime of practice to get good at it. And even then, practice itself is not a surefire recipe for success. You need to know what to practice.
The Song Doctor Sonic Visualizer
I built the Song Doctor app over the last month or two with the help of Cursor. Writing an app like this strictly old school would have taken me probably a year. And while these new-fangled AI-powered IDEs are something of a mixed blessing, for an app like this they are a huge productivity boost.
In this article, I’ll show you some of the things you can do with the Song Doctor. It’s located at songdoctor.gizmocms.com, and it’s free to use. It runs entirely in your browser (thanks to the power of WASM), so it’s essentially free for me to host, and therefore free for you to use.
Learn the Key, Tempo and Time Signature
First things first. When you are learning a new song, the first step is to figure out the key of the song and the time signature. Upload an audio file (mp3, wav) into the Song Doctor, wait a bit for the analysis, and it will tell you:

Stats for the Beatle’s “Love Me Do”
Loop Sections and Slow Them Down Without Changing the Pitch
I’m a longtime fan of “Anytune”, a wonderful app that lets you load up a song and slow down sections. So Job #1 for Song Doctor is to provide a similar feature.
Turn on the Looping feature and use Shift-Click to set the loop start position, and Cmd-Click to set the end position and then hit play. You can also use the tempo slider to slow down the section without changing the pitch.

Song Doctor — Slow Down Loops without Changing Pitch
Get Chords for Each Beat and Measure
This was the hardest part to build. I figured I’d find a nice FFT (Fast Fourier Transform) library, use it to get the notes for each beat and measure, and then map the notes to chords. Instant chord chart, which would be quite handy.
Not so fast big guy.
It turns out, when you look at the frequency spectrum for a given beat, there’s a lot in there. It’s not just the 1, 3, 5 and 7 of the chords played on that beat. It’s that, plus a whole lot more hidden amongst a lot of other frequencies. For example, I had no idea that a sax had so many overtones, or that the root note of a piano has a strong 3rd element. Play a ‘middle C’ on a piano and you’ll also get plenty of ‘E’. Plus, a group of musicians playing on an actual recording do a lot of stuff besides just knocking out the notes of the chords from a chart.
Which is not to say this part of Song Doctor isn’t useful. It is! It’s just that it won’t generate a perfect chord chart, like that found in say, iReal Pro. My hopes have been temporarily dashed. But I’m not a quitter! Maybe it will get better.
Here’s a great way to use it, shortcomings and all. Say you are looping a challenging section of a difficult solo you are learning. Maybe the iReal Pro chord chart says the section is over a G7 chord. And the notes from Song Doctor say the chord, and its associated beats are a Dm7. If you look at the notes (see the next section), you’ll see a strong Dm7 and also a less strong G7. Why? Because they are very, very similar chords. In fact, if you play a Dm7 arpeggio over a G7 you’ll sound just fine.
Here’s what it looks like in Song Doctor:

Chords for Beats and Measures in Song Doctor
See the Chords in Music Notation
Toggle the “Grid/Score” button to toggle between the grid view and a traditional score view. In this view a lot of the less prominent notes are filtered out, because otherwise you have way too many notes to deal with.

Song Doctor Score Notation
Get the Notes for Each Beat and Measure
You can also see the notes in each octave found for each beat and measure. Click on a row header to hear that note, or click on a measure header, or a beat header in a column and hear that chord as well. Click on the cells to hear the note in the cell. Use the dropdown to pick the instrument you want to use.
Notes in the grid cells are color coded according to their intensity — red is high, to yellow and white for low and very low. You can also filter the grid to show only the strongest notes, or select certain notes or chord functions (root, 3rd, 5th, 7th and so on).

Notes for Each Beat and Measure, with Filtering
See the Frequency Spectrum for Each Beat
For each beat you can its associated frequency spectrum. Hover over the vertical frequency bar to see the details of that frequency bin, and click on the bar to hear that note. Use the play button to “play” the spectrum. You can filter octaves and advance to the next beat. If you click on a beat or measure column header in the grid, the frequency spectrum will advance to the associated beat.

Frequency Spectrum for Each Beat
Generate Pure Tones and Chord Progressions
Of course, testing something like Song Doctor requires some audio files where “you know the answer in advance”. That is, pure tones without a lot of overtones and simple chord progressions.
As it turns out, there aren’t a whole lot of options out there to create this sort of thing. Maybe a tool like Audacity could do it, but that would require precious time to figure out. Sometimes it’s easier to just build something to do the job. So that’s what I did.

Song Doctor Tone and Chord Progression Generator
And it’s handy too. I imagine there are others out there that need the same thing.
What’s Next for Song Doctor?
I have no idea. I’m finding it to be useful, and I imagine I’ll dream up some new features in the future. Stay tuned!