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/
Erik, Ok. These tests will be skipped if bc(1) is not available. Earl ----- Original Message ----- From: Erik de Castro Lopo <mle+la at mega-nerd.com> To: flac-dev at xiph.org Cc: Earl Chew <earl_chew at yahoo.com> 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/
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 <mle+la at mega-nerd.com>
To: flac-dev at xiph.org
Cc: Earl Chew <earl_chew at yahoo.com>
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/
Earl Chew wrote:> 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) ?Nope, should be fine. Thanks for your work on this. CHeers, Erik -- ---------------------------------------------------------------------- Erik de Castro Lopo http://www.mega-nerd.com/