0

could someone provide me a link to source code (preferably C/C++) of a simple WAV 16-bit to 8-bit (and back if possible) converter? I have basic knowledge of C++ and I need to have a resource to understand wav writing and converting values for my new project. At this moment I have a lecture about RIFF chunks structure.

Also any formulas for converting values between different bit depths (also these un standard) appreciated...

I'll prefer it to be simple and command line so I can edit it with notepad and easily compile.

Thanks in advance!

Paul Roub
  • 36,322
  • 27
  • 84
  • 93
emha
  • 37
  • 2
  • 6

1 Answers1

2

For reading and writing WAV files have a look at the specification:
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

For converting between 8 and 16 bit you just need to divide or multiply by 256.
For example (converting from 16 to 8 bit in C):

  • You open the 16 bit file and the (not yet existent) 8 bit file using fopen().
  • You read the beginning of the 16 bit file and write the beginning of the 8 bit file according to the specification.
  • Then you do the following for each sample:
    int sample = 0;
    // read 2 bytes (= 16 bits) from the 16 bit file into sample:
    fread (&sample, 2, 1, wav_file_16bit);
    sample /= 256; // divide sample by 256
    // write 1 byte (= 8 bits) to the 8 bit file:
    fwrite (&sample, 1, 1, wav_file_8bit);
  • Don't forget to close your files.

If you need more specific information please ask.

eyelash
  • 3,197
  • 25
  • 33