diff options
author | Flavien Bridault | 2006-08-28 18:22:44 +0200 |
---|---|---|
committer | Flavien Bridault | 2006-08-28 18:22:44 +0200 |
commit | 7658a3f43d9598d52215904878314a5345d60c08 (patch) | |
tree | 87cc8ab9df6d8a0ed7e10c781588fbde00f41294 | |
parent | 236d5451683cbbac07ae0d534465f21178ca3b77 (diff) | |
parent | e0285ff8d14eff1be12ece29786be0dc93e7ebe2 (diff) |
Merge with git+ssh://fbridault@scm.sourcemage.org/smgl/grimoire.git
-rw-r--r-- | ChangeLog | 3 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/BUILD | 13 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/CONFIGURE | 17 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/DEPENDS | 26 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/DETAILS | 17 | ||||
-rw-r--r-- | audio-creation/zynaddsubfx/HISTORY | 4 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/INSTALL | 14 | ||||
-rwxr-xr-x | audio-creation/zynaddsubfx/PRE_BUILD | 36 | ||||
-rw-r--r-- | audio-creation/zynaddsubfx/zyn_debian.diff | 192 | ||||
-rw-r--r-- | audio-creation/zynaddsubfx/zyn_lash.diff | 428 | ||||
-rw-r--r-- | audio-creation/zynaddsubfx/zyn_unzombify.diff | 20 |
11 files changed, 770 insertions, 0 deletions
@@ -1,3 +1,6 @@ +2006-08-28 Juuso Alasuutari <iuso@sourcemage.org> + * audio-creation/zynaddsubfx: New spell, software synthesizer. + 2006-08-27 Flavien Bridault <vlaaad@sourcemage.org> * disk/video-dvdrip: deprecated in favour of dvdrip (bug #11545) diff --git a/audio-creation/zynaddsubfx/BUILD b/audio-creation/zynaddsubfx/BUILD new file mode 100755 index 0000000000..b700e165b4 --- /dev/null +++ b/audio-creation/zynaddsubfx/BUILD @@ -0,0 +1,13 @@ +# Build standalone synth +if [[ "$BUILD_MODE" != "DSSI plugin" ]]; then + cd src && + make && + cd .. +fi && + +# Build DSSI plugin +if [[ "$BUILD_MODE" != "Standalone synth" ]]; then + cd src_dssi && + make && + cd .. +fi diff --git a/audio-creation/zynaddsubfx/CONFIGURE b/audio-creation/zynaddsubfx/CONFIGURE new file mode 100755 index 0000000000..b429da5637 --- /dev/null +++ b/audio-creation/zynaddsubfx/CONFIGURE @@ -0,0 +1,17 @@ +config_query_list BUILD_MODE "Select build mode:" \ + "Standalone synth" "DSSI plugin" Both && + +if [[ "$BUILD_MODE" == "DSSI plugin" ]]; then + message "${MESSAGE_COLOR}Building DSSI plugin only, MIDI In and" \ + "Audio Out are set automatically to DSSI.${DEFAULT_COLOR}" +else + config_query_list LINUX_MIDIIN "Select MIDI input driver:" \ + ALSA OSS NONE && + config_query_list LINUX_AUDIOOUT "Select audio output driver:" \ + OSS OSS_AND_JACK JACK PA NONE +fi && + +config_query ZYN_EXAMPLES "Install example banks and presets?" y && + +config_query_option ASM_F2I "Use assembler FLOAT to INT conversions?" y \ + YES NO diff --git a/audio-creation/zynaddsubfx/DEPENDS b/audio-creation/zynaddsubfx/DEPENDS new file mode 100755 index 0000000000..3f53b6cb1b --- /dev/null +++ b/audio-creation/zynaddsubfx/DEPENDS @@ -0,0 +1,26 @@ +depends g++ && +depends fftw && +depends mxml && + +if [[ "$BUILD_MODE" != "Standalone synth" ]]; then + depends dssi +fi && + +if [[ "$BUILD_MODE" != "DSSI plugin" ]]; then + if [[ "$LINUX_MIDIIN" == ALSA ]]; then + depends alsa-lib + fi && + case "$LINUX_AUDIOOUT" in + *JACK* ) depends jack;; + PA ) depends portaudio;; + esac +fi && + +if [[ "$LINUX_MIDIIN" == ALSA ]]; then + if [[ "$LINUX_AUDIOOUT" == JACK ]] || + [[ "$LINUX_AUDIOOUT" == OSS_AND_JACK ]]; then + optional_depends lash "" "" "for Linux Audio Session Handler support" + fi +fi && + +optional_depends fltk "" "" "to enable Graphical User Interface" diff --git a/audio-creation/zynaddsubfx/DETAILS b/audio-creation/zynaddsubfx/DETAILS new file mode 100755 index 0000000000..236455a67b --- /dev/null +++ b/audio-creation/zynaddsubfx/DETAILS @@ -0,0 +1,17 @@ + SPELL=zynaddsubfx + VERSION=2.2.1 + SOURCE=ZynAddSubFX-$VERSION.tar.bz2 + SOURCE_URL[0]=$SOURCEFORGE_URL/$SPELL/$SOURCE + SOURCE_HASH=sha512:defc1c0a29a7184ad8fad410dbf615df4f0c746f51682ed14847e70e422850a4146fbca753901b9fc3e8108ad5700304ef1ac9986d240e44f31bfc0c293c5d0a +SOURCE_DIRECTORY=$BUILD_DIRECTORY/ZynAddSubFX-$VERSION + WEB_SITE=http://zynaddsubfx.sourceforge.net/ + LICENSE[0]=GPL + ENTERED=20060828 + KEYWORDS="editors audio" + SHORT="An opensource software synthesizer." +cat << EOF +ZynAddSubFX is a opensource software synthesizer capable of making a +countless number of instruments, from some common heared from expensive +hardware to interesting sounds that you'll boost to an amazing universe +of sounds. +EOF diff --git a/audio-creation/zynaddsubfx/HISTORY b/audio-creation/zynaddsubfx/HISTORY new file mode 100644 index 0000000000..4f2edf2137 --- /dev/null +++ b/audio-creation/zynaddsubfx/HISTORY @@ -0,0 +1,4 @@ +2006-08-28 Juuso Alasuutari <iuso@sourcemage.org> + * DETAILS, CONFIGURE, DEPENDS, PRE_BUILD, BUILD, + INSTALL, HISTORY, zyn_debian.diff, zyn_unzombify.diff, + zyn_lash.diff: created spell diff --git a/audio-creation/zynaddsubfx/INSTALL b/audio-creation/zynaddsubfx/INSTALL new file mode 100755 index 0000000000..5e7683b3fe --- /dev/null +++ b/audio-creation/zynaddsubfx/INSTALL @@ -0,0 +1,14 @@ +if [[ "$BUILD_MODE" != "DSSI plugin" ]]; then + cp src/zynaddsubfx $INSTALL_ROOT/usr/bin/ +fi && + +if [[ "$BUILD_MODE" != "Standalone synth" ]]; then + mkdir -p $INSTALL_ROOT/usr/lib/dssi/ && + cp src_dssi/zynaddsubfx.so $INSTALL_ROOT/usr/lib/dssi/ +fi && + +if [[ "$ZYN_EXAMPLES" == y ]]; then + mkdir -p $INSTALL_ROOT/usr/share/$SPELL/ && + cp -r banks/ $INSTALL_ROOT/usr/share/$SPELL/ && + cp -r presets/ $INSTALL_ROOT/usr/share/$SPELL/ +fi diff --git a/audio-creation/zynaddsubfx/PRE_BUILD b/audio-creation/zynaddsubfx/PRE_BUILD new file mode 100755 index 0000000000..42a62ae8f3 --- /dev/null +++ b/audio-creation/zynaddsubfx/PRE_BUILD @@ -0,0 +1,36 @@ +default_pre_build && +cd $SOURCE_DIRECTORY && + +# Apply bugfixes from Debian +patch -p1 < $SCRIPT_DIRECTORY/zyn_debian.diff && + +# Apply config options shared by standalone & DSSI builds +sedit "s/^ASM_F2I=.*/ASM_F2I=$ASM_F2I/" src/Makefile.inc && +if ! is_depends_enabled $SPELL fltk; then + sedit "s/^DISABLE_GUI=.*/DISABLE_GUI=YES/" src/Makefile.inc +fi && + +# Make a copy of the build dir for DSSI build (if only DSSI is selected +# we can simply rename the existing dir) +if [[ "$BUILD_MODE" != "Standalone synth" ]]; then + if [[ "$BUILD_MODE" == "DSSI plugin" ]]; then + mv src/ src_dssi/ + else + mkdir src_dssi/ && + cp -r src/* src_dssi/ + fi && + sedit "s/^LINUX_DSSI=.*/LINUX_DSSI=YES/" src_dssi/Makefile.inc +fi && + +# Apply JACK unzombify + LASH support patches (do this after the DSSI +# stuff above, borks compile otherwise) +patch -p1 < $SCRIPT_DIRECTORY/zyn_unzombify.diff && +if is_depends_enabled $SPELL lash; then + patch -p1 < $SCRIPT_DIRECTORY/zyn_lash.diff +fi && + +# If standalone is enabled apply midi & audio configs +if [[ "$BUILD_MODE" != "DSSI plugin" ]]; then + sedit "s/^LINUX_MIDIIN=.*/LINUX_MIDIIN=$LINUX_MIDIIN/" src/Makefile.inc && + sedit "s/^LINUX_AUDIOOUT=.*/LINUX_AUDIOOUT=$LINUX_AUDIOOUT/" src/Makefile.inc +fi diff --git a/audio-creation/zynaddsubfx/zyn_debian.diff b/audio-creation/zynaddsubfx/zyn_debian.diff new file mode 100644 index 0000000000..3adcbf770a --- /dev/null +++ b/audio-creation/zynaddsubfx/zyn_debian.diff @@ -0,0 +1,192 @@ +--- 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); diff --git a/audio-creation/zynaddsubfx/zyn_lash.diff b/audio-creation/zynaddsubfx/zyn_lash.diff new file mode 100644 index 0000000000..6937c60368 --- /dev/null +++ b/audio-creation/zynaddsubfx/zyn_lash.diff @@ -0,0 +1,428 @@ +--- a/src/Input/ALSAMidiIn.C 2005-03-14 21:54:28.000000000 +0200 ++++ b/src/Input/ALSAMidiIn.C 2006-08-26 12:32:53.000000000 +0300 +@@ -94,3 +94,14 @@ + }; + + ++int ALSAMidiIn::getalsaid() { ++ if (midi_handle) { ++ snd_seq_client_info_t* seq_info; ++ snd_seq_client_info_malloc(&seq_info); ++ snd_seq_get_client_info(midi_handle, seq_info); ++ int id = snd_seq_client_info_get_client(seq_info); ++ snd_seq_client_info_free(seq_info); ++ return id; ++ } ++ return -1; ++} +--- a/src/Input/ALSAMidiIn.h 2005-03-14 21:54:19.000000000 +0200 ++++ b/src/Input/ALSAMidiIn.h 2006-08-26 12:32:53.000000000 +0300 +@@ -32,6 +32,7 @@ + ALSAMidiIn(); + ~ALSAMidiIn(); + void getmidicmd(MidiCmdType &cmdtype,unsigned char &cmdchan,int *cmdparams); ++ int getalsaid(); + + private: + snd_seq_t *midi_handle; +--- a/src/main.C 2006-08-26 12:31:33.000000000 +0300 ++++ b/src/main.C 2006-08-26 12:32:53.000000000 +0300 +@@ -83,6 +83,10 @@ + OSSaudiooutput *audioout; + #endif + ++#include "Misc/LASHClient.h" ++LASHClient *lash; ++ ++ + MidiIn *Midi; + int Pexitprogram=0;//if the UI set this to 1, the program will exit + +@@ -180,7 +184,20 @@ + void *thread3(void *arg){ + #ifndef DISABLE_GUI + ui->showUI(); +- while (Pexitprogram==0) Fl::wait(); ++ while (Pexitprogram==0) { ++ std::string filename; ++ switch (lash->checkevents(filename)) { ++ case LASHClient::Save: ++ ui->do_save_master(const_cast<char*>(filename.c_str())); ++ lash->confirmevent(LASHClient::Save); ++ break; ++ case LASHClient::Restore: ++ ui->do_load_master(filename.c_str()); ++ lash->confirmevent(LASHClient::Restore); ++ break; ++ } ++ Fl::wait(); ++ } + #endif + return(0); + }; +@@ -313,6 +330,8 @@ + delete(Midi); + delete(master); + ++ delete(lash); ++ + // pthread_mutex_unlock(&master->mutex); + delete(denormalkillbuf); + delete(OscilGen::tmpsmps); +@@ -346,6 +365,9 @@ + + #ifndef VSTAUDIOOUT + int main(int argc, char *argv[]){ ++ ++ lash = new LASHClient(&argc, &argv, &Pexitprogram); ++ + config.init(); + int noui=0; + #ifdef JACKAUDIOOUT +@@ -491,7 +513,13 @@ + //--------- + + initprogram(noui); +- ++ ++ ALSAMidiIn* alsamidi = dynamic_cast<ALSAMidiIn*>(Midi); ++ if (alsamidi) { ++ lash->setalsaid(alsamidi->getalsaid()); ++ lash->setjackname(JACKgetname()); ++ } ++ + if (strlen(loadfile)>1){ + int tmp=master->loadXML(loadfile); + if (tmp<0) { +--- a/src/Makefile 2005-04-28 02:45:52.000000000 +0300 ++++ b/src/Makefile 2006-08-26 12:32:53.000000000 +0300 +@@ -70,6 +70,9 @@ + LIBS+= `pkg-config --libs jack` + endif + ++CXXFLAGS += `pkg-config --cflags lash-1.0` ++LIBS += `pkg-config --libs lash-1.0` ++ + objects=main.o + SUBDIRS=DSP Effects Input Misc Output Params Synth Seq + +--- a/src/Misc/lash/lash.h 1970-01-01 02:00:00.000000000 +0200 ++++ b/src/Misc/lash/lash.h 2006-08-26 12:32:53.000000000 +0300 +@@ -0,0 +1 @@ ++dummy +--- a/src/Misc/LASHClient.C 1970-01-01 02:00:00.000000000 +0200 ++++ b/src/Misc/LASHClient.C 2006-08-26 12:32:53.000000000 +0300 +@@ -0,0 +1,75 @@ ++#include <unistd.h> ++#include <iostream> ++#include <string> ++ ++#include "LASHClient.h" ++ ++ ++LASHClient::LASHClient(int* argc, char*** argv, int* exitflag) { ++ this->exitflag = exitflag; ++ client = lash_init(lash_extract_args(argc, argv), "ZynAddSubFX", ++ LASH_Config_File, LASH_PROTOCOL(2, 0)); ++} ++ ++ ++void LASHClient::setalsaid(int id) { ++ if (lash_enabled(client)) { ++ if (id != -1) ++ lash_alsa_client_id(client, id); ++ } ++} ++ ++ ++void LASHClient::setjackname(const char* name) { ++ if (lash_enabled(client)) { ++ if (name != NULL) ++ lash_jack_client_name(client, name); ++ } ++} ++ ++ ++LASHClient::Event LASHClient::checkevents(std::string& filename) { ++ ++ if (!lash_enabled(client)) ++ return NoEvent; ++ ++ Event received = NoEvent; ++ lash_event_t* event; ++ while (event = lash_get_event(client)) { ++ ++ // save ++ if (lash_event_get_type(event) == LASH_Save_File) { ++ std::cerr<<"LASH event: LASH_Save_File"<<std::endl; ++ filename = std::string(lash_event_get_string(event)) + "/master.xmz"; ++ received = Save; ++ break; ++ } ++ ++ // restore ++ else if (lash_event_get_type(event) == LASH_Restore_File) { ++ std::cerr<<"LASH event: LASH_Restore_File"<<std::endl; ++ filename = std::string(lash_event_get_string(event)) + "/master.xmz"; ++ received = Restore; ++ break; ++ } ++ ++ // quit ++ else if (lash_event_get_type(event) == LASH_Quit) { ++ std::cerr<<"LASH event: LASH_Quit"<<std::endl; ++ *(exitflag) = 1; ++ received = Quit; ++ break; ++ } ++ ++ lash_event_destroy(event); ++ } ++ return received; ++} ++ ++ ++void LASHClient::confirmevent(Event event) { ++ if (event == Save) ++ lash_send_event(client, lash_event_new_with_type(LASH_Save_File)); ++ else if (event == Restore) ++ lash_send_event(client, lash_event_new_with_type(LASH_Restore_File)); ++} +--- a/src/Misc/LASHClient.h 1970-01-01 02:00:00.000000000 +0200 ++++ b/src/Misc/LASHClient.h 2006-08-26 12:32:53.000000000 +0300 +@@ -0,0 +1,35 @@ ++#ifndef LASHClient_h ++#define LASHClient_h ++ ++#include <string> ++#include <pthread.h> ++#include <lash/lash.h> ++ ++ ++class LASHClient { ++ public: ++ ++ enum Event { ++ Save, ++ Restore, ++ Quit, ++ NoEvent ++ }; ++ ++ LASHClient(int* argc, char*** argv, int* exitflag); ++ ++ void setalsaid(int id); ++ void setjackname(const char* name); ++ Event checkevents(std::string& filename); ++ void confirmevent(Event event); ++ ++ private: ++ ++ lash_client_t* client; ++ pthread_t thread; ++ int* exitflag; ++}; ++ ++ ++#endif ++ +--- a/src/Misc/Makefile 2005-03-12 20:16:26.000000000 +0200 ++++ b/src/Misc/Makefile 2006-08-26 12:32:53.000000000 +0300 +@@ -1,6 +1,6 @@ + include ../Makefile.inc + +-objects=Bank.o Master.o Microtonal.o Part.o Util.o Config.o Dump.o XMLwrapper.o ++objects=Bank.o Master.o Microtonal.o Part.o Util.o Config.o Dump.o XMLwrapper.o LASHClient.o + + + all: $(objects) +--- a/src/Misc/Master.C 2005-03-14 21:57:26.000000000 +0200 ++++ b/src/Misc/Master.C 2006-08-26 12:32:53.000000000 +0300 +@@ -640,7 +640,7 @@ + delete(xml); + }; + +-int Master::saveXML(char *filename){ ++int Master::saveXML(const char *filename){ + XMLwrapper *xml=new XMLwrapper(); + + xml->beginbranch("MASTER"); +@@ -654,7 +654,7 @@ + + + +-int Master::loadXML(char *filename){ ++int Master::loadXML(const char *filename){ + XMLwrapper *xml=new XMLwrapper(); + if (xml->loadXMLfile(filename)<0) { + delete(xml); +--- a/src/Misc/Master.h 2005-03-14 21:57:29.000000000 +0200 ++++ b/src/Misc/Master.h 2006-08-26 12:32:53.000000000 +0300 +@@ -43,7 +43,7 @@ + + //saves all settings to a XML file + //returns 0 for ok or <0 if there is an error +- int saveXML(char *filename); ++ int saveXML(const char *filename); + + //this adds the parameters to the XML data + void add2XML(XMLwrapper *xml); +@@ -53,7 +53,7 @@ + + //loads all settings from a XML file + //returns 0 for ok or -1 if there is an error +- int loadXML(char *filename); ++ int loadXML(const char *filename); + void applyparameters(); + + void getfromXML(XMLwrapper *xml); +--- a/src/Misc/XMLwrapper.C 2005-04-13 01:09:34.000000000 +0300 ++++ b/src/Misc/XMLwrapper.C 2006-08-26 12:32:53.000000000 +0300 +@@ -162,7 +162,7 @@ + + /* SAVE XML members */ + +-int XMLwrapper::saveXMLfile(char *filename){ ++int XMLwrapper::saveXMLfile(const char *filename){ + char *xmldata=getXMLdata(); + if (xmldata==NULL) return(-2); + +--- a/src/Misc/XMLwrapper.h 2005-03-14 21:57:17.000000000 +0200 ++++ b/src/Misc/XMLwrapper.h 2006-08-26 12:32:53.000000000 +0300 +@@ -43,7 +43,7 @@ + /********************************/ + + //returns 0 if ok or -1 if the file cannot be saved +- int saveXMLfile(char *filename); ++ int saveXMLfile(const char *filename); + + //returns the new allocated string that contains the XML data (used for clipboard) + //the string is NULL terminated +--- a/src/Output/JACKaudiooutput.C 2006-08-26 12:31:39.000000000 +0300 ++++ b/src/Output/JACKaudiooutput.C 2006-08-26 13:09:07.000000000 +0300 +@@ -25,6 +25,7 @@ + + Master *jackmaster; + jack_client_t *jackclient; ++char jackname[100]; + jack_port_t *outport_left,*outport_right; + + int jackprocess(jack_nframes_t nframes,void *arg); +@@ -34,13 +35,12 @@ + bool JACKaudiooutputinit(Master *master_){ + 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); +- else snprintf(tmpstr,100,"ZynAddSubFX"); +- jackclient=jack_client_new(tmpstr); ++ if (i!=0) snprintf(jackname,100,"ZynAddSubFX_%d",i); ++ else snprintf(jackname,100,"ZynAddSubFX"); ++ jackclient=jack_client_new(jackname); + if (jackclient!=0) break; + }; + +@@ -113,4 +113,8 @@ + }; + + +- ++const char* JACKgetname() { ++ if (jackclient != NULL) ++ return jackname; ++ return NULL; ++} +--- a/src/Output/JACKaudiooutput.h 2005-03-12 20:16:26.000000000 +0200 ++++ b/src/Output/JACKaudiooutput.h 2006-08-26 12:32:53.000000000 +0300 +@@ -40,6 +40,8 @@ + + bool JACKaudiooutputinit(Master *master_); + void JACKfinish(); ++const char* JACKgetname(); ++ + + #endif + +--- a/src/UI/MasterUI.fl 2005-04-08 22:50:53.000000000 +0300 ++++ b/src/UI/MasterUI.fl 2006-08-26 12:32:53.000000000 +0300 +@@ -413,7 +413,8 @@ + decl {BankUI *bankui;} {} + } + +-class MasterUI {} { ++class MasterUI {open ++} { + Function {make_window()} {} { + Fl_Window masterwindow { + label zynaddsubfx +@@ -424,7 +425,7 @@ + config.save(); + *exitprogram=1; + }; +-\#endif} selected ++\#endif} + xywh {353 127 390 465} type Double hide + } { + Fl_Menu_Bar mastermenu { +@@ -1701,11 +1702,16 @@ + + updatepanel();} {} + } +- Function {do_load_master()} {} { +- code {char *filename; +-filename=fl_file_chooser("Open:","({*.xmz})",NULL,0); +-if (filename==NULL) return; +- ++ Function {do_load_master(const char* file = NULL)} {selected ++ } { ++ code {const char *filename; ++ if (file == NULL) { ++ filename=fl_file_chooser("Open:","({*.xmz})",NULL,0); ++ if (filename==NULL) return; ++ } ++ else { ++ filename = file; ++ } + + pthread_mutex_lock(&master->mutex); + //clear all parameters +@@ -1725,20 +1731,23 @@ + if (result==-10) fl_alert("Error: Could not load the file\\nbecause it is not a zynaddsubfx parameters file."); + else if (result<0) fl_alert("Error: Could not load the file.");} {} + } +- Function {do_save_master()} {} { ++ Function {do_save_master(char* file = NULL)} {} { + code {char *filename; +-int result=0; +- +-filename=fl_file_chooser("Save:","({*.xmz})",NULL,0); +-if (filename==NULL) return; +-filename=fl_filename_setext(filename,".xmz"); +- +-result=fileexists(filename); +-if (result) { +- result=0; +- if (!fl_ask("The file exists. \\nOverwrite it?")) return; +- +-}; ++ int result=0; ++ if (file == NULL) { ++ filename=fl_file_chooser("Save:","({*.xmz})",NULL,0); ++ if (filename==NULL) return; ++ filename=fl_filename_setext(filename,".xmz"); ++ result=fileexists(filename); ++ if (result) { ++ result=0; ++ if (!fl_ask("The file exists. Overwrite it?")) return; ++ ++ } ++ } ++ else { ++ filename = file; ++ } + + + pthread_mutex_lock(&master->mutex); diff --git a/audio-creation/zynaddsubfx/zyn_unzombify.diff b/audio-creation/zynaddsubfx/zyn_unzombify.diff new file mode 100644 index 0000000000..0a2cfe1405 --- /dev/null +++ b/audio-creation/zynaddsubfx/zyn_unzombify.diff @@ -0,0 +1,20 @@ +--- a/src/Output/JACKaudiooutput.C 2006-08-26 13:18:19.000000000 +0300 ++++ b/src/Output/JACKaudiooutput.C 2006-08-26 13:19:15.000000000 +0300 +@@ -88,9 +88,14 @@ + jack_default_audio_sample_t *outl=(jack_default_audio_sample_t *) jack_port_get_buffer (outport_left, nframes); + jack_default_audio_sample_t *outr=(jack_default_audio_sample_t *) jack_port_get_buffer (outport_right, nframes); + +- pthread_mutex_lock(&jackmaster->mutex); +- jackmaster->GetAudioOutSamples(nframes,jack_get_sample_rate(jackclient),outl,outr); +- pthread_mutex_unlock(&jackmaster->mutex); ++ if (!pthread_mutex_trylock(&jackmaster->mutex)) { ++ jackmaster->GetAudioOutSamples(nframes,jack_get_sample_rate(jackclient),outl,outr); ++ pthread_mutex_unlock(&jackmaster->mutex); ++ } ++ else { ++ memset(outl, 0, sizeof(jack_default_audio_sample_t) * nframes); ++ memset(outr, 0, sizeof(jack_default_audio_sample_t) * nframes); ++ } + + return(0); + }; |