3 changed files with 193 additions and 32 deletions
@ -1 +1 @@ |
|||
#define Cdrskin_timestamP "2017.09.16.105713" |
|||
#define Cdrskin_timestamP "2017.12.31.111507" |
@ -0,0 +1,84 @@ |
|||
|
|||
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. |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue