The Classical CD Ripper (CCDR)

1.0 What is CCDR?

CCDR is (I think!) a better way to rip Classical music CDs! It’s precise and accurate, generating perfect copies of your precious CDs. It provides an excellent way to transition from physical musical media to the world of digital music.

2.0 Why CCDR?

There are a lot of CD rippers out there, but CCDR has the following features which makes it especially useful to the fan of Classical music:

  • CCDR will not fetch masses of rubbish metadata about your CD from online databases
  • It will only rip to lossless FLAC files, preserving the entire audio signal
  • It rips carefully and correctly, with speed not being a priority
  • Its rips are verifiably accurate, with hash values for the audio signal being generated by default
  • You can rip just a part of a CD, specifying the track numbers uniquely for each part -handy for when one CD contains two different symphonies or multiple concerti, for example

3.0 Obtaining and Using CCDR?

CCDR is supplied as a simple Bash script which can be downloaded simply by clicking this link. Feel free to open the downloaded file in a text editor and check that it’s not going to do anything that it’s not supposed to do!

Once downloaded and saved somewhere, it just needs to be turned into an executable script by issuing the command:

chmod +x

Once an audio CD is inserted into your computer’s CD or DVD-ROM drive, you can then launch the application by issuing the command:


To make launching the program easier and a tiny bit faster, I choose to do the following two things (which are entirely optional):

sudo mv /usr/bin/
sudo ln -s /usr/bin/ /usr/bin/ccdr

The first of these commands moves the shell script into the /usr/bin directory, so that it’s in your PATH and can therefore be invoked from anywhere on the file system, rather than only in a specific directory.

The second command creates a symbolic link in the /usr/bin directory called just “ccdr”, so that you can launch the program by typing just:


…rather than having to remember the “.sh” bit at the end.

If you choose not to do either of these things, then you will only be able to launch the program by first cd-ing to the directory you saved in, and you’ll have to type ./ exactly and in full, or by remembering where you saved it and invoking it by its complete path+filename (so, something like /home/hjr/Downloads/, for example).

The script will check for various software dependencies, evaluate your CD or DVD drive for accuracy, prompt you to supply a bit of information about the CD and then do it’s ripping thing. All files will be output somewhere within your $HOME/Music directory (the specific folder name the music ends up in will be a combination of the Composer’s name, Composition name and Genre you supply when prompted).

4.0 A Worked Example

4.1 First Time Running

Suppose we want to rip the CD whose cover you see here. It’s a CD that contains (as is often the case) multiple “works” by different composers. In this case, as per the track listing on Hyperion’s website, tracks 1-4 belong to something called “Western Wind Mass” written by John Taverner; tracks 5-8 are another Western Wind Mass by Christopher Tye and John Sheppard is the composer of tracks 9-12, a third Western Wind Mass. No matter which composer or composition we’re talking about, however, the performers are all the same (“The Tallis Scholars”) and so is their conductor (“Peter Phillips”). So, how do we go about ripping these three works using CCDR?

Well, obviously you start by downloading CCDR and making it runnable, as explained in Section 3 above. Then you stick the physical CD in one or other of your CD/DVD ROM drives. And then you open a terminal and type “ccdr” (or the full path and filename to the shell script, if you haven’t made the ccdr symbolic link in /usr/bin).

The first time you run the program, you’ll see this:

The program checks the various disks and drives available on your system and pulls out a list of which ones it thinks are CD/DVD drives. It itemises them, with their device names shown on the far-right, in the last column (with names such as “/dev/sr0” and so on). My main PC at home has more than one CD drive, so both are listed; if you’ve only got one, only it will be listed. No matter: pick a drive and type in its identifier (eg, /dev/sr1 or /dev/sr0) to specify that it will be the one to be used.

Before you press Enter to submit the device name, however, make sure it contains an actual audio CD, otherwise the program will terminate with this message:

If that happens, no matter: just pop a CD in the correct drive and re-launch CCDR once more. This time, when you tell it to use device “X” to rip, it will find a proper CD there and will continue as follows:

So, first note that once you specify a CD that actually has a CD in it, CCDR will run off and check what the standard offset is for that specific make of CD drive. No CD drive reads exactly what it’s told to; you tell it to read block 5 on the CD, for example, and it might read block 12 or block 137, depending on what drive it is and who made it. Knowing the offset and making an allowance for it makes it possible to read a CD accurately. You know the audio for track 1 (say) is stored between block 12 and 145… without correction, a ripper might actually read data from blocks 18 to 150, which would therefore not be correct. But CCDR knows what read offset your drive applies and can therefore correct for it, making accurate, bit-perfect reads possible.

The second thing to note from that last screenshot: you are prompted for just five pieces of information about the thing you are about to rip. Not about the CD as a whole, but just that part of it which you are about to rip, mind! So, yes, my CD contains works by 3 different composers, but I am going to start the ripping process just by ripping the four tracks written by John Taverner. So I specify just him.

