How Long is the Spiral?
While we know that CDs are recorded in a single
continuous spiral, I find it a helpful approximation to
think of the "physical tracks" it as a series of
concentric rings 1.6 microns apart. The usefully recorded
area of an audio CD consists of the Leadin, Program, and
Leadout areas. So the maximum number of physical tracks
in the three areas is
(58.5  23) mm / 1.6 microns = 22,188
I was curious to know the total length of all the
physical tracks, i.e. the length of the entire continuous
spiral of data recorded on a CD. Approximating the
physical tracks by a succession of concentric rings, we
just have to compute and add the circumferences of all
22,188 rings. Being a better programmer than
mathematician, I wrote a little C program to do this. It
betterapproximates the spiral by averaging the
circumference at the starting and ending radii for each
ring (though this makes virtually no difference, only 1
meter in the final result). The results are:

Lead in area: 189 meters

Program area: 5378 meters

Lead out area: 115 meters

Total: 5681 meters
I've read [Disctronics] that the total length
is about 5800 meters. If one includes the outer buffer
zone, out to radius 59mm instead of ending at radius
58.5mm, then the total length is computed as 5797 meters.
I think that's what they did. Interestingly, you often
hear the two figures "22,188 physical tracks" and "5800
meters total length" cited together, but that is
incorrect. There are 22,501 physical tracks in the range
5800 meter length between radii 23 and 59mm.
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535897932
main()
{
double inR = 23 * 1000; // mm to microns
double outR = 58.5 * 1000; // mm to microns
double pitch= 1.6; // microns
int numtrax;
int i;
double grooveLen, len1, len2;
double radius;
numtrax = 1 + floor((outR  inR) / pitch);
printf("CD Groove Length Computer...\n");
printf("Inner radius: %f\n", inR);
printf("Outer radius: %f\n", outR);
printf("Track pitch: %f\n", pitch);
printf("Number of tracks: %d\n", numtrax);
grooveLen = 0.0;
radius = inR;
for (i=1; i <= numtrax; i++) {
// Approximate the spiral by averaging the circumference
// at the starting and ending radii.
len1 = 2 * PI * radius;
len2 = 2 * PI * (radius+pitch);
grooveLen += (len1 + len2) / 2;
radius += pitch;
}
printf("Total track length: %f meters\n", grooveLen/1000000);
}
