Transcribing solos is a time-honored method of working on improvisation chops in jazz. There’s a decent online community of people who post their own transcriptions for those that just want to practice playing the solos themselves. However, nothing quite beats listening to the same passage again and again, listening as hard as you can. It’s good training.
There are a couple tools out there like The Amazing Slow Downer that allows you to slow down sections of music without affecting pitch for those crazy fast bebop runs. Sadly, there’s not a version for Linux. Audacity is an open source audio editor (with a Linux build) that has a plugin that can slow audio down as well.
In the past, I’ve used Audacity, but found it awkward and difficult to use. I really wanted to be able to loop a section of audio, and edit it without recreating a new one. I also wanted to be able to adjust the speed up and down without having to redo it for each section. It also tends to crash on my laptop constantly, forcing me to restart my process, which is pretty disruptive when focusing really hard on a tough transcription.
Enter mplayer, a command line media player! mplayer works on both OSX and Linux, and has flags for setting start/end times, looping, and even slowing down audio without affecting pitch. OSX users can install via homebrew with
brew install mplayer; Linux users can use whatever their favorite package manager is. Currently, I use the following command:
mplayer -af scaletempo -speed 0.8 -ss 57 -endpos 3 -loop 100
-af scaletempo ensures that only the tempo of the audio is scaled, not pitch.
-speed allows you to set a percentage of full-speed.
-ss is the number of seconds from the start of the audio file from which you want to start, and
-endpos marks how many seconds from your specified start-point should play before ending.
I typically also use
-loop to loop the audio as long as I think I need to figure out the current section.
mplayer is working well for me so far. The nice thing about using a command line media player is that if I decide that I need a different interface, it should be decently easy to write a script for myself to provide a custom interface.