diff options
-rw-r--r-- | supercollider/README | 45 | ||||
-rw-r--r-- | supercollider/example/fileplayer.sc | 18 | ||||
-rw-r--r-- | supercollider/example/help-sc.pd | 33 | ||||
-rw-r--r-- | supercollider/example/supertest.py | 47 | ||||
-rw-r--r-- | supercollider/extMain.sc | 18 | ||||
-rwxr-xr-x | supercollider/python/OSC.py | 230 | ||||
-rw-r--r-- | supercollider/python/supercollider.py | 142 |
7 files changed, 0 insertions, 533 deletions
diff --git a/supercollider/README b/supercollider/README deleted file mode 100644 index 642fd5fb..00000000 --- a/supercollider/README +++ /dev/null @@ -1,45 +0,0 @@ - - -Here are some programs and stuff to make using SuperCollider more -convenient to use within PD. - -If you have never used SuperCollider together with PD before, here -is a quick start: - --Go to supercollider.sf.net and install supercollider. Make sure - you get it to work. - --Replace the linux/extMain.sc file with the one in this directory. - Usually found in /usr/share/supercollider/linux/ or something. - The standard distribution of the supercollider language does this - crazy thing about shutting down the server. Stop that madness. - --Go to the k_sc~ directory and compile up the k_sc~ external. - This external automates the jack routing so that you get the - jack output from the supercollider server into an object called - "sc_in~". There is also an object called "sc_from~" that sends - audio signals to the jack input on the supercollider server. - --Go to the python directory, and copy the files in there to - your python site-packages directory. Usually placed here: - /usr/lib/python2.x/site-packages/ - --Change directory to the example directory and try to run the - help-sc.pd patch. Make sure you have at least PD v0.37, and - the latest version of the pyext external. (Earlier versions - than cvs from 22.2.2004 should not be used.) - - -If you have a general questions (compiling it up, error messages), -don't ask me directly; ask on the pd-list or on the supercollider -list. - - - -Enjoy! - -Kjetil S. Matheussen -k.s.matheussen@notam02.no - - - diff --git a/supercollider/example/fileplayer.sc b/supercollider/example/fileplayer.sc deleted file mode 100644 index f8e880c4..00000000 --- a/supercollider/example/fileplayer.sc +++ /dev/null @@ -1,18 +0,0 @@ - -/* - Short example of a supercollider3 synth. - -Kjetil S. Matheussen, 2004. - - To load this one from inside PD, call:' - - server.evalSynth("fileplayer") - -*/ - - -arg out=0,bufnum,rate=100,pan=0; - -Out.ar( out, - Pan2.ar(PlayBuf.ar(1,bufnum,rate/100,0,0,1),pan/100,0.8) -) - diff --git a/supercollider/example/help-sc.pd b/supercollider/example/help-sc.pd deleted file mode 100644 index 994e3067..00000000 --- a/supercollider/example/help-sc.pd +++ /dev/null @@ -1,33 +0,0 @@ -#N canvas 447 151 646 543 10; -#X obj 366 242 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 --262144 -1 -1 -68 256; -#X obj 455 237 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 --262144 -1 -1 -57.4803 256; -#X obj 458 207 hsl 128 15 -100 100 0 0 empty empty empty -2 -6 0 8 --262144 -1 -1 2700 1; -#X msg 366 218 -120; -#X obj 273 110 dac~; -#X msg 50 274 reload; -#X msg 109 171 start /home/kjetil/mus2840/hh1.wav; -#X msg 288 265 stop; -#X msg 365 267 rate \$1; -#X msg 455 264 pan \$1; -#X obj 260 66 k_jack~ supercollider; -#X obj 71 325 pyext supertest supertest; -#X text 15 15 Play a soundfile on the supercollider server.; -#X text 333 67 <- We get the supercollider sound here.; -#X text 432 503 -Kjetil S. Matheussen \, 2004; -#X msg 28 487 \; pd dsp 1; -#X obj 28 456 loadbang; -#X connect 0 0 8 0; -#X connect 1 0 9 0; -#X connect 2 0 1 0; -#X connect 3 0 0 0; -#X connect 5 0 11 0; -#X connect 6 0 11 1; -#X connect 7 0 11 1; -#X connect 8 0 11 1; -#X connect 9 0 11 1; -#X connect 10 0 4 0; -#X connect 10 1 4 1; -#X connect 16 0 15 0; diff --git a/supercollider/example/supertest.py b/supercollider/example/supertest.py deleted file mode 100644 index 5c1a3172..00000000 --- a/supercollider/example/supertest.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python - - -import pyext,os,traceback -import supercollider - -sc=supercollider - - -class supertest(pyext._class): - _inlets=1 - _outlets=0 - - def start_1(self,arg): - try: - self.buffer=sc.BufferRead(arg) - self.bsynth=sc.Synth("fileplayer",["bufnum",self.buffer.id]) - except: - traceback.print_exc() - - def stop_1(self): - try: - del self.bsynth - except: - traceback.print_exc() - - def pan_1(self,val): - try: - self.bsynth.set("pan",val) - except: - traceback.print_exc() - - def rate_1(self,rate): - try: - self.bsynth.set("rate",rate) - except: - traceback.print_exc() - - def __init__(self): - try: - server=sc.localServer - server.dumpOSC(3) - server.evalSynth("fileplayer"); - except: - traceback.print_exc() - - diff --git a/supercollider/extMain.sc b/supercollider/extMain.sc deleted file mode 100644 index 56ec7660..00000000 --- a/supercollider/extMain.sc +++ /dev/null @@ -1,18 +0,0 @@ -+ Main { - startup { - super.startup; - // set the 's' interpreter variable to the default server. - interpreter.s = Server.local; - Server.local.options.numOutputBusChannels = 8; - Server.local.options.numInputBusChannels = 8; - Server.local.options.memSize = 8192; - } - - shutdown { // at recompile, quit - //Server.quitAll; - //super.shutdown; - } - - newSCWindow { - } -} diff --git a/supercollider/python/OSC.py b/supercollider/python/OSC.py deleted file mode 100755 index 7c3c20f5..00000000 --- a/supercollider/python/OSC.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env python -# ====================================================================== -# file: OSC.py -# author: stefan kersten <steve@k-hornz.de> -# contents: OSC client module for python -# license: public domain -# ====================================================================== -# $Id: OSC.py,v 1.1 2004-01-20 16:54:44 ksvalast Exp $ -# ====================================================================== -# copyright (c) 2000 stefan kersten -# ====================================================================== -# this module provides simple OSC client functionality -# usage examples down at the end of the file -# ====================================================================== - -__revision__ = "$Revision: 1.1 $" - -# ====================================================================== -# imports - -import cStringIO, exceptions, math, socket, struct, time, types - -# ====================================================================== -# constants - -SECONDS_UTC_TO_UNIX_EPOCH = 2208988800.0 -FLOAT_TO_INT_SCALE = pow(2.0, 32.0) - -# ====================================================================== -# types - -class Value: - """Abstract OSC value.""" - def __init__(self, value): - self.value = value - - def binary_value(self): - pass - - def type_tag(self): - pass - -class Int(Value): - """32 bit integer value.""" - def __init__(self, value): - Value.__init__(self, long(value)) - - def binary_value(self): - return struct.pack('!l', self.value) - - def type_tag(self): - return 'i' - -class Float(Value): - """32 bit floating point value.""" - def __init__(self, value): - Value.__init__(self, float(value)) - - def binary_value(self): - return struct.pack('!f', self.value) - - def type_tag(self): - return 'f' - -class String(Value): - """Null-terminated string padded to multiples of 4 byte.""" - def __init__(self, value): - Value.__init__(self, str(value)) - - def binary_value(self): - v = self.value - l = len(v) - return struct.pack('%ds%dx' % (l, self.pad_amount(l)), v) - - def type_tag(self): - return 's' - - def pad_amount(self, len): - return 4 - (len % 4) - -class Time(Value): - """64 bit timetag in NTP format.""" - def __init__(self, value): - Value.__init__(self, float(value)) - - def __add__(self, time): - return Time(float(self.value + time.value)) - - def binary_value(self): - t = self.value - # FIXME: how to convert without overflows? - s = long(t) - f = long(math.fmod(t, 1.0)*FLOAT_TO_INT_SCALE) - return struct.pack('!LL', s, f) - -# ====================================================================== -# utilities - -time_module = time -def time(): - """Return current time as float in OSC format.""" - return SECONDS_UTC_TO_UNIX_EPOCH + time_module.time() - -# ====================================================================== -# classes - -class Packet: - """Abstract base class for all OSC-related containers. - - Has methods for retrieving the proper binary representation - and its size. - """ - def __init__(self, packets): - stream = cStringIO.StringIO() - self._write_contents(packets, stream) - self._data = stream.getvalue() - - def get_packet(self): - """Return the binary representation of the receiver's contents. - - This data is in the proper OSC format and can be sent over a - socket. - """ - return self._data - - def get_size(self): - """Return the size of the receiver's binary data.""" - return len(self._data) - - def _write_contents(self, packets, stream): - """Write packets on stream. - - Private. - - Override in subclasses for specific behavior. - """ - pass - - def __repr__(self): - return '<' + \ - str(self.__class__.__name__) + \ - ' instance, size=' + \ - str(self.get_size()) + \ - '>' - - def sendto(self, host, port): - """Send the receiver's data through a UDP socket.""" - s = socket.socket(socket.SOCK_DGRAM, socket.AF_INET) - packet = self.get_packet() - s.sendto(packet, (host, port)) - s.close() - - def sendlocal(self, port): - """Send the receiver's data through a UDP socket locally.""" - self.sendto('localhost', port) - -def _value(x): - """Convert x(int, float or string) to an OSC object.""" - t = type(x) - if t == types.FloatType: - return Float(x) - if t == types.IntType or t == types.LongType: - return Int(x) - # return string representation as default - return String(str(x)) - -class Message(Packet): - """Single OSC message with arguments. - - Message(address, *args) -> Message - - address -- OSC address string - *args -- message argument list - """ - def __init__(self, address, args=[]): - Packet.__init__(self, [String(address)] + map(lambda x: _value(x), args)) - - def _write_contents(self, args, stream): - t_stream = cStringIO.StringIO() # tag stream - v_stream = cStringIO.StringIO() # value stream - # open signature string - t_stream.write(',') - # collect tags and arguments - for v in args[1:]: - t_stream.write(v.type_tag()) - v_stream.write(v.binary_value()) - # write address - stream.write(args[0].binary_value()) - # write signature - stream.write(String(t_stream.getvalue()).binary_value()) - # write arguments - stream.write(v_stream.getvalue()) - -class Bundle(Packet): - """OSC container type with timing information. - - Bundle(time, packets) -> Bundle - - time -- floating point timetag in OSC units - packets -- array of Packet(s) - """ - def __init__(self, time, packets): - Packet.__init__(self, [Time(time)] + packets) - - def _write_contents(self, args, stream): - # write '#bundle' preamble - stream.write(String('#bundle').binary_value()) - # write timetag - stream.write(args[0].binary_value()) - # write packets, prefixed with a byte count - for packet in args[1:]: - data = packet.get_packet() - size = len(data) - stream.write(Int(size).binary_value()) - stream.write(data) - -def test(port): - """Some example messages and bundles, sent to port.""" - Message("/filter/cutoff", [145.1232]).sendlocal(port) - Message("/http", ["www dot k-hornz dot de", 12, 3.41, "bulb"]).sendlocal(port) - #print Int(len(Message("/msg").get_packet())).binary_value() - Bundle(0.1, [Message("/fubar")]).sendlocal(port) - Bundle(time(), [Message("/msg", [1.0, "+", 1, 61, "0"]), Message("/bang!")]).sendlocal(port) - -if __name__ == "__main__": - """Run dumpOSC on port 10000.""" - test(10000) - -# EOF -# ====================================================================== diff --git a/supercollider/python/supercollider.py b/supercollider/python/supercollider.py deleted file mode 100644 index 88dbaf4a..00000000 --- a/supercollider/python/supercollider.py +++ /dev/null @@ -1,142 +0,0 @@ - -#/* --------------------------- supercollider.py ----------------------------------- */ -#/* ;; 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. */ -#/* */ -#/* ---------------------------------------------------------------------------- */ - - - -# This file is far from complete, but its a start. -# -# All variables, classes and methods that are implemented in this file are -# tested, and should work. -# -# It would be easy to read the Supercollider server command reference, and just -# implement the missing methods and classes blindly. But I don't want to. When the -# implementation is so straight forward as here, its better to it properly. -# -# So if you need more functionality, you can either just read the Supercollider -# server command reference manual and implement the functionality directly -# in this file (and send me the changes afterwards!), or send me some python -# code you want to make work with this module, and I'll try to -# implement it for you. -# -# Serious missing functionality: Have no way to get reply from server. Have to -# find a more advanced OSC implementation than OSC.py 1.2 by Stefan Kersten used now. -# -# -Kjetil. - - -import OSC,tempfile,xreadlines,os,time,types - -standardip="127.0.0.1" -standardport=57110 -startnode=1001; -startbuffer=0; - -sc_head=0 -sc_tail=1 -sc_before=2 -sc_after=3 -sc_replace=4 - - -class Server: - def __init__(self,magic,ip=standardip,port=standardport): - if magic!=1234: - print "Server.__init__: Are you sure you know what you are doing?" - print "Seems like you probably wanted to use the 'localServer' variable." - if ip!=standardip: - print "Warning. Ip only supprted for evalSynth (but not tested)." - self.ip=ip - self.port=port - self.freenode=startnode; - self.freebuffer=startbuffer; - def sendMsg(self,command,*args): - def floatToInt(x): - if type(x)==types.FloatType: - return int(x) - else: - return x - OSC.Message(command,map(floatToInt,args)).sendlocal(self.port) - def sendgetMsg(self,command,*args): - apply(self.sendMsg,[command]+list(args)) - # Simulated (and most probably extremely unaccurate) time used to get a reply. Use with care. - time.sleep(1) - def dumpOSC(self,code): - self.sendMsg("dumpOSC",code); - def nextNodeID(self): - self.freenode+=1; - return self.freenode-1 - def nextBufferID(self): - self.freebuffer+=1; - return self.freebuffer-1; - def loadSynthDef(self,name): - self.sendgetMsg("/d_load",name) - def loadSynthDefDir(self,dir): - self.sendMsg("/d_loadDir",dir) - def evalSynth(self,synthname): - tmpname=tempfile.mktemp(".sc") - outfile=open(tmpname,"w") - outfile.write('SynthDef("'+synthname+'",{') - for line in xreadlines.xreadlines(open(synthname+".sc","r")): - outfile.write(line) - outfile.write('}).send(Server.new(\localhost,NetAddr("'+self.ip+'",'+str(self.port)+')););\n') - outfile.close() - os.system("sclang "+tmpname) - os.system("rm "+tmpname) - -localServer=Server(1234) - - -class Node: - def __del__(self): - self.server.sendMsg("/n_free",self.id) - def set(self,*args): - apply(self.server.sendMsg,["/n_set",self.id]+list(args)) - - -class Synth(Node): - global localServer - def __init__(self,name,args=[],position=sc_tail,server=localServer): - self.server=server - self.id=server.nextNodeID() - apply(self.server.sendMsg,["/s_new",name,self.id,position,0]+args) - - -class BufferSuper: - def __init__(self,server,numFrames=0,numChannels=1,filename="",startFrame=0): - self.server=server - self.id=server.nextBufferID() - if numChannels==-1: - server.sendMsg("/b_allocRead",self.id,filename,startFrame,numFrames,0) - else: - server.sendMsg("/b_alloc",self.id,numFrames,numChannels,0) - - def __del__(self): - self.server.sendMsg("/b_free",self.id) - - -class Buffer(BufferSuper): - def __init__(self,numFrames,numChannels=1,server=localServer): - BufferSuper.__init__(self,server,numFrames,numChannels) - -class BufferRead(BufferSuper): - def __init__(self,filename,startFrame=0,numFrames=0,server=localServer): - BufferSuper.__init__(self,server,numFrames,-1,filename,startFrame) - - |