At Fri, 03 Jul 2009 16:19:31 +0200, Kenneth Johansson wrote:
Has not worked since commit 3d1fa924906996463ac33cba5b5143f762d913cf
Signed-off-by: Kenneth Johansson kenneth@southpole.se
Hrm, sorry, but your version is also broken as doing type-punning. The code has to be rewritten completely...
Takashi
test/pcm.c | 24 ++++++++++++++---------- 1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/test/pcm.c b/test/pcm.c index ee27422..9b8a923 100644 --- a/test/pcm.c +++ b/test/pcm.c @@ -34,14 +34,11 @@ static void generate_sine(const snd_pcm_channel_area_t *areas, static double max_phase = 2. * M_PI; double phase = *_phase; double step = max_phase*freq/(double)rate;
- double res;
- int res; unsigned char *samples[channels], *tmp; int steps[channels];
- unsigned int chn, byte;
- union {
int i;
unsigned char c[4];
- } ires;
- unsigned int chn;
- unsigned int maxval = (1 << (snd_pcm_format_width(format) - 1)) - 1; int bps = snd_pcm_format_width(format) / 8; /* bytes per sample */
@@ -62,11 +59,18 @@ static void generate_sine(const snd_pcm_channel_area_t *areas, /* fill the channel areas */ while (count-- > 0) { res = sin(phase) * maxval;
ires.i = res;
for (chn = 0; chn < channels; chn++) {tmp = ires.c;
for (byte = 0; byte < (unsigned int)bps; byte++)
*(samples[chn] + byte) = tmp[byte];
/* Generate data in native endian format */
switch(bps){
case 1:
*(samples[chn]) = res;
break;
case 2:
*(short*)(samples[chn]) = res;
break;
case 4:
*(int*)(samples[chn]) = res;
} phase += step;} samples[chn] += steps[chn];
-- 1.6.1.GIT