rpms/olpcsound/devel csd-comment-termination.patch, NONE, 1.1 jack-pulseaudio.patch, NONE, 1.1 libstdutil-fix.patch, NONE, 1.1 ogg-opcode-fix.patch, NONE, 1.1 rtalsa-sched.patch, NONE, 1.1 sfont-envelope.patch, NONE, 1.1 olpcsound.spec, 1.1, 1.2

Peter Robinson pbrobinson at fedoraproject.org
Sat Oct 25 14:51:15 UTC 2008


Author: pbrobinson

Update of /cvs/pkgs/rpms/olpcsound/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv22766

Modified Files:
	olpcsound.spec 
Added Files:
	csd-comment-termination.patch jack-pulseaudio.patch 
	libstdutil-fix.patch ogg-opcode-fix.patch rtalsa-sched.patch 
	sfont-envelope.patch 
Log Message:
- Merge from OLPC-3 to mainline


csd-comment-termination.patch:

--- NEW FILE csd-comment-termination.patch ---
Fix comment termination parsing
Patch taken from csound CVS

Index: olpcsound-5.08.92/Engine/rdorch.c
===================================================================
--- olpcsound-5.08.92.orig/Engine/rdorch.c
+++ olpcsound-5.08.92/Engine/rdorch.c
@@ -201,7 +201,7 @@ static int skiporccomment(CSOUND *csound
         return;
       }
     }
-    if (c == '*' && mode == 0) mode = 1;
+    if (c == '*') mode = 1; /* look for end of comment */
     else if (c == '/' && mode == 1) {
       return srccnt;
     }

jack-pulseaudio.patch:

--- NEW FILE jack-pulseaudio.patch ---
Patch to include jack and pulseaudio in the
csound build (scons buildOLPC=1)

Index: olpcsound-5.08.92/SConstruct
===========================================================================
--- SConstruct.old
+++ SConstruct	
@@ -339,8 +339,8 @@ if commonEnvironment['buildOLPC'] == '1'
     commonEnvironment['useGettext'] = '1'
     commonEnvironment['useDouble'] = '0'
     commonEnvironment['usePortAudio'] = '0'
-    commonEnvironment['useJack'] = '0'
-    jackFound = False
+    commonEnvironment['useJack'] = '1'
+    #jackFound = False
     commonEnvironment['buildCsoundAC'] = '0'
     commonEnvironment['buildCsound5GUI'] = '0'
     commonEnvironment['useDouble'] = '0'
