 |
*.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 | data | byte-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 | size | representation |
.l | 4 bytes | A little-endian coded long word. |
.w | 2 bytes | A little-endian coded short word. |
.s | n (even) bytes | A null ended string. padded with a null char in order to have an even size. |
... | n bytes | Raw 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 | data | byte-representation | comment |
chunk | .l | "able" | 0x61 0x62 0x6c 0x65 | chunk-id |
.l | 4 | 0x04 0x00 0x00 0x00 | chunk-size |
.l | 1.2.0.23 | 0x17 0x00 0x02 0x01 | version number |
chunk | .l | "gprm" | 0x67 0x70 0x72 0x6d | chunk-id |
.l | 4 | 0x04 0x00 0x00 0x00 | chunk-size |
.w | 140 | 0x8c 0x00 | initial bpm |
.w | 0 | 0x00 0x00 | initial pattern |
|
|
|
 |
list of .grov format chunks : |
|
[grov] | general file container |
|
[able] | ability of creator |
[gprm] | general 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 | description | data | rev |
.l | chunk ID | "grov" | 1.2.0.23 |
.l | chunk 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 | description | data | rev |
.l | chunk ID | "able" | 1.2.0.23 |
.l | chunk size | | |
.l | version 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 | description | data | rev |
.l | chunk ID | "gprm" | 1.2.0.23 |
.l | chunk size | | |
.w | initial bpm. | | 1.2.0.23 |
.w | initial number of rythmic pattern. | | 1.2.0.23 |
|
|
| back to chunk list |
|
[delp] |
delay parameters : |
| Contains the initial delay parameters.
|
|
|
size | description | data | rev |
.l | chunk ID | "delp" | 1.2.0.23 |
.l | chunk size | | |
.w | initial decay multiplicator. | | 1.2.0.23 |
.w | initial 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 | description | data | rev |
.l | chunk ID | "sdst" | 1.2.0.23 |
.l | chunk size | | |
repeated n times until end of chunk. | .w | the voice number. | 0...n | 1.2.0.23 |
.w | filename length (padded to an even value). | | 1.2.0.23 |
.s | filename. | | 1.2.0.23 |
.w | main output level. | | 1.2.0.23 |
.w | panoramic. | | 1.2.0.23 |
.w | first mixer (delay0). | | 1.2.0.23 |
.w | second 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 | description | data | rev |
.l | chunk ID | "rptn" | 1.2.0.23 |
.l | chunk 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 |
.w | pattern number. | 0...n | 1.2.0.23 |
.w | initial 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 | description | data | rev |
.l | chunk ID | "aptn" | 1.2.0.23 |
.l | chunk size | | |
.w | (maxpatternrow) number maximum of rows of this pattern. | | 1.2.0.23 |
.w | pattern number. | 0...n | 1.2.0.23 |
.w | initial 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 | description | data | rev |
.l | chunk ID | "aprm" | 1.2.0.23 |
.l | chunk size | | |
.w | analogic voice number. | 0...n | 1.2.0.23 |
.w | no of initial pattern to play. | | 1.2.0.23 |
.w | starting cut frequency index. | 0-256 | 1.2.0.23 |
.w | ending cut frequency index. | 0-256 | 1.2.0.23 |
.w | initial resonance level. | 0-256 | 1.2.0.23 |
.w | initial decay multiplicator. | | 1.2.0.23 |
.w | main output level. | | 1.2.0.23 |
.w | panoramic. | | 1.2.0.23 |
.w | first mixer (delay0). | | 1.2.0.23 |
.w | second 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 | description | data | rev |
.l | chunk ID | "fptn" | 1.2.0.23 |
.l | chunk size | | |
.w | (maxpatternrow) number maximum of rows of this pattern. | | 1.2.0.23 |
.w | pattern number. | 0...n | 1.2.0.23 |
.w | initial 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 | description | data | rev |
.l | chunk ID | "aprm" | 1.2.0.23 |
.l | chunk size | | |
.w | dynamic filter number. | 0...n | 1.2.0.23 |
.w | no of initial pattern to play. | | 1.2.0.23 |
.w | starting cut frequency index. | 0-256 | 1.2.0.23 |
.w | ending cut frequency index. | 0-256 | 1.2.0.23 |
.w | initial resonance level. | 0-256 | 1.2.0.23 |
.w | initial decay multiplicator. | | 1.2.0.23 |
.w | main output level. | | 1.2.0.23 |
.w | panoramic. | | 1.2.0.23 |
.w | first mixer (delay0). | | 1.2.0.23 |
.w | second 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 | description | data | rev |
.l | chunk ID | "void" | 1.2.0.23 |
.l | chunk size | | |
.l | a long number (4 bytes). | | 1.2.0.23 |
.w | a short number (2 bytes). | | 1.2.0.23 |
|
|
|
| Next :
Using groovit's controls. |
 |