2021-08-14 14:53:39 +02:00

57 lines
1.8 KiB
Markdown

# VAG files
> VAG is the PlayStation single waveform data format for ADPCM-encoded data of sampled sounds, such as
piano sounds, explosions, and music. The typical extension in DOS is “.VAG”.
See [FileFormat47.pdf](http://psx.arthus.net/sdk/Psy-Q/DOCS/FileFormat47.pdf), p.209
## Audio to VAG conversion
We have to convert the audio file to RAW data first :
```bash
ffmpeg -i input.mp3 -f s16le -ac 1 -ar 44100 tmp.dat
```
then use [`wav2vag`](https://github.com/ColdSauce/psxsdk/blob/master/tools/wav2vag.c) to convert the data, making sure the `-freq=` parameter matches the `-ar` value used above :
```bash
wav2vag tmp.dat output.vag -sraw16 -freq=44100
```
## VAGedit
You can find a graphical editor in the [PsyQ sdk](http://psx.arthus.net/sdk/Psy-Q/PSYQ_SDK.zip) named `VAGEDIT.exe`.
## C VAG structure
Here is a structure definition to access the VAG header :
See [FileFormat47.pdf](http://psx.arthus.net/sdk/Psy-Q/DOCS/FileFormat47.pdf), p.209 for full description.
```c
typedef struct VAGhdr { // All the values in this header must be big endian
char id[4]; // VAGp 4 bytes -> 1 char * 4
unsigned int version; // 4 bytes
unsigned int reserved; // 4 bytes
unsigned int dataSize; // (in bytes) 4 bytes
unsigned int samplingFrequency; // 4 bytes
char reserved2[12]; // 12 bytes -> 1 char * 12
char name[16]; // 16 bytes -> 1 char * 16
// Waveform data after that
} VAGhdr;
```
## VAG & SPU Docs
See
* libformat47.pdf p.209
* libover47.pdf, p.271
* libref47.pdf, p.980
* [http://psx.arthus.net/code/VAG/](http://psx.arthus.net/code/VAG)
## Ressources
* [wav2vag utility](https://github.com/ColdSauce/psxsdk/blob/master/tools/wav2vag.c)