--- SDL_mixer-1.2.6/effect_position.c Thu Dec 16 06:20:14 2004 +++ SDL_mixer-1.2.6.patched/effect_position.c Fri Mar 4 09:32:30 2005 @@ -243,18 +243,28 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_f) * args->distance_f) + 128); ptr++; +#ifndef _WIN32 *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_rear_f) * args->distance_f) + 128); ptr++; *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_rear_f) * args->distance_f) + 128); ptr++; +#endif *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->center_f) * args->distance_f) + 128); ptr++; *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->lfe_f) * args->distance_f) + 128); ptr++; +#ifdef _WIN32 + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->left_rear_f) * args->distance_f) + 128); + ptr++; + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->right_rear_f) * args->distance_f) + 128); + ptr++; +#endif } else if (args->room_angle == 90) for (i = 0; i < len; i += sizeof (Uint8) * 6) { @@ -265,12 +275,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_rear_f) * args->distance_f) + 128); ptr++; +#ifndef _WIN32 *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_f) * args->distance_f) + 128); ptr++; *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_rear_f) * args->distance_f) + 128); ptr++; +#endif *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_rear_f) * args->distance_f/2) + 128) + (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) @@ -279,6 +291,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->lfe_f) * args->distance_f) + 128); ptr++; +#ifdef _WIN32 + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->left_f) * args->distance_f) + 128); + ptr++; + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->left_rear_f) * args->distance_f) + 128); + ptr++; +#endif } else if (args->room_angle == 180) for (i = 0; i < len; i += sizeof (Uint8) * 6) { @@ -289,12 +309,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_rear_f) * args->distance_f) + 128); ptr++; +#ifndef _WIN32 *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_f) * args->distance_f) + 128); ptr++; *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_f) * args->distance_f) + 128); ptr++; +#endif *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_rear_f) * args->distance_f/2) + 128) + (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) @@ -303,6 +325,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->lfe_f) * args->distance_f) + 128); ptr++; +#ifdef _WIN32 + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->right_f) * args->distance_f) + 128); + ptr++; + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->left_f) * args->distance_f) + 128); + ptr++; +#endif } else if (args->room_angle == 270) for (i = 0; i < len; i += sizeof (Uint8) * 6) { @@ -313,12 +343,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_f) * args->distance_f) + 128); ptr++; +#ifndef _WIN32 *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_rear_f) * args->distance_f) + 128); ptr++; *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->right_f) * args->distance_f) + 128); ptr++; +#endif *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->left_f) * args->distance_f/2) + 128) + (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) @@ -327,6 +359,14 @@ *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) * args->lfe_f) * args->distance_f) + 128); ptr++; +#ifdef _WIN32 + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->right_rear_f) * args->distance_f) + 128); + ptr++; + *ptr = (Uint8) ((Sint8) ((((float) (Sint8) (*ptr - 128)) + * args->right_f) * args->distance_f) + 128); + ptr++; +#endif } } @@ -487,37 +527,61 @@ case 0: *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; +#ifndef _WIN32 *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; +#endif *ptr = (Sint8)((((float) *ptr) * args->center_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->lfe_f) * args->distance_f); ptr++; +#ifdef _WIN32 + *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; + *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; +#endif break; case 90: *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; +#ifndef _WIN32 *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; +#endif *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f / 2) + (Sint8)((((float) *ptr) * args->right_f) * args->distance_f / 2); ptr++; *ptr = (Sint8)((((float) *ptr) * args->lfe_f) * args->distance_f); ptr++; +#ifdef _WIN32 + *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; + *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; +#endif break; case 180: *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; +#ifndef _WIN32 *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; +#endif *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f / 2) + (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f / 2); ptr++; *ptr = (Sint8)((((float) *ptr) * args->lfe_f) * args->distance_f); ptr++; +#ifdef _WIN32 + *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; + *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; +#endif break; case 270: *ptr = (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f); ptr++; +#ifndef _WIN32 *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; +#endif *ptr = (Sint8)((((float) *ptr) * args->left_f) * args->distance_f / 2) + (Sint8)((((float) *ptr) * args->left_rear_f) * args->distance_f / 2); ptr++; *ptr = (Sint8)((((float) *ptr) * args->lfe_f) * args->distance_f); ptr++; +#ifdef _WIN32 + *ptr = (Sint8)((((float) *ptr) * args->right_rear_f) * args->distance_f); ptr++; + *ptr = (Sint8)((((float) *ptr) * args->right_f) * args->distance_f); ptr++; +#endif break; } } @@ -622,9 +686,9 @@ * args->distance_f) + 32768); Uint16 swapr = (Uint16) ((Sint16) (((float) sampr * args->right_f) * args->distance_f) + 32768); - Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_f) + Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_rear_f) * args->distance_f) + 32768); - Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_f) + Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_rear_f) * args->distance_f) + 32768); switch (args->room_angle) { @@ -664,56 +728,87 @@ for (i = 0; i < len; i += sizeof (Uint16) * 6) { Sint16 sampl = (Sint16) (SDL_SwapLE16(*(ptr+0)) - 32768); Sint16 sampr = (Sint16) (SDL_SwapLE16(*(ptr+1)) - 32768); +#ifndef _WIN32 Sint16 samplr = (Sint16) (SDL_SwapLE16(*(ptr+2)) - 32768); Sint16 samprr = (Sint16) (SDL_SwapLE16(*(ptr+3)) - 32768); Sint16 sampce = (Sint16) (SDL_SwapLE16(*(ptr+4)) - 32768); Sint16 sampwf = (Sint16) (SDL_SwapLE16(*(ptr+5)) - 32768); +#else + Sint16 sampce = (Sint16) (SDL_SwapLE16(*(ptr+2)) - 32768); + Sint16 sampwf = (Sint16) (SDL_SwapLE16(*(ptr+3)) - 32768); + Sint16 samplr = (Sint16) (SDL_SwapLE16(*(ptr+4)) - 32768); + Sint16 samprr = (Sint16) (SDL_SwapLE16(*(ptr+5)) - 32768); +#endif Uint16 swapl = (Uint16) ((Sint16) (((float) sampl * args->left_f) * args->distance_f) + 32768); Uint16 swapr = (Uint16) ((Sint16) (((float) sampr * args->right_f) * args->distance_f) + 32768); - Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_f) + Uint16 swaplr = (Uint16) ((Sint16) (((float) samplr * args->left_rear_f) * args->distance_f) + 32768); - Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_f) + Uint16 swaprr = (Uint16) ((Sint16) (((float) samprr * args->right_rear_f) * args->distance_f) + 32768); - Uint16 swapce = (Uint16) ((Sint16) (((float) sampce * args->left_f) + Uint16 swapce = (Uint16) ((Sint16) (((float) sampce * args->center_f) * args->distance_f) + 32768); - Uint16 swapwf = (Uint16) ((Sint16) (((float) sampwf * args->right_f) + Uint16 swapwf = (Uint16) ((Sint16) (((float) sampwf * args->lfe_f) * args->distance_f) + 32768); switch (args->room_angle) { case 0: *(ptr++) = (Uint16) SDL_SwapLE16(swapl); *(ptr++) = (Uint16) SDL_SwapLE16(swapr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); +#endif *(ptr++) = (Uint16) SDL_SwapLE16(swapce); *(ptr++) = (Uint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); + *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); +#endif break; case 90: *(ptr++) = (Uint16) SDL_SwapLE16(swapr); *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapLE16(swapl); *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); +#endif *(ptr++) = (Uint16) SDL_SwapLE16(swapr)/2 + (Uint16) SDL_SwapLE16(swaprr)/2; *(ptr++) = (Uint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapLE16(swapl); + *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); +#endif break; case 180: *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapLE16(swapr); *(ptr++) = (Uint16) SDL_SwapLE16(swapl); +#endif *(ptr++) = (Uint16) SDL_SwapLE16(swaprr)/2 + (Uint16) SDL_SwapLE16(swaplr)/2; *(ptr++) = (Uint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapLE16(swapr); + *(ptr++) = (Uint16) SDL_SwapLE16(swapl); +#endif break; case 270: *(ptr++) = (Uint16) SDL_SwapLE16(swaplr); *(ptr++) = (Uint16) SDL_SwapLE16(swapl); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); *(ptr++) = (Uint16) SDL_SwapLE16(swapr); +#endif *(ptr++) = (Uint16) SDL_SwapLE16(swapl)/2 + (Uint16) SDL_SwapLE16(swaplr)/2; *(ptr++) = (Uint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapLE16(swaprr); + *(ptr++) = (Uint16) SDL_SwapLE16(swapr); +#endif break; } } @@ -805,6 +900,7 @@ args->left_f) * args->distance_f); Sint16 swapr = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+1))) * args->right_f) * args->distance_f); +#ifndef _WIN32 Sint16 swaplr = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+2))) * args->left_rear_f) * args->distance_f); Sint16 swaprr = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+3))) * @@ -813,38 +909,72 @@ args->center_f) * args->distance_f); Sint16 swapwf = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+5))) * args->lfe_f) * args->distance_f); +#else + Sint16 swapce = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+2))) * + args->center_f) * args->distance_f); + Sint16 swapwf = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+3))) * + args->lfe_f) * args->distance_f); + Sint16 swaplr = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+4))) * + args->left_rear_f) * args->distance_f); + Sint16 swaprr = (Sint16) ((((float) (Sint16) SDL_SwapLE16(*(ptr+5))) * + args->right_rear_f) * args->distance_f); +#endif switch (args->room_angle) { case 0: *(ptr++) = (Sint16) SDL_SwapLE16(swapl); *(ptr++) = (Sint16) SDL_SwapLE16(swapr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); +#endif *(ptr++) = (Sint16) SDL_SwapLE16(swapce); *(ptr++) = (Sint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); + *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); +#endif break; case 90: *(ptr++) = (Sint16) SDL_SwapLE16(swapr); *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapLE16(swapl); *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); +#endif *(ptr++) = (Sint16) SDL_SwapLE16(swapr)/2 + (Sint16) SDL_SwapLE16(swaprr)/2; *(ptr++) = (Sint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapLE16(swapl); + *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); +#endif break; case 180: *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapLE16(swapr); *(ptr++) = (Sint16) SDL_SwapLE16(swapl); +#endif *(ptr++) = (Sint16) SDL_SwapLE16(swaprr)/2 + (Sint16) SDL_SwapLE16(swaplr)/2; *(ptr++) = (Sint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapLE16(swapr); + *(ptr++) = (Sint16) SDL_SwapLE16(swapl); +#endif break; case 270: *(ptr++) = (Sint16) SDL_SwapLE16(swaplr); *(ptr++) = (Sint16) SDL_SwapLE16(swapl); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); *(ptr++) = (Sint16) SDL_SwapLE16(swapr); +#endif *(ptr++) = (Sint16) SDL_SwapLE16(swapl)/2 + (Sint16) SDL_SwapLE16(swaplr)/2; *(ptr++) = (Sint16) SDL_SwapLE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapLE16(swaprr); + *(ptr++) = (Sint16) SDL_SwapLE16(swapr); +#endif break; } } @@ -936,10 +1066,17 @@ for (i = 0; i < len; i += sizeof (Sint16) * 6) { Sint16 sampl = (Sint16) (SDL_SwapBE16(*(ptr+0)) - 32768); Sint16 sampr = (Sint16) (SDL_SwapBE16(*(ptr+1)) - 32768); +#ifndef _WIN32 Sint16 samplr = (Sint16) (SDL_SwapBE16(*(ptr+2)) - 32768); Sint16 samprr = (Sint16) (SDL_SwapBE16(*(ptr+3)) - 32768); Sint16 sampce = (Sint16) (SDL_SwapBE16(*(ptr+4)) - 32768); Sint16 sampwf = (Sint16) (SDL_SwapBE16(*(ptr+5)) - 32768); +#else + Sint16 sampce = (Sint16) (SDL_SwapBE16(*(ptr+2)) - 32768); + Sint16 sampwf = (Sint16) (SDL_SwapBE16(*(ptr+3)) - 32768); + Sint16 samplr = (Sint16) (SDL_SwapBE16(*(ptr+4)) - 32768); + Sint16 samprr = (Sint16) (SDL_SwapBE16(*(ptr+5)) - 32768); +#endif Uint16 swapl = (Uint16) ((Sint16) (((float) sampl * args->left_f) * args->distance_f) + 32768); @@ -958,34 +1095,58 @@ case 0: *(ptr++) = (Uint16) SDL_SwapBE16(swapl); *(ptr++) = (Uint16) SDL_SwapBE16(swapr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); +#endif *(ptr++) = (Uint16) SDL_SwapBE16(swapce); *(ptr++) = (Uint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); + *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); +#endif break; case 90: *(ptr++) = (Uint16) SDL_SwapBE16(swapr); *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapBE16(swapl); *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); +#endif *(ptr++) = (Uint16) SDL_SwapBE16(swapr)/2 + (Uint16) SDL_SwapBE16(swaprr)/2; *(ptr++) = (Uint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapBE16(swapl); + *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); +#endif break; case 180: *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapBE16(swapr); *(ptr++) = (Uint16) SDL_SwapBE16(swapl); +#endif *(ptr++) = (Uint16) SDL_SwapBE16(swaprr)/2 + (Uint16) SDL_SwapBE16(swaplr)/2; *(ptr++) = (Uint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapBE16(swapr); + *(ptr++) = (Uint16) SDL_SwapBE16(swapl); +#endif break; case 270: *(ptr++) = (Uint16) SDL_SwapBE16(swaplr); *(ptr++) = (Uint16) SDL_SwapBE16(swapl); +#ifndef _WIN32 *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); *(ptr++) = (Uint16) SDL_SwapBE16(swapr); +#endif *(ptr++) = (Uint16) SDL_SwapBE16(swapl)/2 + (Uint16) SDL_SwapBE16(swaplr)/2; *(ptr++) = (Uint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Uint16) SDL_SwapBE16(swaprr); + *(ptr++) = (Uint16) SDL_SwapBE16(swapr); +#endif break; } } @@ -1063,6 +1224,7 @@ args->left_f) * args->distance_f); Sint16 swapr = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+1))) * args->right_f) * args->distance_f); +#ifndef _WIN32 Sint16 swaplr = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+2))) * args->left_rear_f) * args->distance_f); Sint16 swaprr = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+3))) * @@ -1071,39 +1233,73 @@ args->center_f) * args->distance_f); Sint16 swapwf = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+5))) * args->lfe_f) * args->distance_f); +#else + Sint16 swapce = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+2))) * + args->center_f) * args->distance_f); + Sint16 swapwf = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+3))) * + args->lfe_f) * args->distance_f); + Sint16 swaplr = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+4))) * + args->left_rear_f) * args->distance_f); + Sint16 swaprr = (Sint16) ((((float) (Sint16) SDL_SwapBE16(*(ptr+5))) * + args->right_rear_f) * args->distance_f); +#endif switch (args->room_angle) { case 0: *(ptr++) = (Sint16) SDL_SwapBE16(swapl); *(ptr++) = (Sint16) SDL_SwapBE16(swapr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); +#endif *(ptr++) = (Sint16) SDL_SwapBE16(swapce); *(ptr++) = (Sint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); + *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); +#endif break; case 90: *(ptr++) = (Sint16) SDL_SwapBE16(swapr); *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapBE16(swapl); *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); +#endif *(ptr++) = (Sint16) SDL_SwapBE16(swapr)/2 + (Sint16) SDL_SwapBE16(swaprr)/2; *(ptr++) = (Sint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapBE16(swapl); + *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); +#endif break; case 180: *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapBE16(swapr); *(ptr++) = (Sint16) SDL_SwapBE16(swapl); +#endif *(ptr++) = (Sint16) SDL_SwapBE16(swaprr)/2 + (Sint16) SDL_SwapBE16(swaplr)/2; *(ptr++) = (Sint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapBE16(swapr); + *(ptr++) = (Sint16) SDL_SwapBE16(swapl); +#endif break; case 270: *(ptr++) = (Sint16) SDL_SwapBE16(swaplr); *(ptr++) = (Sint16) SDL_SwapBE16(swapl); +#ifndef _WIN32 *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); *(ptr++) = (Sint16) SDL_SwapBE16(swapr); +#endif *(ptr++) = (Sint16) SDL_SwapBE16(swapl)/2 + (Sint16) SDL_SwapBE16(swaplr)/2; *(ptr++) = (Sint16) SDL_SwapBE16(swapwf); +#ifdef _WIN32 + *(ptr++) = (Sint16) SDL_SwapBE16(swaprr); + *(ptr++) = (Sint16) SDL_SwapBE16(swapr); +#endif break; } } @@ -1417,12 +1613,16 @@ return(1); if (channels > 2) { + /* left = right = 255 => angle = 0, to unregister effect as when channels = 2 */ /* left = 255 => angle = -90; left = 0 => angle = +89 */ - int angle = (int)left; - angle = 127 - angle; - angle = -angle; - angle = angle * 90 / 128; /* Make it larger for more effect? */ - return( Mix_SetPosition(channel, angle, 0) ); + int angle = 0; + if ((left != 255) || (right != 255)) { + angle = (int)left; + angle = 127 - angle; + angle = -angle; + angle = angle * 90 / 128; /* Make it larger for more effect? */ + } + return( Mix_SetPosition(channel, angle, 0) ); } f = get_position_effect_func(format, channels); @@ -1434,10 +1634,12 @@ return(0); /* it's a no-op; unregister the effect, if it's registered. */ - if ((args->distance_u8 == 255) && (left == 255) && - (right == 255) && (args->in_use)) - { - return(Mix_UnregisterEffect(channel, f)); + if ((args->distance_u8 == 255) && (left == 255) && (right == 255)) { + if (args->in_use) { + return(Mix_UnregisterEffect(channel, f)); + } else { + return(1); + } } args->left_u8 = left; @@ -1474,10 +1676,12 @@ distance = 255 - distance; /* flip it to our scale. */ /* it's a no-op; unregister the effect, if it's registered. */ - if ((distance == 255) && (args->left_u8 == 255) && - (args->right_u8 == 255) && (args->in_use)) - { - return(Mix_UnregisterEffect(channel, f)); + if ((distance == 255) && (args->left_u8 == 255) && (args->right_u8 == 255)) { + if (args->in_use) { + return(Mix_UnregisterEffect(channel, f)); + } else { + return(1); + } } args->distance_u8 = distance; @@ -1513,8 +1717,13 @@ return(0); /* it's a no-op; unregister the effect, if it's registered. */ - if ((!distance) && (!angle) && (args->in_use)) - return(Mix_UnregisterEffect(channel, f)); + if ((!distance) && (!angle)) { + if (args->in_use) { + return(Mix_UnregisterEffect(channel, f)); + } else { + return(1); + } + } if (channels == 2) { @@ -1547,8 +1756,8 @@ args->right_rear_f = ((float) speaker_amplitude[3]) / 255.0f; args->center_u8 = speaker_amplitude[4]; args->center_f = ((float) speaker_amplitude[4]) / 255.0f; - args->lfe_u8 = 255; - args->lfe_f = 255.0f; + args->lfe_u8 = speaker_amplitude[5]; + args->lfe_f = ((float) speaker_amplitude[5]) / 255.0f; args->distance_u8 = distance; args->distance_f = ((float) distance) / 255.0f; args->room_angle = room_angle;