As far as the composer names are concerned: use “normal” names and follow the suggested list of composer names from this site as exemplars of what’s acceptable and what isn’t! That is, it’s “John Taverner” not “Taverner, John”. Similarly, when you are prompted for a “genre”, I suggest you stick to the list of “acceptable” genres available from here. For example, it’s “Choral” not “Classical” -and not “Choir”, either! And so on. Note, in particular, that you are asked for the conductor or major performer of the piece. On this specific CD, I could mention the Tallis Scholars: they are well-known enough to get a mention; but the more usual approach is to name the conductor (Peter Phillips). It isn’t hard-and-fast as to how you answer that question, but the point is to distinguish this recording of the Western Wind Mass from another you might own -so the ‘conductor/main performer’ answer should be such as to make that easily do-able.

When you press [Enter] on the last of these prompts, this happens:

Here, you are told (in red) that a directory has been created to house the tracks you’re about to rip. Note that the answers you gave to the earlier questions govern or control the naming of this directory structure. It’s basically $HOME/Music/Composer/Genre/Composition (Conductor), so you now see the relevance of putting in an appropriately-distinguishing conductor/main performer name earlier on.

Next, you are asked a series of questions, the first of which is perhaps the most important and requires the most care to get right. You see it in the screenshot above, but here it is again:

To rip only part of a CD, specify a track number (or range) now; or press Enter to rip entire CD :

If the CD I was ripping contained just one work, I’d rip the whole thing and thus just press [Enter] here. But on this CD, although it contains 12 tracks, I only want to rip tracks 1 to 4, those comprising the Western Wind Mass by John Tavener. So my correct response to this question is to type:


That’s how you specify contiguous ranges of track numbers (and before you ask: you’re not allowed to do non-contiguous ranges!): don’t leave spaces anywhere in between those typed characters. You can not specify a comma-separated list of tracks (if you do, only the first is ripped). Single tracks would be ripped by typing in just a single number, of course.

Once you’ve said what tracks to rip, you could just press [Enter] to respond to all the other questions you’ll see at this point: the defaults for each are shown as capital letters in brackets after each question and are usually quite safe to take. There is a good reason why you wouldn’t do this for the second question shown (the one about providing a track offset) -but I’ll explain that in just a moment. For now, I just accept all the defaults for those other questions and this happens:

Here, you see the CD Paranoia program ripping the things it’s been asked to do, using the read offset CCDR worked out for your CD drive earlier on. At this point, CCDR has basically handed over control to the CD Paranoia program, so what is displayed at this point is entirely at CD Paranoia’s discretion. It can be a little hard to work out what all the symbols displayed mean! Your best bet is to read the CD Paranoia manual at this point, especially the section on the progress bar display.

The short version is that you want to see output that looks like this:

(== PROGRESS == [                              | 035514 00 ] == :^D * ==)

