You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.4 KiB
84 lines
3.4 KiB
|
|
Sound extraction for CD-DA burning from .WAV audio file format |
|
|
|
Using information and text snippets |
|
from https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ |
|
in may 2013. The link is now dead. An apparent copy of the page |
|
is 2017 at: http://soundfile.sapp.org/doc/WaveFormat/ |
|
from https://en.wikipedia.org/wiki/WAV |
|
|
|
For libburnia-project.org by Thomas Schmitt <scdbackup@gmx.net> |
|
December 2017 |
|
|
|
|
|
The WAVE file format is an application of the Microsoft RIFF container format |
|
for multimedia files. A RIFF file consists of Chunks which contain Subchunks. |
|
The Chunks form a linked list within the file, the Subchunks form a linked |
|
list inside their Chunk. |
|
All numbers are stored in little-endian byte order. |
|
|
|
A .WAV file consists at least of one Chunk with id "RIFF", which contains |
|
one Subchunk with id "fmt " and one with id "data": |
|
|
|
Offset Size Name Description |
|
|
|
0 4 ChunkID Contains the letters "RIFF" |
|
4 4 ChunkSize The size of the rest of the chunk following |
|
this field. I.e. the two fields ChunkID and |
|
ChunkSize are not included in this count. |
|
8 4 Format Contains the letters "WAVE" |
|
|
|
|
|
The "fmt " subchunk describes the sound data's format: |
|
|
|
Offset Size Name Description |
|
|
|
0 4 Subchunk1ID Contains the letters "fmt " |
|
|
|
4 4 Subchunk1Size The size of the rest of the Subchunk following |
|
this field. I.e. Subchunk1ID and Subchunk1Size |
|
are not included in this count. |
|
8 2 AudioFormat PCM = 1 (i.e. Linear quantization) |
|
Values other than 1 indicate some |
|
form of compression. |
|
10 2 NumChannels Mono = 1, Stereo = 2, etc. |
|
12 4 SampleRate 8000, 44100, etc. |
|
16 4 ByteRate == SampleRate * NumChannels * BitsPerSample/8 |
|
20 2 BlockAlign == NumChannels * BitsPerSample/8 |
|
The number of bytes for one sample including |
|
all channels. |
|
22 2 BitsPerSample 8 bits = 8, 16 bits = 16, etc. |
|
More data may follow in this Subchunk if AudioFormat is not PCM. |
|
|
|
|
|
The "data" subchunk contains the size of the data and the actual sound: |
|
|
|
Offset Size Name Description |
|
|
|
0 4 Subchunk2ID Contains the letters "data" |
|
|
|
4 4 Subchunk2Size == NumSamples * NumChannels * BitsPerSample/8 |
|
The number of audio data bytes. |
|
8 * Data The audio data bytes. |
|
|
|
|
|
CD-DA prescribes these "fmt " parameters: |
|
AudioFormat == 1 |
|
SampleRate == 44100 |
|
BitsPerSample == 16 |
|
NumChannels == 2 (stereo) |
|
(little-endian byte order) |
|
|
|
If matching parameters are given in the .WAV file, one can directly use the |
|
data bytes of Subchunk "data" as payload for burning a CD-DA track. |
|
|
|
|
|
Above simple form can be expanded by other Chunks or Subchunks of Chunk "RIFF". |
|
A .wav file appeared which beared a Subchunk "LIST" inside Chunk "RIFF". |
|
Wikipedia mentions Chunks "INFO", "CSET", "JUNK", "PAD ". |
|
|
|
Therefore one should expect such Chunks before Chunk "RIFF" and Subchunks |
|
other than "fmt " and "data" inside the "RIFF" Chunk. |
|
Multiple Chunks "RIFF" and Subchunks "fmt " or "data" per file have not been |
|
seen yet. They would make extraction more cumbersome. |
|
|
|
|