- making accurate and groovy sound/noise.


*.grov file format definition.
  This page describes the groovit songs file format at revision 1.2.0.23.
 
General principles :
  Groovit files consist in a succession of chunks.
Each chunk consists in a succession of datas in that order :
  • chunk identifier :
    4 bytes that identify the chunk, usually those bytes are ASCII chars that abbreviate the chunk name (note that this is not a null-ended string), for example:

    size databyte-representation
    .l"grov"0x67 0x72 0x6f 0x76

  • chunk size :
    Chunk size coded as a little-endian long word (4 bytes). This data is usefull for checking if the chunk is shorted or if there are extra datas at the end of chunk, in which case they must be ignored. It is also useful in order to skip unknown chunks.

  • datas :
    Then the properly-said chunk's datas follows. In next chapters, their size and nature are coded according to this :

    code sizerepresentation
    .l4 bytesA little-endian coded long word.
    .w2 bytesA little-endian coded short word.
    .sn (even) bytesA null ended string. padded with a null char in order to have an even size.
    ...n bytesRaw datas, usually RLE-like compressed. The size is given in other chunk field or must be read until end of chunk.

  • example :
    here two chunks are shown, one able chunk and one gprm chunk :

     size databyte-representationcomment
    chunk.l"able"0x61 0x62 0x6c 0x65chunk-id
    .l40x04 0x00 0x00 0x00chunk-size
    .l1.2.0.230x17 0x00 0x02 0x01version number
    chunk.l"gprm"0x67 0x70 0x72 0x6dchunk-id
    .l40x04 0x00 0x00 0x00chunk-size
    .w1400x8c 0x00initial bpm
    .w00x00 0x00initial pattern

 
list of .grov format chunks :
 
[grov]general file container
[able]ability of creator
[gprm]general parameters
[delp]delay parameters
[sdst]sample distribution
[rptn]rythms (samples) patterns
[aptn]analogic voice pattern
[aprm]analogic voice parameters
[fptn]dynamic filter pattern
[fprm]dynamic filter parameters
[void]example of void chunk
 
 
[grov]  general file container :
 Any .grov files always start with this chunk that contains every other chunks. Thus, the chunk length is the complete file and may be used to detect corrupted files. Any data outside this chunk scope should be ignored, regarding groovit.
 
 
size descriptiondatarev
.lchunk ID"grov"1.2.0.23
.lchunk size  
...chunks ...  
...... chunks  
 back to chunk list
 
[able]  ability of creator :
 This chunk, that should precede any others, contains the ability description that are recommended or mandatory for rendering this file. For instance, only the version ID of the creator is used. Usefull data could be add later here.
 
 
size descriptiondatarev
.lchunk ID"able"1.2.0.23
.lchunk size  
.lversion number of creator
Major.b
Minor.b
Sub1.b
Sub2.b
1.2.0.23
 back to chunk list
 
[gprm]  general parameters :
 This one contains general and global parameters. Most of them are attached to the menuboard module.
 
 
size descriptiondatarev
.lchunk ID"gprm"1.2.0.23
.lchunk size  
.winitial bpm. 1.2.0.23
.winitial number of rythmic pattern. 1.2.0.23
 back to chunk list
 
[delp]  delay parameters :
 Contains the initial delay parameters.
 
 
size descriptiondatarev
.lchunk ID"delp"1.2.0.23
.lchunk size  
.winitial decay multiplicator. 1.2.0.23
.winitial delay length (in tickBPM). 1.2.0.23
 back to chunk list
 
[sdst]  sample distribution :
 Here are defined the samples files to be loaded and their initial associated parameters.
 
 
 size descriptiondatarev
.lchunk ID"sdst"1.2.0.23
.lchunk size  
repeated

n times

until end

of chunk.

.wthe voice number.0...n1.2.0.23
.wfilename length (padded to an even value). 1.2.0.23
.sfilename. 1.2.0.23
.wmain output level. 1.2.0.23
.wpanoramic. 1.2.0.23
.wfirst mixer (delay0). 1.2.0.23
.wsecond mixer (dy-filter0). 1.2.0.23
 back to chunk list
 
