3 PSX VAG-Packer, hacked by bITmASTER@bigfoot.com
8 /* Block interleave figured out by Antti Huovilainen. */
12 $ dd if=/path/to/sotc/dvd/XAD \
13 | ./adpcm | sox -t raw -r 22050 -s -w -c 2 - -t ossdsp /dev/dsp
19 static const double f
[5][2] = { { 0.0, 0.0 },
21 { 115.0 / 64.0, -52.0 / 64.0 },
22 { 98.0 / 64.0, -55.0 / 64.0 },
23 { 122.0 / 64.0, -60.0 / 64.0 } };
27 int predict_nr
, shift_factor
, flags
;
36 } ctxs
[2] = {0}, *ctx
= ctxs
;
37 signed short int left
[28*64], right
[28*64];
38 signed short int *chan
= left
;
44 if (fread (data
, 16, 1, stdin
) != 1) {
49 if (data
[1] == 7) break;
52 shift_factor
= predict_nr
& 0xf;
55 for (i
= 0; i
< 28; i
+= 2) {
60 samples
[i
] = (double) (s
>> shift_factor
);
64 samples
[i
+1] = (double) (s
>> shift_factor
);
67 for (i
= 0; i
< 28; i
++) {
68 samples
[i
] += ctx
->s_1
* f
[predict_nr
][0] + ctx
->s_2
* f
[predict_nr
][1];
70 ctx
->s_1
= samples
[i
];
71 d
= (int) (samples
[i
] + 0.5);
72 chan
[i
+ block
*28] = d
;
85 for (i
= 0; i
< 28*64; ++i
) {
86 fputc (left
[i
] >> 8, stdout
);
87 fputc (left
[i
], stdout
);
88 fputc (right
[i
] >> 8, stdout
);
89 fputc (right
[i
], stdout
);