The empty space on the left (after the word PROGRESS) indicates an error-free run. The :^D symbol on the far-right is also a good sign: it means CD Paranoia ripped that track without encountering a single error. If you start seeing symbols such as : -( or, worse, ;-( then you’re probably ripping from a defective CD and the resulting digital audio track will sound correspondingly poor!

Anyway, if all goes accordingly to plan, CCDR will conclude by looking like this:

…which shows you that everything went well, the ripped music tracks were successfully converted to FLAC and an internal check of the FLAC indicated no problems.

At this point, you can go check what the ripper has achieved: open a file manager and browse to the directory structure you were told about before:

You’ll see the four tracks as requested, plus a text file log which contains a summary of what was done and the overall results:

  Classical CD Ripper Log - Version 2.00                               
  Tuesday, 11-June-2019 15:52 

  Using Cdparanoia version: cdparanoia III release 10.2 (September 11, 2008)
  with CD/DVD: /dev/sr1 (DH-16AES), using a drive offset of 6.

  Flac internal consistency check:
  track01.flac -> OK
  track02.flac -> OK
  track03.flac -> OK
  track04.flac -> OK

  Computed MD5 hashes for audio content:
  track01.flac -> MD5=1f06351acf4bac40cd153e5b4f07f5be
  track02.flac -> MD5=611a2aaf0845e57325136f001bfb11eb
  track03.flac -> MD5=6867239d929e7c4eee3c3cd6d1346f70
  track04.flac -> MD5=775b42de409303d0975f67d780324474

  Rip took 188 seconds to complete.

You might want to open one of those ripped tracks up in a graphical tagging program, too, such as EasyTag:

You will note that CCDR has successfully placed the information you typed in into the various tags, which EasyTag has no problem reading. Those tags are obviously not complete: the Comment tag, for example, uses the Conductor name provided to start things off, but at some point, you’ll probably want to mention the Tallis Scholars as the guys (and gals) doing the actual singing! The track Title tag is also a bit feeble, merely being a wordy version of the file’s name. On the other hand, Album, Composer, Artist and Track Number tags should be in place in good order and requiring no further refinement. Note that CCDR doesn’t, by deliberate design, create tags for Album Artist or Original Artist, since those make no sense in a Classical Music environment!

If you wanted to tidy these initial tags up (and perhaps supply some Album Art), you could of course do it in a GUI tool like EasyTag, but you can equally well point our very own Classical CD Tagger (CCDT) at your freshly-minted audio tracks to achieve exactly the same thing.

(Incidentally: I am all-too-well-aware of the fact that I cannot reliably distinguish between John Tavener (1944-2013) and John Taverner (1490-1545)! CCDR cannot prevent you from making stupid typos, either!!)

4.2 Second and Subsequent Runs

So that’s Composition #1 on this CD ripped… what about the others? Well, you can just re-run CCDR again and have a go at the other tracks on the CD. When you run CCDR a second or subsequent time, it will remember the answers you gave the last time you ran it, so some of the prompts will look a bit different. For example:

This time, the program remembers that I used /dev/sr1 last time and offers to re-use the same device. If I wanted to use a different drive, I could answer ‘n’ here, but if I just press [Enter] or type ‘y’ (or ‘Y’), the old device and its offset will be re-used. This means that on this second run of the program, we immediately jump to the ‘what is this recording of and who is it by’ questions:

Note here how CCDR remembers that the last rips it did were for a piece by John Taverner. If I simply pressed [Enter] here, that would be taken as my response to the ‘Who composed this?’ question. This makes it very easy to rip multiple works on the one CD by the same composer: you just press [Enter] at this point each time CCDR is run, and the same composer name will be remembered throughout.

On this occasion, of course, I don’t want the old composer’s name remembered: I’m going to rip tracks 5 to 8, which are by Christopher Tye. No matter: just type that name in instead:

So here you see me stepping through the same questions as before -only this time, I can just press [Enter] to answer all of them, since the composition name, conductor, recording date and genre are all the same as previously. So, apart from supplying a new composer’s name when prompted, I can just accept everything CCDR ‘remembers’ from my previous run, which makes stepping through things on second and subsequent runs very quick and easy.

At this point, of course, you get asked what tracks to rip and so on, as before. Naturally, as I am only interested, this second time around, in ripping tracks 5 to 8, I type in “5-8” as my track range, pretty much as I did earlier.

But it’s the next question where things get a bit more interesting! One of the rules of classical musical tagging is that every “work” must start with its own ‘track 1’. That is, Christopher Tye’s “Gloria” from his Western Wind Mass shouldn’t be called ‘track 5’ just because it happens to be the fifth track on the CD. It was the first ‘movement’ of his mass when he wrote it, and it ought to be labelled “track 1” for this new rip, too. So, that’s why you see me type “-4” in the previous screenshot. It’s an instruction to CCDR to subtract 4 from whatever physical track number it is dealing with, so that it ends up producing a differently-numbered digital music file.

In this case, track 5 would end up labelled as track 1; track 6 as track 2; and so on. These new track 1s, 2s and 3s won’t over-write John Taverner’s previously-ripped track 1, 2 and 3 of course -because CCDR rips new tracks to a directory structure that has the composer and ‘work’ name in it.

So, once CD Paranoia has finished doing its ripping work, you’ll see something like this:

Note that CD Paranoia created tracks called “track06.cdda.wav”, “track07.cdda.wav” and so on, but CCDR then cgoes on to check tracks “track02.flac”, “track03.flac” and so on for internal consistency.

The track numbering offset is a nice way of achieving ‘everything starts at 1’ rips!

Of course, it works the other way around too. Suppose you are ripping a 2-disc Opera Set. Disk 1 of Rigoletto (say) ends at track 15; Disk 2 then starts at track 1… except that, really, that second track 1 should be numbered track 16. And Disk 2’s track 2 should be numbered track 17 …and so on. In that case, when you rip Disk 1, you supply no track offset at all; but when you then rip Disk 2, you supply a track offset of “15” -meaning that 15 is added to the physical track number when creating the digital music file’s tags and file names.

Note that if you are wanting to lower the physical track number (as in my Christopher Tye example), you supply the track number as a negative number (e.g., -4). But if you want to increase the physical track number (as in my Rigoletto example) you just type in the number (e.g, 15). You don’t type in “+15”, for example: the plus sign would actually generate an error if it were included.

Hopefully, you can see that a third run of CCDR would be very simple to complete the ripping of this Tallis Scholars CD: you’d change the composer name (to ‘John Sheppard’); you’d accept all other names from the previous run; you’d specify to rip tracks 9 to 12 (9-12), but apply an offset of -8 (so track 9 becomes track 1, and so on). Since it’s the third and last work on this particular CD, I think I’d also this time specify to eject the CD at the end of the run:

And at the end of that CCDR run, that’s the job done. Three separate digital works now exist on your hard drive, and the CD is ready to be put back in its jewel case:

My ripping isn’t quite finished until I’ve added Album Art, proper track titles and further performer details -but that’s a simply job for the Classical CD Tagger!


A list of common questions and answers about the software can be found here.


CCDR was devised and written by Howard Rogers (


CCDR is copyright © Howard Rogers 2019, but is made available freely under the GPL v2.0 only. That license may be downloaded here.

Bugs Tracking, Feature Requests, Comments

There is no formal mechanism for reporting and tracking bugs, feature requests or general comments. But you are very welcome to email your comments to