Erik, It turns out bc(1) is too accurate, and a little slow, for this purpose.
I've switched to using awk(1) which uses floating point. Do you feel I need to test for the presence of awk(1) ? It is specified as one of the standard commands in the LSB : http://refspecs.linuxfoundation.org/LSB_1.0.0/gLSB/command.html Earl awk -- ' BEGIN { samplerate = 8000; tone = 1000; duration = 1; bitspersample = 24; samplemidpoint = lshift(1, (bitspersample-1)); samplerange = samplemidpoint - 1; pi = 4 * atan2(1,1); for (ix = 0; ix < duration * samplerate; ++ix) { sample = sin(2 * pi * tone * ix / samplerate); sample *= samplerange; sample += samplemidpoint; sample = int(sample); for (bx = 0; bx < bitspersample/8; ++bx) { byte[bx] = sample % 256; sample /= 256; } while (bx--) { printf("%c", byte[bx]); } } }' /dev/null ----- Original Message ----- From: Erik de Castro Lopo <[email protected]> To: [email protected] Cc: Earl Chew <[email protected]> Sent: Friday, February 17, 2012 3:30:00 PM Subject: Re: [flac-dev] Regain play analysis patches Earl Chew wrote: > I'm a little reluctant to introduce another compiled program when there are > so many other options that will work well enough out of the box. > > Here are two ideas: > > 1. Use bc(1) to compute the raw samples > 2. Use perl(1) to compute the raw samples > > To generate raw unsigned samples using bc(1) for example: > > samplerate = 1000; > duration = 2; > bitspersample = 24; > > samplerange = 2 ^ (bitspersample-1) - 1; > samplemidpoint = 2 ^ (bitspersample-1); > > pi = 4 * a(1); > > scale = 18; > obase = 16; > > for (ix = 0; ix < duration * samplerate; ++ix) { > sample = samplemidpoint + samplerange * s(2 * pi * ix / samplerate); > s = scale; > scale = 0; > sample /= 1; > sample; > scale = s; > } > > > > Are you ok with bc(1) ? Yes, bc looks quite nice. As Richard Ash mentioned, the test should detect the presence of bc and it its not available, print a nice big warning, and exit the script with an error code of 0. If bc is available, run the tests and any failure should result in the script exiting with a non-zero error code. Cheers, Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/ _______________________________________________ flac-dev mailing list [email protected] http://lists.xiph.org/mailman/listinfo/flac-dev