@@ -639,12 +639,12 @@ boostFound = configure.CheckHeader("boos
 gmmFound = configure.CheckHeader("gmm/gmm.h", language = "C++")
 alsaFound = configure.CheckLibWithHeader("asound", "alsa/asoundlib.h", language = "C")
 oscFound = configure.CheckLibWithHeader("lo", "lo/lo.h", language = "C")
-if not buildOLPC:
-    jackFound = configure.CheckLibWithHeader("jack", "jack/jack.h", language = "C")
-if not buildOLPC:
- pulseaudioFound = configure.CheckHeader("pulse/simple.h", language = "C")
-else:
- pulseaudioFound = 0
+#if not buildOLPC:
+jackFound = configure.CheckLibWithHeader("jack", "jack/jack.h", language = "C")
+#if not buildOLPC:
+pulseaudioFound = configure.CheckHeader("pulse/simple.h", language = "C")
+#else:
+#pulseaudioFound = 0
 stkFound = configure.CheckHeader("Opcodes/stk/include/Stk.h", language = "C++")
 pdhfound = configure.CheckHeader("m_pd.h", language = "C")
 tclhfound = configure.CheckHeader("tcl.h", language = "C")
@@ -1480,7 +1480,7 @@ makePlugin(pluginEnvironment, 'gabnew', 
     Opcodes/gab/newgabopc.c
 '''))
 makePlugin(pluginEnvironment, 'hrtfnew', 'Opcodes/hrtfopcodes.c')
-if (not buildOLPC) and jackFound:
+if jackFound:
     makePlugin(pluginEnvironment, 'jackTransport', 'Opcodes/jackTransport.c')
 if (not buildOLPC) and boostFound:
     makePlugin(pluginEnvironment, 'chua', 'Opcodes/chua/ChuaOscillator.cpp')

libstdutil-fix.patch:

--- NEW FILE libstdutil-fix.patch ---
Fix libstdutil.so loading, removing hetro

Index: olpcsound-5.08.92/util/std_util.c
=============================================================
--- olpcsound-5.08.92/util/std_util.c.old
+++ olpcsound-5.08.92/util/std_util.c
@@ -37,10 +37,10 @@ PUBLIC int csoundModuleCreate(CSOUND *cs
     err |= pv_export_init_(csound);
     err |= pv_import_init_(csound);
     err |= xtrct_init_(csound);
+    err |= hetro_init_(csound);
 #endif
     err |= cvanal_init_(csound);
     err |= dnoise_init_(csound);
-    err |= hetro_init_(csound);
     err |= lpanal_init_(csound);
     err |= mixer_init_(csound);
     err |= pvanal_init_(csound);

ogg-opcode-fix.patch:

--- NEW FILE ogg-opcode-fix.patch ---
Fix liboggplay linking

Index: olpcsound-5.08.92/SConstruct
===================================================================
--- olpcsound-5.08.92/SConstruct.old	
+++ olpcsound-5.08.92/SConstruct	
@@ -1463,7 +1463,7 @@ makePlugin(pluginEnvironment, 'partikkel
 makePlugin(pluginEnvironment, 'shape', ['Opcodes/shape.c'])
 if buildOLPC :
    oggEnvironment = pluginEnvironment.Copy()
-   makePlugin(oggEnvironment, 'ogg', ['Opcodes/ogg.c'])
+   makePlugin(oggEnvironment, 'oggread', ['Opcodes/ogg.c'])
    oggEnvironment.Append(LIBS=['vorbisfile'])
 makePlugin(pluginEnvironment, 'vosim', ['Opcodes/Vosim.c'])
 

rtalsa-sched.patch:

--- NEW FILE rtalsa-sched.patch ---
Patch to add scheduler priority setting to alsa module

Index: olpcsound-5.08.92/InOut/rtalsa.c
==============================================================
--- olpcsound-5.08.92/InOut/rtalsa.c.old
+++ olpcsound-5.08.92/InOut/rtalsa.c
@@ -46,6 +46,12 @@
 #include <termios.h>
 #include <errno.h>
 #include <alsa/asoundlib.h>
+#include <sched.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/mman.h>
+#include <sys/resource.h>
+
 
 #include "soundio.h"
 
@@ -89,6 +95,40 @@ static const unsigned char dataBytes[16]
     0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 1, 1, 2, 0
 };
 
+
+
+int set_scheduler_priority(CSOUND *csound, int priority)
+{
+    struct sched_param p;
+ 
+    memset(&p, 0, sizeof(struct sched_param));
+    if (priority < -20 || priority > sched_get_priority_max(SCHED_RR)) {
+      csound->Message(csound, "--scheduler: invalid priority value; the allowed range is:");
+      csound->Message(csound,"  -20 to -1: set nice level");
+      csound->Message(csound,"          0: normal scheduling, but lock memory");
+      csound->Message(csound,"    1 to %d: SCHED_RR with the specified priority "
+                    "(DANGEROUS)", sched_get_priority_max(SCHED_RR));
+            return -1;
+       }
+    /* set scheduling policy and priority */
+    if (priority > 0) {
+      p.sched_priority = priority;
+      if (sched_setscheduler(0, SCHED_RR, &p) != 0) {
+        csound->Message(csound,"csound: cannot set scheduling policy to SCHED_RR");
+      }
+      else   csound->Message(csound,"csound: setting scheduling policy to SCHED_RR\n");
+    }
+    else {
+      /* nice requested */
+      if (setpriority(PRIO_PROCESS, 0, priority) != 0) {
+        csound->Message(csound,"csound: cannot set nice level to %d",
+                       priority);
+      }
+    }
+    return 0;
+}
+
+
 /* sample conversion routines for playback */
 
 static void MYFLT_to_short(int nSmps, MYFLT *inBuf, int16_t *outBuf, int *seed)
@@ -462,6 +502,7 @@ static int rtrecord_(CSOUND *csound, MYF
 {
     DEVPARAMS *dev;
     int       n, m, err;
+   
 
     dev = (DEVPARAMS*) csound->rtRecord_userdata;
     if (dev->handle == NULL) {
@@ -508,7 +549,7 @@ static void rtplay_(CSOUND *csound, cons
 {
     DEVPARAMS *dev;
     int     n, err;
-
+    
     dev = (DEVPARAMS*) csound->rtPlay_userdata;
     if (dev->handle == NULL)
       return;
@@ -893,14 +934,29 @@ static int midi_out_close_file(CSOUND *c
     return retval;
 }
 
+
+
+
 /* module interface functions */
 
 PUBLIC int csoundModuleCreate(CSOUND *csound)
 {
+
+    int minsched, maxsched, *priority;
+    csound->CreateGlobalVariable(csound, "::priority", sizeof(int));
+    priority = (int *) (csound->QueryGlobalVariable(csound, "::priority"));
+    if (priority == NULL)
+      csound->Message(csound, "warning... could not create global var\n");
+    minsched = -20;
+    maxsched = (int) sched_get_priority_max(SCHED_RR); 
+    csound->CreateConfigurationVariable(csound, "rtscheduler", priority, CSOUNDCFG_INTEGER, 0, &minsched, &maxsched,                      
+                   "RT scheduler priority, alsa module", NULL);
+
     /* nothing to do, report success */
     if (csound->oparms->msglevel & 0x400)
       csound->Message(csound, "ALSA real-time audio and MIDI module "
                       "for Csound by Istvan Varga\n");
+
     return 0;
 }
 
@@ -911,6 +967,16 @@ PUBLIC int csoundModuleInit(CSOUND *csou
     int     i;
     char    buf[9];
 
+    csCfgVariable_t *cfg;
+    int priority;
+    cfg = csound->QueryConfigurationVariable(csound, "rtscheduler");
+    priority = *(cfg->i.p);  
+
+    if(priority != 0) set_scheduler_priority(csound, priority);
+  
+    csound->DeleteConfigurationVariable(csound, "rtscheduler");
+    csound->DestroyGlobalVariable(csound, "::priority");
+
     s = (char*) csound->QueryGlobalVariable(csound, "_RTAUDIO");
     i = 0;
     if (s != NULL) {

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/devel/olpcsound.spec,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- olpcsound.spec	20 Jun 2008 12:00:16 -0000	1.1
+++ olpcsound.spec	25 Oct 2008 14:50:45 -0000	1.2
@@ -1,13 +1,20 @@
 Summary: Csound - sound synthesis language and library, OLPC subset
 Name:   olpcsound        
 Version: 5.08.92
-Release: 2%{?dist}
+Release: 11%{?dist}
 URL: http://csound.sourceforge.net/
 License: LGPLv2+
 Group: Applications/Multimedia
 Source: http://downloads.sourceforge.net/csound/olpcsound-%version.tar.bz2
+Patch0: csd-comment-termination.patch
+Patch1: ogg-opcode-fix.patch
+Patch2: libstdutil-fix.patch
+Patch3: sfont-envelope.patch
+Patch4: jack-pulseaudio.patch
+Patch5: rtalsa-sched.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: swig python scons alsa-lib-devel liblo-devel libsndfile-devel 
+BuildRequires: jack-audio-connection-kit-devel 
 BuildRequires: libpng-devel libjpeg-devel libvorbis-devel libogg-devel gettext python-devel
 %define python_site_dir %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
 
@@ -25,6 +32,12 @@
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 
 %build
 %{_bindir}/scons buildOLPC=1 customCCFLAGS="%{optflags}" customCXXFLAGS="%{optflags}"
@@ -63,6 +76,34 @@
 
 
 %changelog
+* Fri Aug 22 2008  Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-11
+  - removed pulseaudio dependency
+
+* Fri Aug 22 2008  Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-10
+  - fixed jack dependency
+ 
+* Fri Aug 15 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-9
+  - add patches for including jack and pulseaudio modules on the build,
+    and rt scheduler priority setting code to alsa module.
+
+* 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
+
+* Mon Aug 11 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-6
+  - fixed specfile patch numbering
+
+* Mon Aug 11 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-5
+  - fixed CVS tag issue
+
+* Mon Aug 11 2008 Victor Lazzarini <vlazzarini at nuim.ie> - 5.08.92-4
+  - add patch to fix liboggplay linking
+
+* Mon Jul 27 2008  Daniel Drake <dsd at laptop.org> - 5.08.92-3
+  - add patch from CVS to fix csd comment termination parsing
+
 * Wed May 28 2008  Victor.Lazzarini <vlazzarini at nuim.ie> - 5.08.92-2
   - fixed version format in changelog
   - fixed permissions of Opcodes/hrtfopcodes.c and Util/mixer.c in srcs




More information about the scm-commits mailing list