Aaargh, sorry, %ld vs %d, not %lu vs %u.

While here: fuckery also appears to be afoot in

$ sox -b 16 -n file.wav synth 10 gain -3
$ shorten file.wav
$ shorten -i file.shn
File 'file.shn' contains appended seek tables (revision 4294967295).

That's 2^32 - 1 and I suspect that's not how they number revisions.

        Jan

On Feb 21 18:38:39, h...@stare.cz wrote:
> This is a patch for audio/shorten.
> 
> The utils/mkbshift.c emits bitshift.c
> which is later used in ulaw ancoding/decoding
> - it contains the arrays of ulaw constants.
> 
> However, mkbshift.c prints them as %lu, resulting in e.g.
> 
> schar ulaw_inward[13][256] = {
> {4294967169,4294967170,4294967171,...
> 
> and thousands of lines of warnings from the compiler such as
> 
> ./bitshift.h:16:1399: warning: implicit conversion from 'long' to 'int8_t' 
> (aka 'signed char') changes value from 4294967294 to -2 
> [-Wconstant-conversion]
> 
> Indeed, these are not signed chars. (Luckily, the implicit
> conversion 'fixes' it, so the actual audio ends up OK.)
> 
> Changing the generator to printf %u (as the compiler also suggests)
> makes these go away and results in e.g.
> 
> schar ulaw_inward[13][256] = {
> {-127,-126,-125,...
> 
>       Jan
> 

> Don't print the u-law constants as longs:
> implicit conversion from 'long' to 'int8_t' (aka 'signed char')
> changes value from 4294967294 to -2 [-Wconstant-conversion]
> 
> Index: utils/mkbshift.c
> --- utils/mkbshift.c.orig
> +++ utils/mkbshift.c
> @@ -83,11 +83,11 @@ int main() {
>    for(shift = 0; shift < SHIFTSIZE; shift++) {
>      fprintf(fout, "{");
>      for(i = 0; i < USIZE - 1; i++)
> -      fprintf(fout, "%ld,", forwardmap[shift][i]);
> +      fprintf(fout, "%d,", forwardmap[shift][i]);
>      if(shift != SHIFTSIZE - 1)
> -      fprintf(fout, "%ld},\n", forwardmap[shift][USIZE - 1]);
> +      fprintf(fout, "%d},\n", forwardmap[shift][USIZE - 1]);
>      else
> -      fprintf(fout, "%ld}\n};\n", forwardmap[shift][USIZE - 1]);
> +      fprintf(fout, "%d}\n};\n", forwardmap[shift][USIZE - 1]);
>    }
>    fprintf(fout, "\n");
>  
> @@ -96,11 +96,11 @@ int main() {
>    for(shift = 0; shift < SHIFTSIZE; shift++) {
>      fprintf(fout, "{");
>      for(i = 0; i < USIZE - 1; i++)
> -      fprintf(fout, "%ld,", reversemap[shift][i]);
> +      fprintf(fout, "%d,", reversemap[shift][i]);
>      if(shift != SHIFTSIZE - 1)
> -      fprintf(fout, "%ld},\n", reversemap[shift][USIZE - 1]);
> +      fprintf(fout, "%d},\n", reversemap[shift][USIZE - 1]);
>      else
> -      fprintf(fout, "%ld}\n};\n", reversemap[shift][USIZE - 1]);
> +      fprintf(fout, "%d}\n};\n", reversemap[shift][USIZE - 1]);
>    }
>  
>    fclose(fout);

Reply via email to