[rptn]  rythms (samples) patterns :
 That chunk occurs as many times as there are non-empty defined rythm sample patterns.
 
 
  size descriptiondatarev
.lchunk ID"rptn"1.2.0.23
.lchunk size  
.w(maxsample) number of voices (samples) used in this pattern. 1.2.0.23
.w(maxpatternrow) number maximum of rows of this pattern. 1.2.0.23
.wpattern number.0...n1.2.0.23
.winitial number of rendered rows (there might have some data out of this number). 1.2.0.23
repeated (maxsample) times. ...compressed datas, up to the number maximum of rows of this pattern. eg : (maxpatternrow) decompressed bytes 1.2.0.23
 back to chunk list
 
[aptn]  analogic voice pattern :
 That chunk occurs as many times as there are non-empty defined analogic voice patterns.
 
 
size descriptiondatarev
.lchunk ID"aptn"1.2.0.23
.lchunk size  
.w(maxpatternrow) number maximum of rows of this pattern. 1.2.0.23
.wpattern number.0...n1.2.0.23
.winitial number of rendered rows (there might have some data out of this number). 1.2.0.23
...compressed datas, up to the number maximum of rows of this pattern. eg : (maxpatternrow) decompressed bytes 1.2.0.23
 back to chunk list
 
[aprm]  analogic voice parameters :
 This chunk is present in the file as many times as there are analogic voices to be rendered. It contains the initial analogic voice parameters.
 
 
size descriptiondatarev
.lchunk ID"aprm"1.2.0.23
.lchunk size  
.wanalogic voice number.0...n1.2.0.23
.wno of initial pattern to play. 1.2.0.23
.wstarting cut frequency index.0-2561.2.0.23
.wending cut frequency index.0-2561.2.0.23
.winitial resonance level.0-2561.2.0.23
.winitial decay multiplicator. 1.2.0.23
.wmain output level. 1.2.0.23
.wpanoramic. 1.2.0.23
.wfirst mixer (delay0). 1.2.0.23
.wsecond mixer (dy-filter0). 1.2.0.23
 back to chunk list
 
[fptn]  dynamic filter pattern :
 That chunk occurs as many times as there are non-empty defined dynamic filter patterns.
 
 
size descriptiondatarev
.lchunk ID"fptn"1.2.0.23
.lchunk size  
.w(maxpatternrow) number maximum of rows of this pattern. 1.2.0.23
.wpattern number.0...n1.2.0.23
.winitial number of rendered rows (there might have some data out of this number). 1.2.0.23
...compressed datas, up to the number maximum of rows of this pattern. eg : (maxpatternrow) decompressed bytes 1.2.0.23
 back to chunk list
 
[fprm]  dynamic filter parameters :
 This chunk is present in the file as many times as there are dynamic filters to be rendered. It contains the initial dynamic filters parameters.
 
 
size descriptiondatarev
.lchunk ID"aprm"1.2.0.23
.lchunk size  
.wdynamic filter number.0...n1.2.0.23
.wno of initial pattern to play. 1.2.0.23
.wstarting cut frequency index.0-2561.2.0.23
.wending cut frequency index.0-2561.2.0.23
.winitial resonance level.0-2561.2.0.23
.winitial decay multiplicator. 1.2.0.23
.wmain output level. 1.2.0.23
.wpanoramic. 1.2.0.23
.wfirst mixer (delay0). 1.2.0.23
.wsecond mixer (dy-filter0). 1.2.0.23
 back to chunk list
 
[void]  example of void chunk :
 This chunk is given here as an example.
 
 
size descriptiondatarev
.lchunk ID"void"1.2.0.23
.lchunk size  
.la long number (4 bytes). 1.2.0.23
.wa short number (2 bytes). 1.2.0.23
 
 Next : Using groovit's controls. 

$Revision: 1.2 $ - last update : $Date: 2003/03/19 16:45:47 $.