Hi All, Once again, yet another quick and dirty merging :-) The diff (against the latest cvs) has more Maldonado's opcodes, plus gens 40, 41, 42, and 43. And again, no testing at all :-( There are only a few (Maldonado's) opcodes to be at Unofficial Linux Csound now: bmopen bmoscil bmoscili bmscan bmscani bmtable bmtablei They need the paintlib library. I am going to see if I can do something... So, the following Maldonado's opcodes are implemented in the unofficial linux version: Cusrnd Dusrnd FLbox FLbutBank FLbutton FLcolor FLcount FLgetsnap FLgroup FLgroup_end FLhide FLjoy FLknob FLlabel FLloadsnap FLpack FLpack_end FLpanel FLpanel_end FLprintk FLprintk2 FLroller FLrun FLsavesnap FLscroll FLscroll_end FLsetAlign FLsetBox FLsetColor FLsetColor2 FLsetFont FLsetPosition FLsetSize FLsetText FLsetTextColor FLsetTextSize FLsetTextType FLsetVal FLsetVal_i FLsetsnap FLshow FLslider FLtabs FLtabs_end FLtext FLvalue adsynt2 cent(x) cpstun cpstuni db(x) foscili2 jitter jitter2 jspline lineto loopseg lpshold mandel metro octave(x) random randomh randomi rgb2hsvl rgb2hsvl_i rspline semitone(x) tab tabw tlineto urd vadd vaddv vcella vcopy vdelayk vdivv vecdelay vexp vexpseg vexpv vibr vibrato vlimit vlinseg vmap vmirror vmult vmultv vport vpow vpowv vrandh vrandi vsubv vtab vtable vtablew vtabw vwrap Pretty good, ah? :-)) I also created a directory named test under csound/doc to put some files to test opcodes. Happy hacking, Pedro Kroeger
diff -uNr csound/Make.Variables.in csound-new-merge/Make.Variables.in --- csound/Make.Variables.in Mon May 21 18:28:16 2001 +++ csound-new-merge/Make.Variables.in Tue Aug 28 00:00:45 2001 @@ -77,9 +77,9 @@ $(LINUX_DISTRIB_DIR)/scheduler.c \ $(LINUX_DISTRIB_DIR)/ipc-sliders.c \ $(LINUX_DISTRIB_DIR)/syserrs.c \ - $(LINUX_DISTRIB_DIR)/getlongopts.c \ - $(LINUX_DISTRIB_DIR)/csoundrc.c \ - $(LINUX_DISTRIB_DIR)/dieu.c \ + $(LINUX_DISTRIB_DIR)/getlongopts.c \ + $(LINUX_DISTRIB_DIR)/csoundrc.c \ + $(LINUX_DISTRIB_DIR)/dieu.c \ $(LINUX_DISTRIB_DIR)/natural-conversions.c \ $(LINUX_DISTRIB_DIR)/safe_fclose.c \ $(OSC_OPCODES) \ @@ -103,7 +103,7 @@ $(LINUX_MALDONADO_DIR)/Gab_osc.c \ $(LINUX_MALDONADO_DIR)/ConsoleGab.c \ $(LINUX_MALDONADO_DIR)/fractals.c \ - $(LINUX_MALDONADO_DIR)/vibrato.c + $(LINUX_MALDONADO_DIR)/vibrato.c \ # $(LINUX_MALDONADO_DIR)/Ugens8.c # $(LINUX_MALDONADO_DIR)/wrap.c LINUX_MALDONADO_CC_SOURCES=$(LINUX_MALDONADO_DIR)/midi_cs_gab_linux.cc diff -uNr csound/aops.c csound-new-merge/aops.c --- csound/aops.c Sat Apr 21 15:43:33 2001 +++ csound-new-merge/aops.c Tue Aug 28 00:04:48 2001 @@ -655,6 +655,7 @@ } while (--nsmps); } + /** GAB START -------------*/ #define pow2(x) powerof2[(int) ((x) * (STEPS/(OCTAVES*2)) + .5)] #define oneUp6 0.166666666666666666666666666666667f diff -uNr csound/doc/test/loopseg.orc csound-new-merge/doc/test/loopseg.orc --- csound/doc/test/loopseg.orc Thu Jan 1 00:00:00 1970 +++ csound-new-merge/doc/test/loopseg.orc Tue Aug 28 01:53:26 2001 @@ -0,0 +1,32 @@ +;**** loopseg and lpseghold example. + +;**** Warning!! thi example is not intended to be heard, but its +;**** output is intended to be watched with a wave editor (such as Cool edit), to see + +;**** the generated envelope lines. Playing the output of this example could damage +;**** your speakers + + +sr = 44100 +kr = 4410 +ksmps = 10 +nchnls = 2 + + + + instr 1 +kl0 line 1,p3,600 +kl1 line 300,p3,5 +kosci oscil 1,20,1 +;ktrig trigger kosci, .5,2 + +k1 loopseg 10, 0, 0,0, 100,25000, kl0,32000, 100,5000,kl1,0 +k2 lpshold 10, 0, 0,0, 100,25000, kl0,32000, 100,5000,kl1,0 +a1 upsamp k1 +a2 upsamp k2 + out a1,a2 + + endin + + + + diff -uNr csound/doc/test/loopseg.sco csound-new-merge/doc/test/loopseg.sco --- csound/doc/test/loopseg.sco Thu Jan 1 00:00:00 1970 +++ csound-new-merge/doc/test/loopseg.sco Tue Aug 28 01:53:26 2001 @@ -0,0 +1,2 @@ +f1 0 128 10 1 +i1 0 5 diff -uNr csound/doc/test/semitone.orc csound-new-merge/doc/test/semitone.orc --- csound/doc/test/semitone.orc Thu Jan 1 00:00:00 1970 +++ csound-new-merge/doc/test/semitone.orc Tue Aug 28 01:53:26 2001 @@ -0,0 +1,26 @@ +sr=44100 +kr=441 +ksmps=100 +nchnls=2 + +giWave1 ftgen 1,0,1024,10, 1, 0, .1 +giWave2 ftgen 1,0,1024,10, 1, 1, 0,0, 0,0, 0,0, 0,0, 0,0,.1, 0,0, 0,0, +0,0, 0,0, 0,0, 0, 0, .05 + + instr 1 +ibasefreq = p4 ;*** base frequency in cps +istartGliss = p5 ;*** distance from ibasefreq in semitones +iendGliss = p6 ;*** distance from ibasefreq in semitones + +kGliss1 linseg istartGliss, p3/3, istartGliss, p3/3, iendGliss, p3/3, +iendGliss +kGliss2 linseg iendGliss, p3/3, iendGliss, p3/3, istartGliss, p3/3, +istartGliss + +a1 oscili 10000, ibasefreq * semitone(kGliss1), giWave1 +a2 oscili 10000, ibasefreq * semitone(kGliss2), giWave2 + + outs a1, a2 + + endin + + + + diff -uNr csound/doc/test/semitone.sco csound-new-merge/doc/test/semitone.sco --- csound/doc/test/semitone.sco Thu Jan 1 00:00:00 1970 +++ csound-new-merge/doc/test/semitone.sco Tue Aug 28 01:53:26 2001 @@ -0,0 +1,7 @@ +i1 0 1 440 0 12 +i1 1.5 2 251 -12 12 +i1 4 .5 300 -7 5 +i1 5 1 880 -12 7 +i1 6.5 .5 220 0 5 +i1 7.5 3 100 0 7 +i1 11 1 50 0 24 diff -uNr csound/entry2.c csound-new-merge/entry2.c --- csound/entry2.c Sat May 19 10:29:57 2001 +++ csound-new-merge/entry2.c Tue Aug 28 01:15:40 2001 @@ -134,9 +134,6 @@ void test_set(void*), test(void*); void schedk(void*); void lineto_set(void*), lineto(void*), tlineto_set(void*),tlineto(void*); -void bmopen(void*), bmtable_set(void*), bmtable(void*), bmtablei(void*); -void bmoscil_set(void*), bmoscil(void*), bmoscili(void*), rgb2hsvl(void*); -void metro_set(void*), metro(void*), bmscan_set(void*), bmscan(void*), bmscani(void*) ; void mandel_set(void*), mandel(void*),cpstun(void*),cpstun_i(void*); void vectorOp_set(void*), vadd(void*), vmult(void*), vpow(void*), vexp(void*); void vectorOp_set(void*),vadd(void*),vmult(void*),vpow(void*),vexp(void*); @@ -147,6 +144,25 @@ void ca_set(void*), ca(void*), vport_set(void*), vport(void*) ; void kdel_set(void*), kdelay(void*),vecdly_set(void*), vecdly(void*), vmap(void*); void seqtim2_set(void*), seqtim2(void*), adsynt2_set(void*), adsynt2(void*) ; +void semitone(void*), isemitone(void*), semitone_a(void*), cent(void*), +icent(void*),cent_a(void*),db(void*),idb(void*),db_a(void*); +void loopseg_set(void*), loopseg(void*), lpshold(void*); +void vibrato_set(void*), vibrato(void*),vibr_set(void*), vibr(void*); +void mtable_set(void*), mtable_k(void*),mtable_a(void*), mtable_i(void*); +void mtablew_set(void*), mtablew_k(void*), mtablew_i(void*), mtablew_a(void*); +void randomi_set(void*), krandomi(void*), randomi(void*); +void randomh_set(void*), krandomh(void*), randomh(void*); +void random3_set(void*), random3(void*),random3a(void*); +void ikDiscreteUserRand(void*), aDiscreteUserRand(void*); +void ikRangeRand(void*), aRangeRand(void*); +void fastabiw(void *), fastabkw(void *), fastabw(void *); +void fastab_set(void *), fastabi(void *), fastabk(void *), fastab(void *); +void jitter2_set(void*), jitter2(void*),jitter_set(void*), +jitter(void*),jitters_set(void*), jitters(void*), jittersa(void*); +void ikDiscreteUserRand(void*), aDiscreteUserRand(void*); +void ikContinuousUserRand(void*), aContinuousUserRand(void*); +void bmopen(void*), bmtable_set(void*), bmtable(void*), bmtablei(void*); +void bmoscil_set(void*), bmoscil(void*), bmoscili(void*), rgb2hsvl(void*); +void metro_set(void*), metro(void*), bmscan_set(void*), bmscan(void*), +bmscani(void*) ; + #endif /* defined(GAB_RT) */ /* thread vals, where isub=1, ksub=2, asub=4: @@ -339,6 +355,72 @@ { "vrandi",S(VRANDI), 3, "", "ikki", vrandi_set, vrandi }, { "vsubv",S(VECTORSOP), 3, "", "iii", vectorsOp_set, vsubv }, { "vwrap",S(VLIMIT), 3, "", "ikki", vlimit_set, vwrap }, +{ "octave_i",S(EVAL), 1, "i", "i", ipowoftwo }, +{ "octave_k",S(EVAL), 3, "k", "k", powoftwo_set, powoftwo }, +{ "octave_a",S(EVAL), 5, "a", "a", powoftwo_set, NULL ,powoftwoa + }, +{ "semitone_i",S(EVAL), 1, "i", "i", isemitone }, +{ "semitone_k",S(EVAL), 3, "k", "k", powoftwo_set, semitone }, +{ "semitone_a",S(EVAL), 5, "a", "a", powoftwo_set, NULL ,semitone_a + }, +{ "cent_i",S(EVAL), 1, "i", "i", icent }, +{ "cent_k",S(EVAL), 3, "k", "k", powoftwo_set, cent }, +{ "cent_a",S(EVAL), 5, "a", "a", powoftwo_set, NULL ,cent_a +}, +{ "db_i",S(EVAL), 1, "i", "i", idb }, +{ "db_k",S(EVAL), 3, "k", "k", powoftwo_set, db }, +{ "db_a",S(EVAL), 5, "a", "a", powoftwo_set, NULL ,db_a }, +{ "loopseg", S(LOOPSEG),3, "k", "kkz", loopseg_set, loopseg, NULL}, +{ "lpshold", S(LOOPSEG),3, "k", "kkz", loopseg_set, lpshold, NULL}, +{ "vibrato", S(VIBRATO),3, "k", "kkkkkkkkio", vibrato_set, vibrato, NULL + }, +{ "vibr", S(VIBRATO),3, "k", "kki", vibr_set, vibr, NULL }, +{ "vtablei", S(MTABLEI), 1, "", "iiiim", mtable_i, NULL }, +{ "vtablek", S(MTABLE), 3, "", "kkkiz", mtable_set, mtable_k, NULL }, +{ "vtablea", S(MTABLE), 5, "", "akkiy", mtable_set, NULL, mtable_a }, +{ "vtablewi", S(MTABLEIW), 1, "", "iiim", mtablew_i, NULL }, +{ "vtablewk", S(MTABLEW), 3, "", "kkiz", mtablew_set, mtablew_k, NULL }, +{ "vtablewa", S(MTABLEW), 5, "", "akiy", mtablew_set, NULL, mtablew_a }, +{ "vtabi", S(MTABI), 1, "", "iiiim", mtab_i, NULL }, +{ "vtabk", S(MTAB), 3, "", "kkkiz", mtab_set, mtab_k, NULL }, +{ "vtaba", S(MTAB), 5, "", "akkiy", mtab_set, NULL, mtab_a }, +{ "vtabwi", S(MTABIW), 1, "", "iiim", mtabw_i, NULL }, +{ "vtabwk", S(MTABW), 3, "", "kkiz", mtabw_set, mtabw_k, NULL }, +{ "vtabwa", S(MTABW), 5, "", "akiy", mtabw_set, NULL, mtabw_a }, +{ "urd_i", S(DURAND), 1, "i", "i", ikDiscreteUserRand, NULL, NULL }, +{ "urd_k", S(DURAND), 2, "k", "k", NULL, ikDiscreteUserRand, NULL }, +{ "urd_a", S(DURAND), 4, "a", "a", NULL, NULL, aDiscreteUserRand }, +{ "random", 0xffff }, /*gab +d5*/ +{ "random_i", S(RANGERAND), 1, "i", "ii", ikRangeRand, NULL, NULL }, +{ "random_k", S(RANGERAND), 2, "k", "kk", NULL, ikRangeRand, NULL }, +{ "random_a", S(RANGERAND), 4, "a", "kk", NULL, NULL, aRangeRand }, +{ "rspline", S(RANDOM3), 7, "s", "xxkk", random3_set, random3, +random3a }, +{ "randomi", S(RANDOMI), 7, "s", "kkx", randomi_set, krandomi, +randomi }, +{ "randomh", S(RANDOMH), 7, "s", "kkx", randomh_set, krandomh, +randomh }, +{ "duserrnd_i", S(DURAND), 1, "i", "i", ikDiscreteUserRand, NULL, NULL + }, +{ "duserrnd_k", S(DURAND), 2, "k", "k", NULL, ikDiscreteUserRand, NULL + }, +{ "tabw_i",S(FASTAB), 1, "", "iiio", fastabiw }, +{ "tabw",S(FASTAB), 7, "", "xxio", fastab_set, fastabkw, fastabw }, +{ "tab_i",S(FASTAB), 1, "i", "iio", fastabi }, +{ "tab",S(FASTAB), 7, "s", "xio", fastab_set, fastabk, fastab }, +{ "rspline", S(RANDOM3), 7, "s", "xxkk", random3_set, random3, random3a + }, +{ "jitter2", S(JITTER2), 3, "k", "kkkkkkk", jitter2_set, jitter2, +NULL }, +{ "jitter", S(JITTER), 3, "k", "kkk", jitter_set, jitter, NULL }, +{ "jspline", S(JITTERS),7, "s", "xkk", jitters_set, jitters, jittersa }, +{ "duserrnd", 0xffff }, /*gab d5*/ +{ "cuserrnd", 0xffff }, /*gab d5*/ +{ "duserrnd_i", S(DURAND), 1, "i", "i", ikDiscreteUserRand, NULL, NULL + }, +{ "duserrnd_k", S(DURAND), 2, "k", "k", NULL, ikDiscreteUserRand, +NULL }, +{ "duserrnd_a", S(DURAND), 4, "a", "k", NULL, NULL, +aDiscreteUserRand }, +{ "cuserrnd_i", S(CURAND), 1, "i", "iii", ikContinuousUserRand, NULL, +NULL }, +{ "cuserrnd_k", S(CURAND), 2, "k", "kkk", NULL, ikContinuousUserRand, +NULL }, +{ "cuserrnd_a", S(CURAND), 4, "a", "kkk", NULL, NULL, +aContinuousUserRand }, + // Need paintlib (and picture.cpp) + //{ "bmopen",S(BMOPEN), 1, "iii", "Sio",bmopen }, + //{ "bmoscil",S(BMOSCIL), 3, "kkkk", "kkkkkkki", bmoscil_set, +bmoscil }, + //{ "bmoscili",S(BMOSCIL), 3, "kkkk", "kkkkkkki", bmoscil_set, +bmoscili }, + //{ "bmscan",S(BMSCAN), 3, "", "kiiiiii", bmscan_set, bmscan }, + //{ "bmscani",S(BMSCAN), 3, "", "kiiiiii", bmscan_set, bmscani +}, + //{ "bmtable",S(BMTABLE), 3, "kkkk", "kki", bmtable_set, bmtable + }, + //{ "bmtablei",S(BMTABLE), 3, "kkkk", "kki", bmtable_set, bmtablei + }, + //{ "rgb2hsvl",S(RGB2HSVL), 2, "kkkk", "kkk", NULL, rgb2hsvl }, + //{ "rgb2hsvl_i",S(RGB2HSVL), 1, "iiii", "iii", rgb2hsvl, }, #endif /* defined(GAB_RT) */ #if defined(ENABLE_OSC) diff -uNr csound/fgens.c csound-new-merge/fgens.c --- csound/fgens.c Thu Apr 5 16:58:52 2001 +++ csound-new-merge/fgens.c Tue Aug 28 02:44:48 2001 @@ -7,7 +7,7 @@ #include "cmath.h" #include "ftgen.h" -#define GENMAX 28 +#define GENMAX 43 extern OPARMS O; extern MYFLT curr_func_sr; /* New function in FILOPEN.C to look around for (text) files */ @@ -22,6 +22,7 @@ static void gn1314(void), gen17(void), gen19(void), gen20(void), gen21(void); static void gen22(void), gen22raw(void), gen23(void), gen24(void), gen16(void); /* gab-A1 */ static void gen25(void), gen27(void), gen28(void); +static void gen40(void),gen41(void),gen42(void),gen43(void);/* gab-A1 */ static void GENUL(void); @@ -29,12 +30,15 @@ static FUNC *ftp; static int maxfnum = 0; static GEN gensub[GENMAX+1] = { GENUL, - gen01, gen02, gen03, gen04, gen05, - gen06, gen07, gen08, gen09, gen10, - gen11, gen12, gen13, gen14, gen15, - gen16, gen17, GENUL, gen19, gen20, - gen21, gen22,gen23, gen24, gen25, /* gab-A1 (22-23-24) */ - GENUL, gen27, gen28}; + gen01, gen02, gen03, +gen04, gen05, + gen06, gen07, gen08, +gen09, gen10, + gen11, gen12, gen13, +gen14, gen15, + gen16, gen17, GENUL, +gen19, gen20, + gen21, gen22,gen23, +gen24, gen25, /* gab-A1 (22-23-24) */ + GENUL, gen27, gen28, +GENUL, GENUL, + GENUL, GENUL, +GENUL, GENUL, GENUL, + GENUL, GENUL, +GENUL, GENUL, gen40, + gen41,gen42,gen43}; static EVTBLK *e; static double tpdlen, tpd360 = 0.017453293; @@ -272,6 +276,81 @@ nvals = flenp1; /* for all vals up to flen+1 */ do *fp++ = *pp++; /* copy into ftable */ while (--nvals); +} + + +static void gen40(void) /*gab d5*/ +{ + MYFLT *fp = ftp->ftable, *fp_source, *fp_temp; + FUNC *srcftp; // srcftp -> array valori sorgente + int srcno, srcpts, j,k;// ,old_k=0,old_j=0, nstps; + MYFLT last_value=0,lenratio;// ,frac; + if ((srcno = (int)e->p[5]) <= 0 // cerca la tabella sorgente + || srcno > MAXFNUM + || (srcftp = flist[srcno]) == NULL) + FTERR("unknown source table number") + fp_source = srcftp->ftable; + srcpts = srcftp->flen; + fp_temp = (MYFLT *) calloc(srcpts, sizeof(MYFLT)); + for (j = 0; j < srcpts; j++) { + last_value += fp_source[j]; + fp_temp[j] = last_value; + } + lenratio = (flen-1)/last_value; + for (j = 0; j < flen; j++) { + k=0; + while ( k++ < srcpts && fp_temp[k] * lenratio < j) ; + k--; + fp[j] = (MYFLT) k; + } + fp[j] = fp[j-1]; + free(fp_temp); +} + +static void gen42(void) /*gab d5*/ +{ + MYFLT *fp = ftp->ftable, *pp = &e->p[5], inc; + int nvals = nargs, j,k, width; + long tot_prob=0; + for (j=0; j < nargs; j+=3) { + tot_prob += (long) pp[j+2]; + } + for (j=0; j< nargs; j+=3) { + width = (int) ((pp[j+2]/tot_prob) * flen +.5); + inc = (pp[j+1]-pp[j]) / (MYFLT) (width-1); + for ( k=0; k < width; k++) { + *fp++ = pp[j]+(inc*k); + } + } + *fp = *(fp-1); +} + +static void gen41(void) /*gab d5*/ +{ + MYFLT *fp = ftp->ftable, *pp = &e->p[5]; + int nvals = nargs, j,k, width; + long tot_prob=0; + for (j=0; j < nargs; j+=2) { + tot_prob += (long) pp[j+1]; + } + for (j=0; j< nargs; j+=2) { + width = (int) ((pp[j+1]/tot_prob) * flen +.5); + for ( k=0; k < width; k++) { + *fp++ = pp[j]; + } + } + *fp = pp[j-1]; +} + +static void gen43(void) /*gab d5*/ +{ + int j; + MYFLT *fp; + fp = ftp->ftable; + for (j=0; j < flen; j++) + fp[j] = 0.f; + for (j = 0; j < nargs; j++) + fp[(int) e->p[j+5]] = 1.f; } static void gen03(void) diff -uNr csound/rdorch.c csound-new-merge/rdorch.c --- csound/rdorch.c Thu Apr 5 16:58:53 2001 +++ csound-new-merge/rdorch.c Tue Aug 28 00:30:01 2001 @@ -1069,8 +1069,18 @@ tfound = argtyp(s); /* else get arg type */ if (tfound != 'c' && tfound != 'p' && tfound != 'S' && !lgprevdef - && !(!strcmp(tp->opcod, "artrnc") || !strcmp(tp->opcod, "argt") /* gab-a7 fixed */ - || !strcmp(tp->opcod, "krtrnc") || !strcmp(tp->opcod, "kargt"))) { /* gab-a7 fixed */ + && !( + !strcmp(tp->opcod, "rtrnca") || +!strcmp(tp->opcod, "parmta") /* gab-a7 fixed */ + || !strcmp(tp->opcod, "rtrnck") || +!strcmp(tp->opcod, "parmtk") + || !strcmp(tp->opcod, "fin") || +!strcmp(tp->opcod, "fink") + || !strcmp(tp->opcod, "fini") + || !strcmp(tp->opcod, "trigseq")|| +!strcmp(tp->opcod, "vtablek") + || !strcmp(tp->opcod, "vtablei") || +!strcmp(tp->opcod, "vtablea") + || !strcmp(tp->opcod, "vtabi") || +!strcmp(tp->opcod, "vtabk") + || !strcmp(tp->opcod, "vtaba") + || !(!strcmp(tp->opcod, "artrnc") || +!strcmp(tp->opcod, "argt") /* gab-a7 fixed */ + || !strcmp(tp->opcod, "krtrnc") || +!strcmp(tp->opcod, "kargt")) + )) { /* gab-a7 fixed */ sprintf(errmsg, Str(X_914,"input arg '%s' used before defined"),s); synterr(errmsg);