rpms/olpcsound/OLPC-3 sfont-envelope.patch, NONE, 1.1 olpcsound.spec, 1.7, 1.8
Victor Lazzarini (veplaini)
fedora-extras-commits at redhat.com
Mon Aug 11 21:44:18 UTC 2008
- Previous message (by thread): rpms/boost/devel .cvsignore, 1.9, 1.10 boost-configure.patch, 1.1, 1.2 boost-gcc-soname.patch, 1.2, 1.3 boost-gcc43.patch, 1.5, 1.6 boost-run-tests.patch, 1.1, 1.2 boost-use-rpm-optflags.patch, 1.1, 1.2 boost.spec, 1.50, 1.51 sources, 1.11, 1.12 boost-regex.patch, 1.1, NONE
- Next message (by thread): rpms/boost/devel boost-gcc43.patch,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: veplaini
Update of /cvs/pkgs/rpms/olpcsound/OLPC-3
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv19463
Modified Files:
olpcsound.spec
Added Files:
sfont-envelope.patch
Log Message:
added patch for envelopes on sfont opcds
sfont-envelope.patch:
--- NEW FILE sfont-envelope.patch ---
Index: olpcsound-5.08.92/Opcodes/sf.h
======================================
--- olpcsound-5.08.92/Opcodes/sf.h.old
+++ olpcsound-5.08.92/Opcodes/sf.h
@@ -56,6 +56,10 @@ struct _splitType {
SHORT scaleTuning;
SHORT initialAttenuation;
SHORT pan;
+ MYFLT attack;
+ MYFLT decay;
+ MYFLT sustain;
+ MYFLT release;
} PACKED;
typedef struct _splitType splitType;
Index: olpcsound-5.08.92/Opcodes/sfont.h
======================================
--- olpcsound-5.08.92/Opcodes/sfont.h.old
+++ olpcsound-5.08.92/Opcodes/sfont.h
@@ -49,42 +49,50 @@ typedef struct {
typedef struct {
OPDS h;
MYFLT *out1, *out2, *ivel, *inotnum,*xamp, *xfreq;
- MYFLT *ipresethandle, *iflag, *ioffset;
+ MYFLT *ipresethandle, *iflag, *ioffset, *ienv;
int spltNum;
SHORT *base[MAXSPLT], mode[MAXSPLT];
- DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT];
+ DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT], ti[MAXSPLT];
double si[MAXSPLT],phs[MAXSPLT];
- MYFLT leftlevel[MAXSPLT], rightlevel[MAXSPLT];
+ MYFLT leftlevel[MAXSPLT], rightlevel[MAXSPLT], attack[MAXSPLT], decay[MAXSPLT], sustain[MAXSPLT], release[MAXSPLT];
+ MYFLT attr[MAXSPLT], decr[MAXSPLT];
+ MYFLT env[MAXSPLT];
} SFPLAY;
typedef struct {
OPDS h;
- MYFLT *out1, *ivel, *inotnum,*xamp, *xfreq, *ipresethandle, *iflag, *ioffset;
+ MYFLT *out1, *ivel, *inotnum,*xamp, *xfreq, *ipresethandle, *iflag, *ioffset, *ienv;
int spltNum;
SHORT *base[MAXSPLT], mode[MAXSPLT];
- DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT];
+ DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT], ti[MAXSPLT];
double si[MAXSPLT],phs[MAXSPLT];
- MYFLT attenuation[MAXSPLT] ;
+ MYFLT attenuation[MAXSPLT],attack[MAXSPLT], decay[MAXSPLT], sustain[MAXSPLT], release[MAXSPLT];
+ MYFLT attr[MAXSPLT], decr[MAXSPLT];
+ MYFLT env[MAXSPLT];
} SFPLAYMONO;
typedef struct {
OPDS h;
MYFLT *out1, *ivel, *inotnum, *xamp, *xfreq, *instrNum;
- MYFLT *sfBank, *iflag, *ioffset;
+ MYFLT *sfBank, *iflag, *ioffset, *ienv;
int spltNum;
SHORT *base[MAXSPLT], mode[MAXSPLT];
- DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT];
+ DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT], ti[MAXSPLT];
double si[MAXSPLT],phs[MAXSPLT];
- MYFLT attenuation[MAXSPLT] ;
+ MYFLT attenuation[MAXSPLT],attack[MAXSPLT], decay[MAXSPLT], sustain[MAXSPLT], release[MAXSPLT];
+ MYFLT attr[MAXSPLT], decr[MAXSPLT];
+ MYFLT env[MAXSPLT];
} SFIPLAYMONO;
typedef struct {
OPDS h;
MYFLT *out1, *out2, *ivel, *inotnum, *xamp, *xfreq;
- MYFLT *instrNum, *sfBank, *iflag, *ioffset;
+ MYFLT *instrNum, *sfBank, *iflag, *ioffset, *ienv;
int spltNum;
SHORT *base[MAXSPLT], mode[MAXSPLT];
- DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT];
+ DWORD end[MAXSPLT], startloop[MAXSPLT], endloop[MAXSPLT], ti[MAXSPLT];
double si[MAXSPLT],phs[MAXSPLT];
- MYFLT leftlevel[MAXSPLT], rightlevel[MAXSPLT];
+ MYFLT leftlevel[MAXSPLT], rightlevel[MAXSPLT],attack[MAXSPLT], decay[MAXSPLT], sustain[MAXSPLT], release[MAXSPLT];
+ MYFLT attr[MAXSPLT], decr[MAXSPLT];
+ MYFLT env[MAXSPLT];
} SFIPLAY;
Index: olpcsound-5.08.92/Opcodes/sfont.c
======================================
--- olpcsound-5.08.92/Opcodes/sfont.c.old
+++ olpcsound-5.08.92/Opcodes/sfont.c
@@ -373,6 +373,27 @@ static int SfPlay_set(CSOUND *csound, SF
p->leftlevel[spltNum] = (MYFLT) sqrt(1.0-pan) * attenuation;
p->rightlevel[spltNum] = (MYFLT) sqrt(pan) * attenuation;
p->mode[spltNum]= split->sampleModes;
+ p->attack[spltNum] = split->attack*csound->ekr;
+ p->decay[spltNum] = split->decay*csound->ekr;
+ p->sustain[spltNum] = split->sustain;
+ p->release[spltNum] = split->release*csound->ekr;
+
+ if(*p->ienv > 1) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = pow((split->sustain+0.0001), 1.0/(csound->ekr*split->decay+0.0001));
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else if (*p->ienv > 0) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = (split->sustain-1.0)/(csound->ekr*split->decay);
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else {
+ p->env[spltNum] = 1.0;
+ }
+ p->ti[spltNum] = 0;
spltNum++;
}
}
@@ -410,28 +431,42 @@ static int SfPlay_set(CSOUND *csound, SF
while (*phs < *startloop) *phs += looplength; \
}
+#define ExpEnvelope \
+ if (*tinc < *attack) *env += *attr;\
+ else if (*tinc < *decay + *attack) *env *= *decr; \
+ else *env = *sustain; \
+ (*tinc)++; \
+
+#define LinEnvelope \
+ if (*tinc < *attack) *env += *attr;\
+ else if (*tinc < *decay + *attack) *env += *decr; \
+ else *env = *sustain; \
+ (*tinc)++; \
+
#define Unlooped \
if (*phs > *end) break; \
if (*phs < FL(0.0)) *phs = FL(0.0); \
#define Mono_out \
- out1[n] += *attenuation * out; \
+ out1[n] += *attenuation * out * (*env); \
*phs += si;
#define Stereo_out \
- out1[n] += *left * out;\
- out2[n] += *right * out;\
+ out1[n] += *left * out * (*env);\
+ out2[n] += *right * out * (*env);\
*phs += si;
static int SfPlay(CSOUND *csound, SFPLAY *p)
{
- MYFLT *out1 = p->out1, *out2 = p->out2;
+ MYFLT *out1 = p->out1, *out2 = p->out2, *env = p->env;
int n, nsmps = csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end = p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end = p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *left= p->leftlevel, *right= p->rightlevel;
+ MYFLT *left= p->leftlevel, *right= p->rightlevel, *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
+
arate = (p->XINCODE) ? 1 : 0;
memset(out1, 0, nsmps*sizeof(MYFLT));
@@ -441,22 +476,27 @@ static int SfPlay(CSOUND *csound, SFPLAY
while (j--) {
double looplength = *endloop - *startloop;
MYFLT *freq = p->xfreq;
-
+
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++; env++; attr++; decr++;
}
}
else {
@@ -466,17 +506,22 @@ static int SfPlay(CSOUND *csound, SFPLAY
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
- for (n=0;n<nsmps;n++) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
+ for (n=0;n<nsmps;n++) {
Linear_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Linear_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++; env++;attr++; decr++;
}
}
if (arate) {
@@ -498,13 +543,14 @@ static int SfPlay(CSOUND *csound, SFPLAY
static int SfPlay3(CSOUND *csound, SFPLAY *p)
{
- MYFLT *out1 = p->out1, *out2 = p->out2;
+ MYFLT *out1 = p->out1, *out2 = p->out2, *env = p->env;
int n, nsmps = csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end = p->end, *startloop = p->startloop, *endloop = p->endloop;
+ DWORD *end = p->end, *startloop = p->startloop, *endloop = p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *left= p->leftlevel, *right= p->rightlevel;
+ MYFLT *left= p->leftlevel, *right= p->rightlevel, *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
arate = (p->XINCODE) ? 1 : 0;
memset(out1, 0, nsmps*sizeof(MYFLT));
@@ -517,19 +563,24 @@ static int SfPlay3(CSOUND *csound, SFPLA
/* nsmps = csound->ksmps; */
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++; env++;attr++; decr++;
}
}
else {
@@ -538,17 +589,22 @@ static int SfPlay3(CSOUND *csound, SFPLA
double looplength = *endloop - *startloop, si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++; env++;attr++; decr++;
}
}
@@ -630,6 +686,27 @@ static int SfPlayMono_set(CSOUND *csound
split->startLoopOffset - start;
p->endloop[spltNum] = sample->dwEndloop + split->endLoopOffset - start;
p->mode[spltNum]= split->sampleModes;
+ p->attack[spltNum] = split->attack*csound->ekr;
+ p->decay[spltNum] = split->decay*csound->ekr;
+ p->sustain[spltNum] = split->sustain;
+ p->release[spltNum] = split->release*csound->ekr;
+
+ if(*p->ienv > 1) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = pow((split->sustain+0.0001), 1.0/(csound->ekr*split->decay+0.0001));
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else if (*p->ienv > 0) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = (split->sustain-1.0)/(csound->ekr*split->decay);
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else {
+ p->env[spltNum] = 1.0;
+ }
+ p->ti[spltNum] = 0;
spltNum++;
}
}
@@ -641,13 +718,14 @@ static int SfPlayMono_set(CSOUND *csound
static int SfPlayMono(CSOUND *csound, SFPLAYMONO *p)
{
- MYFLT *out1 = p->out1 ;
+ MYFLT *out1 = p->out1 , *env = p->env;
int n, nsmps = csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
- double *sampinc = p->si, *phs = p->phs;
- MYFLT *attenuation = p->attenuation;
+ double *sampinc = p->si, *phs = p->phs;
+ MYFLT *attenuation = p->attenuation, *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
arate = (p->XINCODE) ? 1 : 0;
@@ -662,17 +740,22 @@ static int SfPlayMono(CSOUND *csound, SF
int flag =0;
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
Linear_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
Linear_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++; attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -683,16 +766,21 @@ static int SfPlayMono(CSOUND *csound, SF
if (*mode == 1 || *mode ==3) {
int flag =0;
for (n=0;n<nsmps;n++) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
Linear_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
for (n=0;n<nsmps;n++) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
Linear_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
if (arate) {
@@ -712,13 +800,14 @@ static int SfPlayMono(CSOUND *csound, SF
static int SfPlayMono3(CSOUND *csound, SFPLAYMONO *p)
{
- MYFLT *out1 = p->out1;
+ MYFLT *out1 = p->out1, *env = p->env;
int n, nsmps = csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end = p->end, *startloop = p->startloop, *endloop = p->endloop;
+ DWORD *end = p->end, *startloop = p->startloop, *endloop = p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *attenuation = p->attenuation;
+ MYFLT *attenuation = p->attenuation,*attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
arate = (p->XINCODE) ? 1 : 0;
@@ -731,19 +820,24 @@ static int SfPlayMono3(CSOUND *csound, S
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -753,17 +847,22 @@ static int SfPlayMono3(CSOUND *csound, S
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
if (arate) {
@@ -837,6 +936,28 @@ static int SfInstrPlay_set(CSOUND *csoun
p->leftlevel[spltNum] = (FL(1.0)-pan) * attenuation;
p->rightlevel[spltNum] = pan * attenuation;
p->mode[spltNum]= split->sampleModes;
+
+ p->attack[spltNum] = split->attack*csound->ekr;
+ p->decay[spltNum] = split->decay*csound->ekr;
+ p->sustain[spltNum] = split->sustain;
+ p->release[spltNum] = split->release*csound->ekr;
+
+ if(*p->ienv > 1) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = pow((split->sustain+0.0001), 1.0/(csound->ekr*split->decay+0.0001));
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else if (*p->ienv > 0) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = (split->sustain-1.0)/(csound->ekr*split->decay);
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else {
+ p->env[spltNum] = 1.0;
+ }
+ p->ti[spltNum] = 0;
spltNum++;
}
}
@@ -847,13 +968,15 @@ static int SfInstrPlay_set(CSOUND *csoun
static int SfInstrPlay(CSOUND *csound, SFIPLAY *p)
{
- MYFLT *out1= p->out1, *out2= p->out2;
+ MYFLT *out1= p->out1, *out2= p->out2, *env = p->env;
int n, nsmps= csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *left= p->leftlevel, *right= p->rightlevel;
+ MYFLT *left= p->leftlevel, *right= p->rightlevel, *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
+
arate = (p->XINCODE) ? 1 : 0;
@@ -867,19 +990,24 @@ static int SfInstrPlay(CSOUND *csound, S
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -889,17 +1017,22 @@ static int SfInstrPlay(CSOUND *csound, S
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Linear_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Linear_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
@@ -922,13 +1055,15 @@ static int SfInstrPlay(CSOUND *csound, S
static int SfInstrPlay3(CSOUND *csound, SFIPLAY *p)
{
- MYFLT *out1= p->out1, *out2= p->out2;
+ MYFLT *out1= p->out1, *out2= p->out2,*env =p->env;
int n, nsmps= csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *left= p->leftlevel, *right= p->rightlevel;
+ MYFLT *left= p->leftlevel, *right= p->rightlevel,
+ *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;
arate = (p->XINCODE) ? 1 : 0;
@@ -942,19 +1077,24 @@ static int SfInstrPlay3(CSOUND *csound,
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -964,17 +1104,22 @@ static int SfInstrPlay3(CSOUND *csound,
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Stereo_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Stereo_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- left++; right++, mode++, end++;
+ left++; right++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
@@ -1044,6 +1189,27 @@ static int SfInstrPlayMono_set(CSOUND *c
split->startLoopOffset - start;
p->endloop[spltNum] = sample->dwEndloop + split->endLoopOffset - start;
p->mode[spltNum]= split->sampleModes;
+ p->attack[spltNum] = split->attack*csound->ekr;
+ p->decay[spltNum] = split->decay*csound->ekr;
+ p->sustain[spltNum] = split->sustain;
+ p->release[spltNum] = split->release*csound->ekr;
+
+ if(*p->ienv > 1) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = pow((split->sustain+0.0001), 1.0/(csound->ekr*split->decay+0.0001));
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else if (*p->ienv > 0) {
+ p->attr[spltNum] = 1.0/(csound->ekr*split->attack);
+ p->decr[spltNum] = (split->sustain-1.0)/(csound->ekr*split->decay);
+ if(split->attack != 0.0) p->env[spltNum] = 0.0;
+ else p->env[spltNum] = 1.0;
+ }
+ else {
+ p->env[spltNum] = 1.0;
+ }
+ p->ti[spltNum] = 0;
spltNum++;
}
}
@@ -1054,14 +1220,15 @@ static int SfInstrPlayMono_set(CSOUND *c
static int SfInstrPlayMono(CSOUND *csound, SFIPLAYMONO *p)
{
- MYFLT *out1= p->out1 ;
+ MYFLT *out1= p->out1, *env = p->env;
int n, nsmps= csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *attenuation = p->attenuation;
+ MYFLT *attenuation = p->attenuation, *attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;;
arate = (p->XINCODE) ? 1 : 0;
@@ -1074,19 +1241,24 @@ static int SfInstrPlayMono(CSOUND *csoun
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Linear_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -1096,17 +1268,22 @@ static int SfInstrPlayMono(CSOUND *csoun
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Linear_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Linear_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
if (arate) {
@@ -1126,13 +1303,14 @@ static int SfInstrPlayMono(CSOUND *csoun
static int SfInstrPlayMono3(CSOUND *csound, SFIPLAYMONO *p)
{
- MYFLT *out1= p->out1 ;
+ MYFLT *out1= p->out1, *env = p->env ;
int n, nsmps= csound->ksmps, j = p->spltNum, arate;
SHORT **base = p->base;
- DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop;
+ DWORD *end= p->end, *startloop= p->startloop, *endloop= p->endloop, *tinc = p->ti;
SHORT *mode = p->mode;
double *sampinc = p->si, *phs = p->phs;
- MYFLT *attenuation = p->attenuation;
+ MYFLT *attenuation = p->attenuation,*attack = p->attack, *decr = p->decr,
+ *decay = p->decay, *sustain= p->sustain, *release = p->release, *attr = p->attr;;
arate = (p->XINCODE) ? 1 : 0;
@@ -1145,19 +1323,24 @@ static int SfInstrPlayMono3(CSOUND *csou
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
double si = *sampinc * freq[n];
Cubic_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
else {
@@ -1167,17 +1350,22 @@ static int SfInstrPlayMono3(CSOUND *csou
double si = *sampinc * freq;
if (*mode == 1 || *mode ==3) {
int flag =0;
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Mono_out Looped
}
}
else if (*phs < *end) {
+ if(*p->ienv > 1) { ExpEnvelope }
+ else if (*p->ienv > 0) { LinEnvelope }
for (n=0;n<nsmps;n++) {
Cubic_interpolation Mono_out Unlooped
}
}
phs++; base++; sampinc++; endloop++; startloop++;
- attenuation++, mode++, end++;
+ attenuation++, mode++, end++;attack++; decay++; sustain++;
+ release++; tinc++;env++;attr++; decr++;
}
}
if (arate) {
@@ -1379,6 +1567,7 @@ static void fill_SfStruct(CSOUND *csound
else {
splitType *split;
split = &layer->split[ll];
+ split->attack = split->decay = split->sustain = split->release = FL(0.0);
if (GoverridingRootKey != UNUSE)
split->overridingRootKey = (BYTE) GoverridingRootKey;
if (GcoarseTune != UNUSE)
@@ -1466,6 +1655,27 @@ static void fill_SfStruct(CSOUND *csound
case endloopAddrsCoarseOffset:
split->endLoopOffset += igen[m].genAmount.shAmount * 32768;
break;
+ case delayVolEnv:
+ csound->Message(csound, "del: %f\n", (double) igen[m].genAmount.shAmount);
+ break;
+ case attackVolEnv: /*attack */
+ split->attack = (MYFLT) pow(2, igen[m].genAmount.shAmount/1200.0);
+ //csound->Message(csound, "att: %f\n", split->attack );
+ break;
+ //case holdVolEnv: /*hold 35 */
+ case decayVolEnv: /*decay */
+ split->decay = (MYFLT) pow(2, igen[m].genAmount.shAmount/1200.0);
+ //csound->Message(csound, "dec: %f\n", split->decay);
+ break;
+ case sustainVolEnv: /*sustain */
+ split->sustain = (MYFLT) pow(10, -igen[m].genAmount.shAmount/20.0);
+ //csound->Message(csound, "sus: %f\n", split->sustain);
+ break;
+ case releaseVolEnv: /*release */
+ split->release = (MYFLT) pow(2, igen[m].genAmount.shAmount/1200.0);
+ //csound->Message(csound, "rel: %f\n", split->release);
+ break;
+
case keynum:
/*csound->Message(csound, "");*/
break;
@@ -2280,24 +2490,24 @@ static int sflooper_process(CSOUND *csou
static OENTRY localops[] = {
{ "sfload",S(SFLOAD), 1, "i", "T", (SUBR)SfLoad, NULL, NULL },
{ "sfpreset",S(SFPRESET), 1, "i", "iiii", (SUBR)SfPreset },
-{ "sfplay", S(SFPLAY), 5, "aa", "iixxioo", (SUBR)SfPlay_set,
+{ "sfplay", S(SFPLAY), 5, "aa", "iixxiooo", (SUBR)SfPlay_set,
NULL, (SUBR)SfPlay },
-{ "sfplaym", S(SFPLAYMONO), 5, "a", "iixxioo", (SUBR)SfPlayMono_set,
+{ "sfplaym", S(SFPLAYMONO), 5, "a", "iixxiooo", (SUBR)SfPlayMono_set,
NULL, (SUBR)SfPlayMono },
{ "sfplist",S(SFPLIST), 1, "", "i", (SUBR)Sfplist },
{ "sfilist",S(SFPLIST), 1, "", "i", (SUBR)Sfilist },
{ "sfpassign",S(SFPASSIGN), 1, "", "iip", (SUBR)SfAssignAllPresets },
-{ "sfinstrm", S(SFIPLAYMONO),5, "a", "iixxiioo", (SUBR)SfInstrPlayMono_set,
+{ "sfinstrm", S(SFIPLAYMONO),5, "a", "iixxiiooo", (SUBR)SfInstrPlayMono_set,
NULL, (SUBR)SfInstrPlayMono },
-{ "sfinstr", S(SFIPLAY), 5, "aa", "iixxiioo", (SUBR)SfInstrPlay_set,
+{ "sfinstr", S(SFIPLAY), 5, "aa", "iixxiiooo", (SUBR)SfInstrPlay_set,
NULL,(SUBR)SfInstrPlay },
-{ "sfplay3", S(SFPLAY), 5, "aa", "iixxioo", (SUBR)SfPlay_set,
+{ "sfplay3", S(SFPLAY), 5, "aa", "iixxiooo", (SUBR)SfPlay_set,
NULL, (SUBR)SfPlay3 },
-{ "sfplay3m", S(SFPLAYMONO), 5, "a", "iixxioo", (SUBR)SfPlayMono_set,
+{ "sfplay3m", S(SFPLAYMONO), 5, "a", "iixxiooo", (SUBR)SfPlayMono_set,
NULL,(SUBR)SfPlayMono3 },
-{ "sfinstr3", S(SFIPLAY), 5, "aa", "iixxiioo", (SUBR)SfInstrPlay_set,
+{ "sfinstr3", S(SFIPLAY), 5, "aa", "iixxiiooo", (SUBR)SfInstrPlay_set,
NULL, (SUBR)SfInstrPlay3 },
-{ "sfinstr3m", S(SFIPLAYMONO), 5, "a", "iixxiioo",(SUBR)SfInstrPlayMono_set,
+{ "sfinstr3m", S(SFIPLAYMONO), 5, "a", "iixxiiooo",(SUBR)SfInstrPlayMono_set,
NULL, (SUBR)SfInstrPlayMono3 },
{ "sflooper", S(sflooper), 5, "aa", "iikkikkkoooo", (SUBR)sflooper_init,
NULL, (SUBR)sflooper_process },
Index: olpcsound.spec
===================================================================
RCS file: /cvs/pkgs/rpms/olpcsound/OLPC-3/olpcsound.spec,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- olpcsound.spec 11 Aug 2008 21:23:26 -0000 1.7
+++ olpcsound.spec 11 Aug 2008 21:43:48 -0000 1.8
@@ -1,7 +1,7 @@
Summary: Csound - sound synthesis language and library, OLPC subset
Name: olpcsound
Version: 5.08.92
-Release: 7%{?dist}
+Release: 8%{?dist}
URL: http://csound.sourceforge.net/
License: LGPLv2+
Group: Applications/Multimedia
@@ -9,6 +9,7 @@
Patch0: csd-comment-termination.patch
Patch1: ogg-opcode-fix.patch
Patch2: libstdutil-fix.patch
+Patch3: sfont-envelope.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: swig python scons alsa-lib-devel liblo-devel libsndfile-devel
BuildRequires: libpng-devel libjpeg-devel libvorbis-devel libogg-devel gettext python-devel
@@ -31,6 +32,7 @@
%patch0 -p1
%patch1 -p1
%patch2 -p1
+%patch3 -p1
%build
%{_bindir}/scons buildOLPC=1 customCCFLAGS="%{optflags}" customCXXFLAGS="%{optflags}"
@@ -69,6 +71,9 @@
%changelog
+* Mon Aug 11 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-8
+ - add patch for amplitude envelopes on soundfont opcodes
+
* Mon Aug 11 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-7
- add patch to fix libstdutil.so loading
- Previous message (by thread): rpms/boost/devel .cvsignore, 1.9, 1.10 boost-configure.patch, 1.1, 1.2 boost-gcc-soname.patch, 1.2, 1.3 boost-gcc43.patch, 1.5, 1.6 boost-run-tests.patch, 1.1, 1.2 boost-use-rpm-optflags.patch, 1.1, 1.2 boost.spec, 1.50, 1.51 sources, 1.11, 1.12 boost-regex.patch, 1.1, NONE
- Next message (by thread): rpms/boost/devel boost-gcc43.patch,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list