From ec603d8fb59205655bee20706bc3a78f1a0e445a Mon Sep 17 00:00:00 2001 From: angel Date: Sun, 5 Oct 2003 20:04:45 +0000 Subject: [PATCH] Corrected conditional compilation errors. git-svn-id: file:///home/angel/tmp/svn-triptico/ahxm/trunk@15 c87de0a0-a11c-0410-a1e5-866214bc28b2 --- makefile | 2 +- out_sgi.c | 4 ++++ wav.c | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 81 insertions(+), 4 deletions(-) diff --git a/makefile b/makefile index a7bd44c..b6c2609 100644 --- a/makefile +++ b/makefile @@ -1,5 +1,5 @@ OBJS=output.o out_raw.o out_wav.o out_oss.o out_pipe.o out_sgi.o -DEFS=-Wall -g -DSGI +DEFS=-Wall -g -DLINUX_OSS LIBS= LIB=annhell.a diff --git a/out_sgi.c b/out_sgi.c index 04980c0..12f4b86 100644 --- a/out_sgi.c +++ b/out_sgi.c @@ -22,6 +22,8 @@ */ +#ifdef SGI + #include #include @@ -111,3 +113,5 @@ int _out_close_sgi(void) return(0); } + +#endif /* SGI */ diff --git a/wav.c b/wav.c index a80928f..16b168f 100644 --- a/wav.c +++ b/wav.c @@ -76,6 +76,16 @@ double _middle_A_freq=440.0; double _note_freq[NUM_NOTES]; +struct effect_delay +{ + int * lbuffer; + int * rbuffer; + int size; + double vol; + int cursor; +}; + + /******************* Code ********************/ @@ -346,6 +356,63 @@ void sample_trim(int * left, int * right) } +void init_delay(struct effect_delay * e, int size, double vol) +{ + /* free previously allocated buffer */ +/* if(e->lbuffer != NULL) free(e->lbuffer); + if(e->rbuffer != NULL) free(e->rbuffer); +*/ + e->lbuffer=(int *) malloc(size * sizeof(int)); + memset(e->lbuffer, '\0', size * sizeof(int)); + e->rbuffer=(int *) malloc(size * sizeof(int)); + memset(e->rbuffer, '\0', size * sizeof(int)); + + e->size=size; + e->vol=vol; + e->cursor=0; +} + + +void process_delay(struct effect_delay * e, int * lsample, int * rsample) +{ + int l,r; + + l=e->lbuffer[e->cursor]; + r=e->lbuffer[e->cursor]; + + l=*lsample + (int)(e->vol * (double)l); + r=*rsample + (int)(e->vol * (double)r); + + e->lbuffer[e->cursor]=*lsample; + e->rbuffer[e->cursor]=*rsample; + + if(++e->cursor == e->size) e->cursor=0; + + *lsample=l; + *rsample=r; +} + + +void process_reverb(struct effect_delay * e, int * lsample, int * rsample) +{ + int l,r; + + l=e->lbuffer[e->cursor]; + r=e->lbuffer[e->cursor]; + + e->lbuffer[e->cursor]=*lsample + (int)(e->vol * (double)l); + e->rbuffer[e->cursor]=*rsample + (int)(e->vol * (double)r); + + l+=*lsample; + r+=*rsample; + + if(++e->cursor == e->size) e->cursor=0; + + *lsample=l; + *rsample=r; +} + + int main(void) { int * ls; @@ -353,6 +420,7 @@ int main(void) int size; FILE * f; int n, m; + struct effect_delay e; generator_startup(); @@ -382,12 +450,14 @@ int main(void) f=popen("sox -V -t raw -s -r 44100 -c 2 -w - qq.wav","w"); */ - if(output_open("sgi", "qq.wav") < 0) + if(output_open("oss", "/dev/dsp") < 0) { printf("Error: can't init driver\n"); return(1); } + init_delay(&e, 44100 / 10, 0.5); + for(n=TIME2SAMPLES(15);n > 0;n--) { int l,r; @@ -397,12 +467,15 @@ int main(void) for(m=0;m < NUM_GENERATORS;m++) machine(&_generators[m], &l, &r); + if(n < TIME2SAMPLES(13)) + process_reverb(&e, &l, &r); + sample_trim(&l, &r); output_write(l, r); - if(n < TIME2SAMPLES(14)) - generator_release(&_generators[1]); +/* if(n < TIME2SAMPLES(14)) + generator_release(&_generators[1]); */ } output_close(); -- 2.11.4.GIT