mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-16 10:04:28 +02:00
fix soundtracks remapping for web build, double precise for stb_vorbis LUTs initialization
This commit is contained in:
@@ -886,26 +886,28 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8 remapTrack(Version version, uint8 track) {
|
uint8 remapTrack(Version version, uint8 track) {
|
||||||
static const uint8 TR2_TRACK_MAPPING[] = {
|
|
||||||
2, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19, 20,
|
|
||||||
21, 22, 23, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
|
||||||
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61
|
|
||||||
};
|
|
||||||
|
|
||||||
if (version & VER_TR2) {
|
|
||||||
ASSERT(track < COUNT(TR2_TRACK_MAPPING));
|
|
||||||
return TR2_TRACK_MAPPING[track];
|
|
||||||
}
|
|
||||||
static const uint8 TR1_TRACK_MAPPING[] = {
|
static const uint8 TR1_TRACK_MAPPING[] = {
|
||||||
2, 2, 2, 11, 12, 3, 13, 14, 15, 16, 17, 18, 19, 60, 20, 21, 22, 23, 24, 25, 26, 27,
|
2, 2, 2, 11, 12, 3, 13, 14, 15, 16, 17, 18, 19, 60, 20, 21, 22, 23, 24, 25, 26, 27,
|
||||||
7, 8, 9, 10, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
|
7, 8, 9, 10, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
|
||||||
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 28, 4, 5, 6
|
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 28, 4, 5, 6
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint8 TR2_TRACK_MAPPING[] = {
|
||||||
|
2, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 19, 20,
|
||||||
|
21, 22, 23, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
|
||||||
|
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61
|
||||||
|
};
|
||||||
|
|
||||||
if (version & VER_TR1) {
|
if (version & VER_TR1) {
|
||||||
ASSERT(track < COUNT(TR1_TRACK_MAPPING));
|
ASSERT(track < COUNT(TR1_TRACK_MAPPING));
|
||||||
return TR1_TRACK_MAPPING[track];
|
return TR1_TRACK_MAPPING[track];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (version & VER_TR2) {
|
||||||
|
ASSERT(track < COUNT(TR2_TRACK_MAPPING));
|
||||||
|
return TR2_TRACK_MAPPING[track];
|
||||||
|
}
|
||||||
|
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -972,10 +974,12 @@ namespace TR {
|
|||||||
case VER_TR1_PC :
|
case VER_TR1_PC :
|
||||||
case VER_TR1_PSX :
|
case VER_TR1_PSX :
|
||||||
sprintf(title, "audio/1/track_%02d.ogg", track);
|
sprintf(title, "audio/1/track_%02d.ogg", track);
|
||||||
|
#ifndef _OS_WEB
|
||||||
if (Stream::existsContent(title))
|
if (Stream::existsContent(title))
|
||||||
break;
|
break;
|
||||||
track = remapTrack(version, track);
|
track = remapTrack(version, track);
|
||||||
sprintf(title, "audio/1/%03d.ogg", track);
|
sprintf(title, "audio/1/%03d.ogg", track);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case VER_TR2_PC :
|
case VER_TR2_PC :
|
||||||
case VER_TR2_PSX :
|
case VER_TR2_PSX :
|
||||||
|
@@ -1219,16 +1219,22 @@ static int lookup1_values(int entries, int dim)
|
|||||||
|
|
||||||
#define sinf(x) vfpu_sinf(x)
|
#define sinf(x) vfpu_sinf(x)
|
||||||
#define cosf(x) vfpu_cosf(x)
|
#define cosf(x) vfpu_cosf(x)
|
||||||
#define sincos(a, s, c) vfpu_sincos(a, s, c)
|
|
||||||
|
void sincosd(double x, double *s, double *c) {
|
||||||
|
float fs, fc;
|
||||||
|
vfpu_sincos((float)x, fs, fc);
|
||||||
|
*s = (double)fs;
|
||||||
|
*c = (double)fc;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static void sincos(float r, float *s, float *c) {
|
void sincosd(double x, double *s, double *c) {
|
||||||
*s = sinf(r);
|
*s = sin(x);
|
||||||
*c = cosf(r);
|
*c = cos(x);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define rotate(x, y, s, c) {\
|
#define rotate(x, y, s, c) {\
|
||||||
float t = x*c - y*s;\
|
double t = x*c - y*s;\
|
||||||
y = x*s + y*c;\
|
y = x*s + y*c;\
|
||||||
x = t;\
|
x = t;\
|
||||||
}
|
}
|
||||||
@@ -1238,65 +1244,59 @@ static void compute_twiddle_factors(int n, float *A, float *B, float *C)
|
|||||||
{
|
{
|
||||||
int n4 = n >> 2, n8 = n >> 3;
|
int n4 = n >> 2, n8 = n >> 3;
|
||||||
int k, k2;
|
int k, k2;
|
||||||
#ifdef __MINGW64__
|
|
||||||
double sA, cA, sB, cB, sC, cC;
|
double sA, cA, sB, cB, sC, cC;
|
||||||
double xA, yA, xB, yB, xC, yC;
|
double xA, yA, xB, yB, xC, yC;
|
||||||
#else
|
|
||||||
float sA, cA, sB, cB, sC, cC;
|
|
||||||
float xA, yA, xB, yB, xC, yC;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sincos(4*M_PI/n, &sA, &cA);
|
sincosd(4*M_PI/n, &sA, &cA);
|
||||||
sincos(M_PI/n/2, &sB, &cB);
|
sincosd(M_PI/n/2, &sB, &cB);
|
||||||
sincos(2*M_PI/n, &sC, &cC);
|
sincosd(2*M_PI/n, &sC, &cC);
|
||||||
|
|
||||||
A[0] = xA = 1.0f;
|
xA = 1.0;
|
||||||
A[1] = yA = 0.0f;
|
yA = 0.0;
|
||||||
|
A[0] = 1.0f;
|
||||||
|
A[1] = 0.0f;
|
||||||
xB = cB;
|
xB = cB;
|
||||||
yB = sB;
|
yB = sB;
|
||||||
B[0] = xB * 0.5f;
|
B[0] = (float)(xB * 0.5);
|
||||||
B[1] = yB * 0.5f;
|
B[1] = (float)(yB * 0.5);
|
||||||
rotate(cB, sB, sB, cB);
|
rotate(cB, sB, sB, cB);
|
||||||
|
|
||||||
for (k=1, k2=2; k < n4; ++k,k2+=2) {
|
for (k=1, k2=2; k < n4; ++k,k2+=2) {
|
||||||
rotate(xA, yA, sA, cA);
|
rotate(xA, yA, sA, cA);
|
||||||
A[k2 ] = xA;
|
A[k2 ] = (float) xA;
|
||||||
A[k2+1] = -yA;
|
A[k2+1] = (float)-yA;
|
||||||
rotate(xB, yB, sB, cB);
|
rotate(xB, yB, sB, cB);
|
||||||
B[k2 ] = xB * 0.5f;
|
B[k2 ] = (float)(xB * 0.5);
|
||||||
B[k2+1] = yB * 0.5f;
|
B[k2+1] = (float)(yB * 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
xC = cC;
|
xC = cC;
|
||||||
yC = sC;
|
yC = sC;
|
||||||
C[0] = xC;
|
C[0] = (float) xC;
|
||||||
C[1] = -yC;
|
C[1] = (float)-yC;
|
||||||
|
|
||||||
rotate(cC, sC, sC, cC);
|
rotate(cC, sC, sC, cC);
|
||||||
|
|
||||||
for (k=1, k2=2; k < n8; ++k,k2+=2) {
|
for (k=1, k2=2; k < n8; ++k,k2+=2) {
|
||||||
rotate(xC, yC, sC, cC);
|
rotate(xC, yC, sC, cC);
|
||||||
C[k2 ] = xC;
|
C[k2 ] = (float) xC;
|
||||||
C[k2+1] = -yC;
|
C[k2+1] = (float)-yC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void compute_window(int n, float *window)
|
static void compute_window(int n, float *window)
|
||||||
{
|
{
|
||||||
int n2 = n >> 1, i;
|
int n2 = n >> 1, i;
|
||||||
#ifdef __MINGW64__
|
|
||||||
double s, c, x, y;
|
double s, c, x, y;
|
||||||
#else
|
|
||||||
float s, c, x, y;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
sincos(0.5f / n2 * 0.5f * M_PI, &s, &c);
|
sincosd(0.5f / n2 * 0.5f * M_PI, &s, &c);
|
||||||
x = c;
|
x = c;
|
||||||
y = s;
|
y = s;
|
||||||
rotate(c, s, s, c);
|
rotate(c, s, s, c);
|
||||||
|
|
||||||
for (i=0; i < n2; ++i) {
|
for (i=0; i < n2; ++i) {
|
||||||
window[i] = sinf(0.5f * M_PI * (y * y));
|
window[i] = (float)sin(0.5 * M_PI * (y * y));
|
||||||
rotate(x, y, s, c);
|
rotate(x, y, s, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user