diff options
author | Kjetil S. Matheussen <ksvalast@users.sourceforge.net> | 2004-01-20 16:56:23 +0000 |
---|---|---|
committer | Kjetil S. Matheussen <ksvalast@users.sourceforge.net> | 2004-01-20 16:56:23 +0000 |
commit | 5a2a3440f0c4558258c19a694e1c5d550db06a37 (patch) | |
tree | 82a99cbb9710cdd8cde3bad0307573fc03e7c4aa /supercollider/k_sc~ | |
parent | 84afa8ecc7a7cd68f3477d2ea348c7ff4748a6aa (diff) |
Various tools to make supercollider more convenient to use within PD
svn path=/trunk/; revision=1271
Diffstat (limited to 'supercollider/k_sc~')
-rwxr-xr-x | supercollider/k_sc~/gendasc.py | 49 | ||||
-rw-r--r-- | supercollider/k_sc~/help-k_sc~.pd | 8 | ||||
-rw-r--r-- | supercollider/k_sc~/k_sc~.c | 147 | ||||
-rw-r--r-- | supercollider/k_sc~/makefile | 90 |
4 files changed, 294 insertions, 0 deletions
diff --git a/supercollider/k_sc~/gendasc.py b/supercollider/k_sc~/gendasc.py new file mode 100755 index 00000000..a68cc140 --- /dev/null +++ b/supercollider/k_sc~/gendasc.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +#/* --------------------------- gendasc ----------------------------------- */ +#/* ;; Kjetil S. Matheussen, 2004. */ +#/* */ +#/* This program is free software; you can redistribute it and/or */ +#/* modify it under the terms of the GNU General Public License */ +#/* as published by the Free Software Foundation; either version 2 */ +#/* of the License, or (at your option) any later version. */ +#/* */ +#/* This program is distributed in the hope that it will be useful, */ +#/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +#/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +#/* GNU General Public License for more details. */ +#/* */ +#/* You should have received a copy of the GNU General Public License */ +#/* along with this program; if not, write to the Free Software */ +#/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#/* */ +#/* ---------------------------------------------------------------------------- */ + + +import sys,string,xreadlines + + +path=sys.argv[1] +if path[-1]=="/": + filename=path+"d_dac.c" +else: + filename=path+"/"+"d_dac.c" + + +success=0 +for line in xreadlines.xreadlines(open(filename,"r")): + line=string.replace(line,'adc','from_sc') + line=string.replace(line,'dac','to_sc') + line=string.replace(line,"(t_newmethod)from_sc_new","(t_newmethod)from_sc_newnew") + line=string.replace(line,"(t_newmethod)to_sc_new","(t_newmethod)to_sc_newnew") + sys.stdout.write(line) + if line=='#include "m_pd.h"\n': + print 'static void *from_sc_newnew(t_symbol *s, int argc, t_atom *argv);' + print 'static void *to_sc_newnew(t_symbol *s, int argc, t_atom *argv);' + success=1 + +if success==0: + print "Fix gendasc.py script." + + + diff --git a/supercollider/k_sc~/help-k_sc~.pd b/supercollider/k_sc~/help-k_sc~.pd new file mode 100644 index 00000000..e25d9500 --- /dev/null +++ b/supercollider/k_sc~/help-k_sc~.pd @@ -0,0 +1,8 @@ +#N canvas 0 0 450 300 10; +#X obj 197 62 from_sc~; +#X obj 292 84 to_sc~; +#X obj 285 43 osc~ 500; +#X obj 200 131 dac~; +#X connect 0 0 3 0; +#X connect 0 1 3 1; +#X connect 2 0 1 0; diff --git a/supercollider/k_sc~/k_sc~.c b/supercollider/k_sc~/k_sc~.c new file mode 100644 index 00000000..2b743ad9 --- /dev/null +++ b/supercollider/k_sc~/k_sc~.c @@ -0,0 +1,147 @@ +/* --------------------------- k_sc~ ----------------------------------- */ +/* ;; Kjetil S. Matheussen, 2004. */ +/* */ +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software */ +/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* */ +/* ---------------------------------------------------------------------------- */ + + + +#include "fromto.c" + +#include <stdio.h> +#include <stdbool.h> +#include <jack/jack.h> + + +static int num_ins=0; +static int num_outs=0; + +static int getnumjackchannels(jack_client_t *client,char *regstring){ + int lokke=0; + const char **ports=jack_get_ports(client,regstring,"",0); + if(ports==NULL) return 0; + while(ports[lokke]!=NULL){ + lokke++; + } + return lokke; +} + +static void setupjack(void){ + static bool inited=false; + int lokke; + int num_sc_in,num_sc_out; + + jack_client_t *client; + + if(inited==true) return; + + if(sys_audioapi!=API_JACK){ + post("Error. k_sc~ will not work without jack as the sound API."); + goto apiwasnotjack; + } + + client=jack_client_new("k_sc_tilde"); + + num_sc_in=getnumjackchannels(client,"SuperCollider:in_*"); + num_sc_out=getnumjackchannels(client,"SuperCollider:out_*"); + + if(num_sc_in==0 || num_sc_out==0){ + post("Error. No Supercollider jack ports found."); + goto nosupercolliderportsfound; + } + + num_ins=sys_get_inchannels(); + num_outs=sys_get_outchannels(); + + { + int t1[1]={0}; + int t2[1]={0}; + int t3[1]={num_sc_out+num_ins}; + int t4[1]={num_sc_in+num_outs}; + sys_close_audio(); + sys_open_audio(1,t1, + 1,t3, + 1,t2, + 1,t4, + sys_getsr(),sys_schedadvance/1000,1); + } + + for(lokke=0;lokke<num_sc_in;lokke++){ + char temp[500]; + char temp2[500]; + sprintf(temp,"pure_data_0:output%d",lokke+num_outs); + sprintf(temp2,"SuperCollider:in_%d",lokke+1); + jack_connect(client,temp,temp2); + sprintf(temp,"alsa_pcm:capture_%d",lokke+1); + jack_disconnect(client,temp,temp2); + } + for(lokke=0;lokke<num_sc_out;lokke++){ + char temp[500]; + char temp2[500]; + sprintf(temp,"pure_data_0:input%d",lokke+num_ins); + sprintf(temp2,"SuperCollider:out_%d",lokke+1); + jack_connect(client,temp2,temp); + sprintf(temp,"alsa_pcm:playback_%d",lokke+1); + jack_disconnect(client,temp2,temp); + } + + inited=true; + + nosupercolliderportsfound: + jack_client_close(client); + + + apiwasnotjack: + return; +} + +static void *from_sc_newnew(t_symbol *s, int argc, t_atom *argv){ + int lokke; + t_from_sc *x; + setupjack(); + x=from_sc_new(s,argc,argv); + + for(lokke=0;lokke<x->x_n;lokke++){ + x->x_vec[lokke]+=num_outs; + } + return x; +} + +static void *to_sc_newnew(t_symbol *s, int argc, t_atom *argv){ + int lokke; + t_to_sc *x; + setupjack(); + x=to_sc_new(s,argc,argv); + + for(lokke=0;lokke<x->x_n;lokke++){ + x->x_vec[lokke]+=num_ins; + } + return x; +} + + +static void k_sc_tilde_setup(void){ + d_to_sc_setup(); +} + + +void from_sc_tilde_setup(void){ + k_sc_tilde_setup(); +} + +void to_sc_tilde_setup(void){ + k_sc_tilde_setup(); +} diff --git a/supercollider/k_sc~/makefile b/supercollider/k_sc~/makefile new file mode 100644 index 00000000..3d3eb639 --- /dev/null +++ b/supercollider/k_sc~/makefile @@ -0,0 +1,90 @@ +NAME=k_sc~ +CSYM=k_sc_tilde + +current: pd_linux + +# ----------------------- NT ----------------------- + +pd_nt: $(NAME).dll + +.SUFFIXES: .dll + +PDNTCFLAGS = /W3 /WX /O2 /G6 /DNT /DPD /nologo +VC="C:\Programme\Microsoft Visual Studio\VC98" + +PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude + +PDNTLDIR = $(VC)\Lib +PDNTLIB = $(PDNTLDIR)\libc.lib \ + $(PDNTLDIR)\oldnames.lib \ + $(PDNTLDIR)\kernel32.lib \ + $(PDNTLDIR)\user32.lib \ + $(PDNTLDIR)\uuid.lib \ + c:\pd\bin\pd.lib \ + +.c.dll: + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c $*.c + link /dll /export:$(CSYM)_setup $*.obj $(PDNTLIB) + +# ----------------------- IRIX 5.x ----------------------- + +pd_irix5: $(NAME).pd_irix5 + +.SUFFIXES: .pd_irix5 + +SGICFLAGS5 = -o32 -DPD -DUNIX -DIRIX -O2 + +SGIINCLUDE = -I../../src + +.c.pd_irix5: + cc $(SGICFLAGS5) $(SGIINCLUDE) -o $*.o -c $*.c + ld -elf -shared -rdata_shared -o $*.pd_irix5 $*.o + rm $*.o + +# ----------------------- IRIX 6.x ----------------------- + +pd_irix6: $(NAME).pd_irix6 + +.SUFFIXES: .pd_irix6 + +SGICFLAGS6 = -n32 -DPD -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \ + -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \ + -Ofast=ip32 + +.c.pd_irix6: + cc $(SGICFLAGS6) $(SGIINCLUDE) -o $*.o -c $*.c + ld -n32 -IPA -shared -rdata_shared -o $*.pd_irix6 $*.o + rm $*.o + +# ----------------------- LINUX i386 ----------------------- + +pd_linux: fromto.c $(NAME).pd_linux + +.SUFFIXES: .pd_linux + +LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \ + -Wall -W -Wshadow -Wstrict-prototypes \ + -Wno-unused -Wno-parentheses -Wno-switch + +PDSRCDIR=../../src +LINUXINCLUDE = -I$(PDSRCDIR) + +.c.pd_linux: fromto,c + gcc $(LINUXCFLAGS) $(LINUXINCLUDE) -g -o $*.o -c $*.c + ld -export_dynamic -shared -o $*.pd_linux $*.o -lc -lm -ljack + strip --strip-unneeded $*.pd_linux + rm -f $*.o ../$*.pd_linux + ln -s $*/$*.pd_linux .. + ln -sf $*/$*.pd_linux ../from_sc~.pd_linux + ln -sf $*/$*.pd_linux ../to_sc~.pd_linux + +# ---------------------------------------------------------- + +fromto.c: gendasc.py + ./gendasc.py $(PDSRCDIR) >fromto.c + +install: + cp help-*.pd ../../doc/5.reference + +clean: + rm -f *.o *.pd_* so_locations fromto.c *~ |