cd_read_side.jpg (8K)

Chip's CD Media Resource Center:
CD-DA (Digital Audio) 5

Image from Disctronics

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 Lead-in, Program, and Lead-out 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 better-approximates 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:

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);
    }

Last Updated Monday October 15, 2001 17:58:11 PDT