--- zynaddsubfx-2.2.1.orig/src/Synth/LFO.C +++ zynaddsubfx-2.2.1/src/Synth/LFO.C @@ -108,7 +108,12 @@ else out*=lfointensity*amp2; if (lfodelay<0.00001) { if (freqrndenabled==0) x+=incx; - else x+=incx*(incrnd*(1.0-x)+nextincrnd*x); + else { + float tmp=(incrnd*(1.0-x)+nextincrnd*x); + if (tmp>1.0) tmp=1.0; + else if (tmp<0.0) tmp=0.0; + x+=incx*tmp; + }; if (x>=1) { x=fmod(x,1.0); amp1=amp2; @@ -136,6 +141,5 @@ if (freqrndenabled==0) return; incrnd=nextincrnd; nextincrnd=pow(0.5,lfofreqrnd)+RND*(pow(2.0,lfofreqrnd)-1.0); - if (nextincrnd*incx>=0.49999999) nextincrnd=1.0; }; --- zynaddsubfx-2.2.1.orig/src/Params/EnvelopeParams.C +++ zynaddsubfx-2.2.1/src/Params/EnvelopeParams.C @@ -51,7 +51,7 @@ }; REALTYPE EnvelopeParams::getdt(char i){ - REALTYPE result=(pow(2.0,Penvdt[i]/127.0*12.0)-1.0)*10.0;//miliseconds + REALTYPE result=(pow(2.0,Penvdt[(int)i]/127.0*12.0)-1.0)*10.0;//miliseconds return(result); }; --- zynaddsubfx-2.2.1.orig/src/Output/JACKaudiooutput.C +++ zynaddsubfx-2.2.1/src/Output/JACKaudiooutput.C @@ -35,6 +35,7 @@ jackmaster=master_; jackclient=0; char tmpstr[100]; + const char **ports; for (int i=0;i<15;i++){ if (i!=0) snprintf(tmpstr,100,"ZynAddSubFX_%d",i); @@ -50,7 +51,7 @@ fprintf(stderr,"Internal SampleRate = %d\nJack Output SampleRate= %d\n",SAMPLE_RATE,jack_get_sample_rate(jackclient)); if ((unsigned int)jack_get_sample_rate(jackclient)!=(unsigned int) SAMPLE_RATE) - fprintf(stderr,"It is recomanded that the both samplerates to be equal.\n"); + fprintf(stderr,"It is recommended that the both samplerates to be equal.\n"); jack_set_process_callback(jackclient,jackprocess,0); jack_set_sample_rate_callback(jackclient,jacksrate,0); @@ -66,10 +67,20 @@ return(false); }; - /* + + /* jack_connect(jackclient,jack_port_name(outport_left),"alsa_pcm:out_1"); jack_connect(jackclient,jack_port_name(outport_right),"alsa_pcm:out_2"); - */ + */ + + if ((ports = jack_get_ports (jackclient, NULL, NULL, JackPortIsPhysical|JackPortIsInput)) == NULL) + fprintf(stderr,"Cannot connect to jack output, you may hear no sound\n"); else { + if (jack_connect(jackclient,jack_port_name(outport_left),ports[0])) + fprintf(stderr,"Cannot connect to left output port\n"); + if (jack_connect(jackclient,jack_port_name(outport_right),ports[1])) + fprintf(stderr,"Cannot connect to right output port\n"); + } + return(true); }; --- zynaddsubfx-2.2.1.orig/src/Output/OSSaudiooutput.C +++ zynaddsubfx-2.2.1/src/Output/OSSaudiooutput.C @@ -31,6 +31,19 @@ #include "OSSaudiooutput.h" #include "../Misc/Util.h" +#if __BYTE_ORDER == __BIG_ENDIAN +/* borrowed from glib2 */ +#define SHORT_SWAP_LE_BE(val) ((short) ( \ + (short) ((short) (val) >> 8) | \ + (short) ((short) (val) << 8))) + +void swap_endian(short *data, int length) +{ + int i; + for (i = 0; i < length; i += 1, data++) + *data = SHORT_SWAP_LE_BE(*data); +} +#endif OSSaudiooutput::OSSaudiooutput(){ int i; int snd_bitsize=16; @@ -76,6 +89,9 @@ smps[i*2]=(short int) (l*32767.0); smps[i*2+1]=(short int) (r*32767.0); }; +#if __BYTE_ORDER == __BIG_ENDIAN + swap_endian(smps, SOUND_BUFFER_SIZE*4); +#endif write(snd_handle,smps,SOUND_BUFFER_SIZE*4);// *2 because is 16 bit, again * 2 because is stereo }; --- zynaddsubfx-2.2.1.orig/src/UI/BankUI.fl +++ zynaddsubfx-2.2.1/src/UI/BankUI.fl @@ -35,6 +35,8 @@ } {} decl {Bank *bank;} {public } + Function {~BankProcess_()} {return_type virtual + } {code {} {}} } class BankSlot {: {public Fl_Button,BankProcess_} --- zynaddsubfx-2.2.1.orig/src/UI/PartUI.fl +++ zynaddsubfx-2.2.1/src/UI/PartUI.fl @@ -86,6 +86,8 @@ class PartUI_ {} { Function {showparameters(int kititem,int engine)} {return_type virtual } {} + Function {~PartUI_()} {return_type virtual} { code {} {} + } } class PartKitItem {: {public Fl_Group} --- zynaddsubfx-2.2.1.orig/src/UI/VirKeyboard.fl +++ zynaddsubfx-2.2.1/src/UI/VirKeyboard.fl @@ -168,7 +168,8 @@ } Function {presskey(int nk,int exclusive,int type)} {} { code {if (nk>=N_OCT*12) return; -if ((nk<0)&&(exclusive==0)) { +if ((nk<0)) { + if(exclusive==0) relaseallkeys(type); return; }; --- zynaddsubfx-2.2.1.orig/src/main.C +++ zynaddsubfx-2.2.1/src/main.C @@ -90,7 +90,7 @@ * Try to get the realtime priority */ void set_realtime(){ -#ifdef OS_LINUX +#if 0 sched_param sc; sc.sched_priority=50; @@ -230,7 +230,7 @@ */ -void initprogram(){ +void initprogram(int noui){ #ifndef JACKAUDIOOUT #ifndef JACK_RTAUDIOOUT fprintf(stderr,"\nSample Rate = \t\t%d\n",SAMPLE_RATE); @@ -284,7 +284,8 @@ Midi=new NULLMidiIn(); #endif #ifndef DISABLE_GUI - ui=new MasterUI(master,&Pexitprogram); + if (noui==0) + ui=new MasterUI(master,&Pexitprogram); #endif }; @@ -475,8 +476,10 @@ fprintf(stderr,"%s"," -D , --dump\t\t\t\t Dumps midi note ON/OFF commands\n"); fprintf(stderr,"%s"," -U , --no-gui\t\t\t\t Run ZynAddSubFX without user interface\n"); #ifdef JACKAUDIOOUT +#ifdef OSSAUDIOOUT fprintf(stderr,"%s"," -A , --not-use-jack\t\t\t Use OSS/ALSA instead of JACK\n"); #endif +#endif #ifdef OS_WINDOWS fprintf(stderr,"%s","\nWARNING: On Windows systems, only short comandline parameters works.\n"); fprintf(stderr,"%s"," eg. instead '--buffer-size=512' use '-b 512'\n"); @@ -487,7 +490,7 @@ //--------- - initprogram(); + initprogram(noui); if (strlen(loadfile)>1){ int tmp=master->loadXML(loadfile); .