<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
	<id>tag:n2.nabble.com,2006:forum-2681767</id>
	<title>Nabble - SuperCollider Developers New (Use this!!!!)</title>
	<updated>2010-02-09T11:03:30Z</updated>
	<link rel="self" type="application/atom+xml" href="http://n2.nabble.com/SuperCollider-Developers-New-Use-this-ft2681767.xml" />
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SuperCollider-Developers-New-Use-this-f2681767.html" />
	<subtitle type="html">&lt;b&gt;N.B. You must subscribe to sc-dev or sc-dev-acl (for non-delivery) in order to post from this forum.
&lt;br&gt;&lt;br&gt;
&lt;a href=&quot;mailto:majordomo@lists.bham.ac.uk?body=subscribe%20sc-dev-acl&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;Add an address to sc-dev-acl&lt;/a&gt;&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
This list is addressed mainly to people developing SuperCollider source code. Contributions, questions, comments on any level of the code (C, C++ or SuperCollider class libraries) are covered here. For information on the list, please see: &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
A complete archive of the list (including the previous create.ucsb.edu incarnation) is available at: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
You can search the archive here: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
This list was created with mass migration of subscribers from the old create.ucsb.edu list on June 16, 2008. Please contact sc-dev-owner@lists.bham.ac.uk for further list details or queries concerning the list.</subtitle>
	
<entry>
	<id>tag:n2.nabble.com,2006:post-4543202</id>
	<title>SF.net SVN: supercollider:[9822] trunk</title>
	<published>2010-02-09T11:03:30Z</published>
	<updated>2010-02-09T11:03:30Z</updated>
	<author>
		<name>danstowell</name>
	</author>
	<content type="html">Revision: 9822
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9822&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9822&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; danstowell
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 19:03:30 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;reorganise furniture: couple of small leftovers from folder moves
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Standalone Resources/
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Standalone Resources/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/lib/iphone/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/xtralibs/
&lt;br&gt;&lt;br&gt;&lt;br&gt;Property changes on: trunk/mac/Standalone Resources
&lt;br&gt;___________________________________________________________________
&lt;br&gt;Added: svn:mergeinfo
&lt;br&gt;&amp;nbsp; &amp;nbsp;+ 
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9822-trunk-tp4543202p4543202.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4543184</id>
	<title>SF.net SVN: quarks:[1374] DataNetwork</title>
	<published>2010-02-09T10:59:49Z</published>
	<updated>2010-02-09T10:59:49Z</updated>
	<author>
		<name>nescivi-2</name>
	</author>
	<content type="html">Revision: 1374
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://quarks.svn.sourceforge.net/quarks/?rev=1374&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://quarks.svn.sourceforge.net/quarks/?rev=1374&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; nescivi
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 18:59:49 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;added methods for mapping data nodes to sensestage minibee nodes by clients
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; DataNetwork/DataNetwork.sc
&lt;br&gt;&amp;nbsp; &amp;nbsp; DataNetwork/SWDataNetworkOSC.sc
&lt;br&gt;&lt;br&gt;Modified: DataNetwork/DataNetwork.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- DataNetwork/DataNetwork.sc	2010-02-09 18:58:34 UTC (rev 1373)
&lt;br&gt;+++ DataNetwork/DataNetwork.sc	2010-02-09 18:59:49 UTC (rev 1374)
&lt;br&gt;@@ -24,6 +24,8 @@
&lt;br&gt;&amp;nbsp;	var &amp;lt;recTime = false;
&lt;br&gt;&amp;nbsp;	var &amp;lt;timelogfile;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	var &amp;lt;&amp;gt;hive;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	*new{ 
&lt;br&gt;&amp;nbsp;		^super.new.init;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -123,6 +125,18 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	*/
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	mapHivePWM{ |nodeID, miniBee|
&lt;br&gt;+		if ( hive.notNil ){
&lt;br&gt;+			this.nodes[ nodeID ].action = { |data| hive.setPWM( miniBee, data) };
&lt;br&gt;+		};
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	mapHiveDig{ |nodeID, miniBee|
&lt;br&gt;+		if ( hive.notNil ){
&lt;br&gt;+			this.nodes[ nodeID ].action = { |data| hive.setDigital( miniBee, data) };
&lt;br&gt;+		};
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	registerNode{ |id,sz,type|
&lt;br&gt;&amp;nbsp;		var ret,key,nnode;
&lt;br&gt;&amp;nbsp;		if ( type == -1){
&lt;br&gt;@@ -326,7 +340,7 @@
&lt;br&gt;&amp;nbsp;			recTask.reset.play;
&lt;br&gt;&amp;nbsp;		}{
&lt;br&gt;&amp;nbsp;			recTask.stop;
&lt;br&gt;-			logfile.close;
&lt;br&gt;+			if ( logfile.notNil ){ logfile.close; };
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: DataNetwork/SWDataNetworkOSC.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- DataNetwork/SWDataNetworkOSC.sc	2010-02-09 18:58:34 UTC (rev 1373)
&lt;br&gt;+++ DataNetwork/SWDataNetworkOSC.sc	2010-02-09 18:59:49 UTC (rev 1374)
&lt;br&gt;@@ -231,7 +231,21 @@
&lt;br&gt;&amp;nbsp;				if ( verbose &amp;gt; 1, { msg.postln; });
&lt;br&gt;&amp;nbsp;				if ( msg.size &amp;gt; 1 ){
&lt;br&gt;&amp;nbsp;					addr.port = msg[1]; this.removeAll( addr, msg[2] );
&lt;br&gt;+				}{ if ( verbose &amp;gt; 0, { &amp;quot;missing port in message&amp;quot;.postln; }); };			}),
&lt;br&gt;+
&lt;br&gt;+			/// MAPPING TO MINIBEE OUTPUT
&lt;br&gt;+
&lt;br&gt;+			OSCresponderNode( nil, '/map/minibee/pwm', { |t,r,msg,addr|
&lt;br&gt;+				if ( verbose &amp;gt; 1, { msg.postln; });
&lt;br&gt;+				if ( msg.size &amp;gt; 1 ){
&lt;br&gt;+					addr.port = msg[1]; this.mapHivePWM( addr, msg[2], msg.copyToEnd( 3 ) );
&lt;br&gt;+				}{ if ( verbose &amp;gt; 0, { &amp;quot;missing port in message&amp;quot;.postln; }); };			}),
&lt;br&gt;+			OSCresponderNode( nil, '/map/minibee/digital', { |t,r,msg,addr|
&lt;br&gt;+				if ( verbose &amp;gt; 1, { msg.postln; });
&lt;br&gt;+				if ( msg.size &amp;gt; 1 ){
&lt;br&gt;+					addr.port = msg[1]; this.mapHiveDig( addr, msg[2], msg.copyToEnd( 3 ) );
&lt;br&gt;&amp;nbsp;				}{ if ( verbose &amp;gt; 0, { &amp;quot;missing port in message&amp;quot;.postln; }); };			})
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		];
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		responders.do{ |it| it.add };
&lt;br&gt;@@ -828,6 +842,57 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	mapHivePWM{ |addr,name,msg|
&lt;br&gt;+		var there,node;
&lt;br&gt;+		there = this.findClient( addr, name.asSymbol );
&lt;br&gt;+		if ( there.isNil, {
&lt;br&gt;+			this.errorMsg( addr, &amp;quot;/map/minibee/pwm&amp;quot;, 15, [name] );
&lt;br&gt;+		},{
&lt;br&gt;+			msg[0] = msg[0].asInteger;
&lt;br&gt;+			node = network.nodes.at( msg[0] );
&lt;br&gt;+			if ( node.notNil,
&lt;br&gt;+				{
&lt;br&gt;+					if ( there.checkForSetter(node), {
&lt;br&gt;+						// old version:
&lt;br&gt;+						//	if ( setters.at( msg[0] ) == addr, {
&lt;br&gt;+						network.mapHivePWM( msg[0], msg[1] );
&lt;br&gt;+						addr.sendMsg( '/mapped/node', msg[0] );
&lt;br&gt;+					},{
&lt;br&gt;+						this.errorMsg( addr, &amp;quot;/map/minibee/pwm&amp;quot;, 4, msg );
&lt;br&gt;+					});
&lt;br&gt;+				},{
&lt;br&gt;+					this.errorMsg( addr, &amp;quot;/map/minibee/pwm&amp;quot;, 5, msg );
&lt;br&gt;+				});
&lt;br&gt;+			this.logMsg( &amp;quot;/map/minibee/pwm:&amp;quot; + msg[0] + &amp;quot; from client with IP&amp;quot;+addr.ip+&amp;quot;and port&amp;quot;+addr.port );
&lt;br&gt;+		});
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+	mapHiveDig{ |addr,name,msg|
&lt;br&gt;+		var there,node;
&lt;br&gt;+		there = this.findClient( addr, name.asSymbol );
&lt;br&gt;+		if ( there.isNil, {
&lt;br&gt;+			this.errorMsg( addr, &amp;quot;/map/minibee/digital&amp;quot;, 15, [name] );
&lt;br&gt;+		},{
&lt;br&gt;+			msg[0] = msg[0].asInteger;
&lt;br&gt;+			node = network.nodes.at( msg[0] );
&lt;br&gt;+			if ( node.notNil,
&lt;br&gt;+				{
&lt;br&gt;+					if ( there.checkForSetter(node), {
&lt;br&gt;+						// old version:
&lt;br&gt;+						//	if ( setters.at( msg[0] ) == addr, {
&lt;br&gt;+						network.mapHiveDig( msg[0], msg[1] );
&lt;br&gt;+						addr.sendMsg( '/mapped/node', msg[0] );
&lt;br&gt;+					},{
&lt;br&gt;+						this.errorMsg( addr, &amp;quot;/map/minibee/digital&amp;quot;, 4, msg );
&lt;br&gt;+					});
&lt;br&gt;+				},{
&lt;br&gt;+					this.errorMsg( addr, &amp;quot;/map/minibee/digital&amp;quot;, 5, msg );
&lt;br&gt;+				});
&lt;br&gt;+			this.logMsg( &amp;quot;/map/minibee/digital:&amp;quot; + msg[0] + &amp;quot; from client with IP&amp;quot;+addr.ip+&amp;quot;and port&amp;quot;+addr.port );
&lt;br&gt;+		});
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	/// TODO: why am I using a different tactic here??? Fix check for name!
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	labelNode{ |addr,name,msg|
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-quarks-1374-DataNetwork-tp4543184p4543184.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4543169</id>
	<title>SF.net SVN: quarks:[1373] FileLog/MultiFileWriter.sc</title>
	<published>2010-02-09T10:58:34Z</published>
	<updated>2010-02-09T10:58:34Z</updated>
	<author>
		<name>nescivi-2</name>
	</author>
	<content type="html">Revision: 1373
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://quarks.svn.sourceforge.net/quarks/?rev=1373&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://quarks.svn.sourceforge.net/quarks/?rev=1373&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; nescivi
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 18:58:34 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;added extra check in close method, in case there is no current file
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; FileLog/MultiFileWriter.sc
&lt;br&gt;&lt;br&gt;Modified: FileLog/MultiFileWriter.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- FileLog/MultiFileWriter.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;+++ FileLog/MultiFileWriter.sc	2010-02-09 18:58:34 UTC (rev 1373)
&lt;br&gt;@@ -84,6 +84,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	close{
&lt;br&gt;&amp;nbsp;		var newf;
&lt;br&gt;+		if ( curFile.notNil ){
&lt;br&gt;&amp;nbsp;		if ( curFile.isOpen ){
&lt;br&gt;&amp;nbsp;			newf= pathDir +/+ PathName(curfn).fileName;
&lt;br&gt;&amp;nbsp;			curFile.close;
&lt;br&gt;@@ -106,6 +107,7 @@
&lt;br&gt;&amp;nbsp;				this.createTarBundle( newf );
&lt;br&gt;&amp;nbsp;			};
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;+		}
&lt;br&gt;&amp;nbsp;		//		}).play(AppClock);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-quarks-1373-FileLog-MultiFileWriter-sc-tp4543169p4543169.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4543165</id>
	<title>SF.net SVN: supercollider:[9821] trunk</title>
	<published>2010-02-09T10:57:58Z</published>
	<updated>2010-02-09T10:57:58Z</updated>
	<author>
		<name>danstowell</name>
	</author>
	<content type="html">Revision: 9821
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9821&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9821&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; danstowell
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 18:57:58 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;reorganise furniture: first stage, move things - fixed build scripts to come soon
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/Headers/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/Psycollider/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/SConstruct
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/Source/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/TestingAndToDo/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/build/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/include/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/setMainVersion.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/waf
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/wscript
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/iPhone Resources/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/iPhone_Language.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/iPhone_Synth.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/lib/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/lib/iphone/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Language.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Packager/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Plugins.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Resources/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/SuperColliderAU/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/Synth.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/clean-compile.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/compile.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/lib/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/libscsynth_exp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/windows/lib/
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Headers/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Language.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Packager/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Plugins.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Psycollider/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Resources/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/SConstruct
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/SuperColliderAU/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Synth.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/TestingAndToDo/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/build/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/clean-compile.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/compile.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iPhone Resources/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iPhone_Language.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iPhone_Synth.xcodeproj/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/iPhone_Synth.xcodeproj/project.pbxproj
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/lib/iphone/COPYING_libsndfile
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/lib/iphone/libsndfile_iphone.a
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/libscsynth_exp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/setMainVersion.sh
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/waf
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/wscript
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/xtralibs/include/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/xtralibs/iphone/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/xtralibs/mac/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/xtralibs/windows/
&lt;br&gt;&lt;br&gt;Deleted: trunk/SConstruct
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/SConstruct	2010-02-09 18:24:05 UTC (rev 9820)
&lt;br&gt;+++ trunk/SConstruct	2010-02-09 18:57:58 UTC (rev 9821)
&lt;br&gt;@@ -1,1401 +0,0 @@
&lt;br&gt;-# -*- python -*- =======================================================
&lt;br&gt;-# FILE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SConstruct
&lt;br&gt;-# CONTENTS: &amp;nbsp; &amp;nbsp; scons build script for SuperCollider
&lt;br&gt;-# AUTHOR: &amp;nbsp; &amp;nbsp; &amp;nbsp; sk AT k-hornz DOT de
&lt;br&gt;-# modifications: nescivi AT gmail DOT com
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# NOTE: Please use an indentation level of 4 spaces, i.e. no mixing of
&lt;br&gt;-# tabs and spaces.
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# setup
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-EnsureSConsVersion(0,96)
&lt;br&gt;-EnsurePythonVersion(2,3)
&lt;br&gt;-SConsignFile()
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# imports
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-import glob
&lt;br&gt;-import os
&lt;br&gt;-import subprocess
&lt;br&gt;-import re
&lt;br&gt;-import types
&lt;br&gt;-import tarfile
&lt;br&gt;-import platform &amp;nbsp; # Seems to have more portable uname() than os
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# constants
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-PACKAGE = 'SuperCollider'
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-f = open('VERSION')
&lt;br&gt;-VERSION = f.readline()
&lt;br&gt;-f.close()
&lt;br&gt;-
&lt;br&gt;-def short_cpu_name(cpu):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if cpu == 'Power Macintosh':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cpu = 'ppc'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return cpu.lower()
&lt;br&gt;-
&lt;br&gt;-PLATFORM = platform.uname()[0].lower()
&lt;br&gt;-CPU = short_cpu_name(platform.uname()[4])
&lt;br&gt;-
&lt;br&gt;-ANY_FILE_RE = re.compile('.*')
&lt;br&gt;-HELP_FILE_RE = re.compile('.*\.(rtf(d)?|scd|html)$')
&lt;br&gt;-SC_FILE_RE = re.compile('.*\.sc$')
&lt;br&gt;-SRC_FILE_RE = re.compile('.*\.(c(pp)|h)$')
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_DARWIN'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.scx'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'coreaudio'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;-elif PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_FREEBSD'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.so'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'jack'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;-elif PLATFORM == 'linux':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_LINUX'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.so'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'jack'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;-elif PLATFORM == 'windows':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_WIN32'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.scx'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'portaudio'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/'
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print 'Unknown platform: %s' % PLATFORM
&lt;br&gt;- &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;-
&lt;br&gt;-if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = '7450'
&lt;br&gt;-elif CPU in [ 'i586', 'i686' ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# FIXME: better detection
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = CPU
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = None
&lt;br&gt;-
&lt;br&gt;-if PLATFORM != 'windows':
&lt;br&gt;-	subprocess.call(['sh', 'setMainVersion.sh'])
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# util
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-def make_os_env(*keys):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env = os.environ
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = {}
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for key in keys:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env.has_key(key):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res[key] = env[key]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;-
&lt;br&gt;-def CheckPKGConfig(context, version):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;context.Message( 'Checking for pkg-config... ' )
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;context.Result( ret )
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return ret
&lt;br&gt;-
&lt;br&gt;-def CheckPKG(context, name):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;context.Message('Checking for %s... ' % name)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = None
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if ret:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res = Environment(ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.ParseConfig('pkg-config --cflags --libs \'%s\'' % name)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res['PKGCONFIG'] = name
&lt;br&gt;- &amp;nbsp; &amp;nbsp;context.Result(ret)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return (ret, res)
&lt;br&gt;-
&lt;br&gt;-def get_new_pkg_env():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Environment(ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'))
&lt;br&gt;-
&lt;br&gt;-def merge_lib_info(env, *others):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for other in others:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CCFLAGS = other.get('CCFLAGS', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPDEFINES = other.get('CPPDEFINES', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPPATH = other.get('CPPPATH', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CXXFLAGS = other.get('CXXFLAGS', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(LIBS = other.get('LIBS', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(LIBPATH = other.get('LIBPATH', []))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['LINKFLAGS'] = env['LINKFLAGS'] + other.get('LINKFLAGS', &amp;quot;&amp;quot;)
&lt;br&gt;-
&lt;br&gt;-def make_pkgconfig_requires(*envs):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for env in envs:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env and env.has_key('PKGCONFIG'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.append(env['PKGCONFIG'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;-
&lt;br&gt;-def build_pkgconfig_file(target, source, env):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;def write_field(file, name, prefix, separator=None):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env.has_key(name):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if separator:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;content = separator.join(env[name])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;content = env[name]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file.write('%s%s\n' % (prefix, content))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;out = file(str(target[0]), 'w')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;out.writelines([
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'prefix=%s\n' % env['PREFIX'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'exec_prefix=${prefix}\n',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'libdir=${exec_prefix}/lib\n',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'includedir=${prefix}/include/%s\n' % env['PACKAGE'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'\n'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_NAME', 'Name: ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_DESC', 'Description: ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'URL', 'URL: ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'VERSION', 'Version: ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_REQUIRES', 'Requires: ', ', ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_REQUIRES_PRIVATE', 'Requires.private: ', ', ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_LIBS', 'Libs: -L${libdir} ', ' ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_LIBS_PRIVATE', 'Libs.private: ', ' ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_CFLAGS', 'Cflags: ', ' ')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;out.close()
&lt;br&gt;-
&lt;br&gt;-def flatten_dir(dir):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;res = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(dir):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for f in files:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.append(os.path.join(root, f))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;-
&lt;br&gt;-def install_dir(env, src_dir, dst_dir, filter_re, strip_levels=0):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;nodes = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(src_dir):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_paths = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for d in dirs[:]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if filter_re.match(d):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths += flatten_dir(os.path.join(root, d))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirs.remove(d)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for f in files:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if filter_re.match(f):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths.append(os.path.join(root, f))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_paths += map(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lambda f:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os.path.join(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_dir,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*f.split(os.path.sep)[strip_levels:]),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nodes += env.InstallAs(dst_paths, src_paths)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return nodes
&lt;br&gt;-
&lt;br&gt;-def is_installing():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pat = re.compile('^install.*$')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for x in COMMAND_LINE_TARGETS:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if pat.match(x): return True
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return False
&lt;br&gt;-
&lt;br&gt;-def is_home_directory(dir):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.normpath(dir) == os.path.normpath(os.environ.get('HOME', '/'))
&lt;br&gt;-
&lt;br&gt;-def bin_dir(prefix):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'bin')
&lt;br&gt;-def lib_dir(prefix):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'lib')
&lt;br&gt;-
&lt;br&gt;-def pkg_data_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = '/Library/Application Support'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if is_home_directory(prefix):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, base)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, 'share')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(base, PACKAGE, *args)
&lt;br&gt;-def pkg_doc_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = '/Library/Documentation'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if is_home_directory(prefix):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, base)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, 'share', 'doc')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(base, PACKAGE, *args)
&lt;br&gt;-def pkg_include_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'include', PACKAGE, *args)
&lt;br&gt;-def pkg_lib_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join(lib_dir(prefix), PACKAGE, *args)
&lt;br&gt;-
&lt;br&gt;-def pkg_classlib_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return pkg_data_dir(prefix, 'SCClassLibrary', *args)
&lt;br&gt;-def pkg_extension_dir(prefix, *args):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return pkg_data_dir(prefix, 'Extensions', *args)
&lt;br&gt;-
&lt;br&gt;-def make_opt_flags(env):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;flags = [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-O3&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;## &amp;quot;-fomit-frame-pointer&amp;quot;, # can behave strangely for sclang
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-ffast-math&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-fno-finite-math-only&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-fstrength-reduce&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;arch = env.get('OPT_ARCH')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if arch:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-mcpu=%s&amp;quot; % (arch,) ])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-march=%s&amp;quot; % (arch,) ])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-fsigned-char&amp;quot;, &amp;quot;-mhard-float&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ## &amp;quot;-mpowerpc-gpopt&amp;quot;, # crashes sqrt
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;-mpowerpc-gfxopt&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return flags
&lt;br&gt;-
&lt;br&gt;-def make_static_object(env, source, postfix=&amp;quot;_a&amp;quot;):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;obj = os.path.splitext(source)[0] + postfix
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return env.StaticObject(obj, source)
&lt;br&gt;-
&lt;br&gt;-def make_static_objects(env, sources, postfix=&amp;quot;_a&amp;quot;):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return map(lambda x: make_static_object(env, x, postfix), sources)
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# command line options
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-opts = Options('scache.conf', ARGUMENTS)
&lt;br&gt;-opts.AddOptions(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('ALSA',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with ALSA sequencer support', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('ALTIVEC',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Altivec support', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('OPT_ARCH', 'Architecture to optimize for', DEFAULT_OPT_ARCH),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;EnumOption('AUDIOAPI',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with specified audio API support',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEFAULT_AUDIO_API, ('jack', 'coreaudio', 'portaudio')),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('CC', 'C compiler executable'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('CCFLAGS', 'C compiler flags'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('CXX', 'C++ compiler executable'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('CXXFLAGS', 'C++ compiler flags'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('DEBUG',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with debugging information', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PathOption('DESTDIR',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Intermediate installation prefix for packaging', '/'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('DEVELOPMENT',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build and install the development files', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('FFTW',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Use the FFTW libraries', PLATFORM != 'darwin'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('JACK_DLL',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with delay locked loop support', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('JACK_DEBUG_DLL',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with delay locked loop debugging support', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('LANG',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build the language application', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('LID',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Linux Input Device support [linux]', PLATFORM == 'linux'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('NO_LIBSNDFILE',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Disable libsndfile (audio file reading/writing)', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('WII',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Linux WII support [linux]', PLATFORM == 'linux'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PathOption('PREFIX',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Installation prefix', DEFAULT_PREFIX),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('RENDEZVOUS',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable Zeroconf/Rendezvous.', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SCEL',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCEL user interface; NOTE for the HTML help system you need emacs-w3m', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SCVIM',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCVIM user interface; NOTE see the README in /editors/scvim for setting variables', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SCED',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCED (based on gedit) user interface; NOTE see the README in /editors/sced for setting variables', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SSE',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with SSE support', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SSE2',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with SSE2 support', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('STRIP',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Strip symbols from binaries', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('CROSSCOMPILE',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Crosscompile for another platform (does not do SSE support check)', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('TERMINAL_CLIENT',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with terminal client interface', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('CURL',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with libcurl - allows server to load files from remote servers by URL', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('READLINE',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with GNU readline for nice command-line sclang interface', PLATFORM == 'linux'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('GPL3',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Allow the inclusion of gpl-3 licensed code. Makes the license of the whole package gpl-3', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PackageOption('X11',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Build with X11 support', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BoolOption('SCLANG64',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build 64bit sclang (only affects compilation on 64bit systems)', 0),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;opts.AddOptions(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BoolOption('UNIVERSAL',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build universal binaries (see UNIVERSAL_ARCHS)', 1),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BoolOption('INTERNAL_LIBSNDFILE',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Use internal version of libsndfile', 1),
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; ListOption('UNIVERSAL_ARCHS',
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Architectures to build for',
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'all', ['ppc', 'i386'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# basic environment
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-env = Environment(options = opts,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PACKAGE = PACKAGE,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VERSION = VERSION,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL = '&lt;a href=&quot;http://supercollider.sourceforge.net'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.sourceforge.net'&lt;/a&gt;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TARBALL = PACKAGE + VERSION + '.tbz2')
&lt;br&gt;-env.Append(PATH = ['/usr/local/bin', '/usr/bin', '/bin'])
&lt;br&gt;-
&lt;br&gt;-# for nova-simd
&lt;br&gt;-env.Append(CPPPATH = [&amp;quot;xtralibs/include/nova-simd&amp;quot;])
&lt;br&gt;-env.Append(CPPDEFINES = [&amp;quot;NOVA_SIMD&amp;quot;])
&lt;br&gt;-
&lt;br&gt;-if not env['GPL3']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Append(CPPDEFINES = [&amp;quot;NO_GPL3_CODE&amp;quot;])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['READLINE']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'WARNING: option READLINE is on and option GPL3 is off, yet readline is GPL3+ licensed, so it will NOT be activated.'
&lt;br&gt;-
&lt;br&gt;-# checks for DISTCC and CCACHE as used in modern linux-distros:
&lt;br&gt;-
&lt;br&gt;-if os.path.exists('/usr/lib/distcc/bin'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;os.environ['PATH'] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = '/usr/lib/distcc/bin:' + os.environ['PATH']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#env['ENV']['DISTCC_HOSTS'] = os.environ['DISTCC_HOSTS']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env['ENV']['DISTCC_HOSTS'] = os.environ.get('DISTCC_HOSTS')
&lt;br&gt;-
&lt;br&gt;-if os.path.exists('/usr/lib/ccache/bin'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;os.environ['PATH'] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = '/usr/lib/ccache/bin:' + os.environ['PATH']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#env['ENV']['CCACHE_DIR'] &amp;nbsp; = os.environ['CCACHE_DIR']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env['ENV']['CCACHE_DIR'] &amp;nbsp; = os.environ.get('CCACHE_DIR')
&lt;br&gt;-
&lt;br&gt;-env['ENV']['PATH'] = os.environ['PATH']
&lt;br&gt;-if PLATFORM == 'windows':
&lt;br&gt;-	env['ENV']['HOME'] = os.environ['HOMEPATH']
&lt;br&gt;-else:
&lt;br&gt;-	env['ENV']['HOME'] = os.environ['HOME']
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'linux':
&lt;br&gt;-	env['amd64'] = 'x86_64' in platform.uname()
&lt;br&gt;-	if env['amd64']:
&lt;br&gt;-		print &amp;quot;we are on amd64 linux&amp;quot;
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# installation directories
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-FINAL_PREFIX = '$PREFIX'
&lt;br&gt;-INSTALL_PREFIX = os.path.join('$DESTDIR', '$PREFIX')
&lt;br&gt;-
&lt;br&gt;-if env['PREFIX'] == '/usr':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FINAL_CONFIG_PREFIX = '/etc'
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;FINAL_CONFIG_PREFIX = os.path.join(env['PREFIX'], 'etc')
&lt;br&gt;-CONFIG_PREFIX = '$DESTDIR' + FINAL_CONFIG_PREFIX
&lt;br&gt;-
&lt;br&gt;-env.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_DATA_DIR', '\\&amp;quot;' + pkg_data_dir(FINAL_PREFIX) + '\\&amp;quot;')])
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# configuration
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-def make_conf(env):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Configure(env, custom_tests = { 'CheckPKGConfig' : CheckPKGConfig,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'CheckPKG' : CheckPKG })
&lt;br&gt;-
&lt;br&gt;-def isDefaultBuild():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return not env.GetOption('clean') and not 'debian' in COMMAND_LINE_TARGETS
&lt;br&gt;-
&lt;br&gt;-conf = make_conf(env)
&lt;br&gt;-
&lt;br&gt;-# libraries
&lt;br&gt;-libraries = { }
&lt;br&gt;-features = { }
&lt;br&gt;-
&lt;br&gt;-if isDefaultBuild():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if not conf.CheckPKGConfig('0'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'pkg-config not found.'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# sndfile
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['NO_LIBSNDFILE']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'] = Environment(CPPDEFINES = ['NO_LIBSNDFILE'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin' and env['INTERNAL_LIBSNDFILE']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'] = Environment(LINKFLAGS = ['xtralibs/mac/scUBlibsndfile.a'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CPPPATH = ['#xtralibs/include/libsndfile'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['sndfile'] = conf.CheckPKG('sndfile &amp;gt;= 1.0.16')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not success: Exit(1)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;succes2, libraries['sndfile18'] = conf.CheckPKG('sndfile &amp;gt;= 1.0.18')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if succes2:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'].Append(CPPDEFINES = ['LIBSNDFILE_1018'])
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# libcurl
&lt;br&gt;- &amp;nbsp; &amp;nbsp;success, libraries['libcurl'] = conf.CheckPKG('libcurl &amp;gt;= 7')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['CURL'] and not success:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'CURL option was set, but libcurl not found.'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# FFTW
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['fftwf'] = Environment()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['FFTW']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['fftwf'] = conf.CheckPKG('fftw3f')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if success:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_FFTW'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_NONE'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_NONE'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# needed for vector multiplication
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'] = Environment(LINKFLAGS = '-framework vecLib')
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['sndfile'] = get_new_pkg_env()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['fftwf'] = get_new_pkg_env()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['libcurl'] = get_new_pkg_env()
&lt;br&gt;-
&lt;br&gt;-# audio api
&lt;br&gt;-if env['AUDIOAPI'] == 'jack':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['audioapi'] = 'Jack'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;success, libraries['audioapi'] = conf.CheckPKG('jack &amp;gt;= 0.100')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if success:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_JACK')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = ['Source/server/SC_Jack.cpp']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['audioapi'] = conf.CheckPKG('jack')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if isDefaultBuild():
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not success: Exit(1)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'] = get_new_pkg_env()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_JACK'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'SC_USE_JACK_CLIENT_NEW'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = ['Source/server/SC_Jack.cpp']
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_JACK_USE_DLL', env['JACK_DLL']),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;('SC_JACK_DEBUG_DLL', env['JACK_DEBUG_DLL'])]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-elif env['AUDIOAPI'] == 'coreaudio':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['audioapi'] = 'CoreAudio'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['audioapi'] = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_COREAUDIO')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreAudio',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-elif env['AUDIOAPI'] == 'portaudio':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['audioapi'] = 'Portaudio'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['audioapi'] = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_PORTAUDIO')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['portaudio'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = []
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# rendezvous
&lt;br&gt;-if env['RENDEZVOUS']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['rendezvous'], libraries['rendezvous'] = conf.CheckPKG('avahi-client')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if features['rendezvous']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['rendezvous'].Append(CPPDEFINES = ['HAVE_AVAHI'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;features['rendezvous'], libraries['rendezvous'] = conf.CheckPKG('howl')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if features['rendezvous']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['rendezvous'].Append(CPPDEFINES = ['HAVE_HOWL'])
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['rendezvous'] = False
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['rendezvous'] = False
&lt;br&gt;-
&lt;br&gt;-# alsa
&lt;br&gt;-if env['ALSA']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['alsa'], libraries['alsa'] = conf.CheckPKG('alsa')
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['alsa'] = False
&lt;br&gt;-
&lt;br&gt;-if features['alsa']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['alsa'].Append(CPPDEFINES = ['HAVE_ALSA'])
&lt;br&gt;-
&lt;br&gt;-# midi
&lt;br&gt;-if conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['midiapi'] = 'CoreMIDI'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['midiapi'] = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreMIDI',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-elif features['alsa']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['midiapi'] = 'ALSA'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['midiapi'] = libraries['alsa'].Clone()
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['midiapi'] = None
&lt;br&gt;-
&lt;br&gt;-# lid
&lt;br&gt;-features['lid'] = env['LID'] and conf.CheckCHeader('linux/input.h')
&lt;br&gt;-
&lt;br&gt;-# wii on linux
&lt;br&gt;-if PLATFORM == 'linux':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['wii'] = env['WII'] and conf.CheckCHeader('cwiid.h')
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['wii'] = env['WII']
&lt;br&gt;-
&lt;br&gt;-# libicu
&lt;br&gt;-if env['LANG']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin' or conf.CheckCHeader('unicode/uregex.h'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['libicu'] = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-licui18n -licuuc -licudata',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;libicu not found&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;-
&lt;br&gt;-# readline
&lt;br&gt;-if env['LANG'] and env['READLINE'] and env['GPL3']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if conf.CheckCHeader('readline/readline.h'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['readline'] = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-lreadline',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;libreadline not found&amp;quot;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;-
&lt;br&gt;-# only _one_ Configure context can be alive at a time
&lt;br&gt;-env = conf.Finish()
&lt;br&gt;-
&lt;br&gt;-# altivec
&lt;br&gt;-if env['ALTIVEC']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;altivec_flags = [ '-faltivec' ]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;altivec_flags = [ '-maltivec', '-mabi=altivec' ]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['altivec'] = env.Clone()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['altivec'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = altivec_flags,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 16)])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;altiConf = Configure(libraries['altivec'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['altivec'] = altiConf.CheckCHeader('altivec.h')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;altiConf.Finish()
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['altivec'] = False
&lt;br&gt;-
&lt;br&gt;-# sse
&lt;br&gt;-if env['SSE']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['sse'] = env.Clone()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['sse'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = ['-msse', '-mfpmath=sse'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 16)])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['SSE2']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sse'].Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = ['-msse2'])
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;sseConf = Configure(libraries['sse'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;hasSSEHeader = sseConf.CheckCHeader('xmmintrin.h')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['CROSSCOMPILE']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'NOTICE: cross compiling for another platform: assuming SSE support'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = False
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#if CPU != 'ppc':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if CPU not in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine_info = os.popen (&amp;quot;sysctl -a &amp;nbsp;hw.instruction_sse&amp;quot;).read()[:-1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = 'no'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if &amp;quot;1&amp;quot; in [x for x in machine_info]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = 'sse'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; elif PLATFORM != 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flag_line = os.popen (&amp;quot;cat /proc/cpuinfo | grep '^flags'&amp;quot;).read()[:-1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = flag_line.split (&amp;quot;: &amp;quot;)[1:][0].split ()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine_info = os.popen (&amp;quot;sysctl -a machdep.cpu&amp;quot;).read()[:-1]
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = machine_info.split()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if &amp;quot;sse&amp;quot; in [x.lower() for x in x86_flags]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'NOTICE: CPU has SSE support'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print 'NOTICE: CPU does not have SSE support'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['sse'] = hasSSEHeader and build_host_supports_sse
&lt;br&gt;- &amp;nbsp; &amp;nbsp;sseConf.Finish()
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['sse'] = False
&lt;br&gt;-
&lt;br&gt;-if env['X11']:
&lt;br&gt;-# &amp;nbsp; &amp;nbsp;features['x11'], libraries['x11'] = conf.CheckPKG('xt')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if type(env['X11']) != types.StringType:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if os.path.exists('/usr/X11R6'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['X11'] = '/usr/X11R6'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif os.path.exists('/usr/lib/X11'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['X11'] = '/usr/lib/X11'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else: env['X11'] = '/usr'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;x11Env = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = [os.path.join(env['X11'], 'include')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBPATH = [os.path.join(env['X11'], 'lib')])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;x11Conf = Configure(x11Env)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['x11'] = x11Conf.CheckCHeader('X11/Intrinsic.h') \
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and x11Conf.CheckLib('X11', 'XQueryPointer')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['x11'] = x11Conf.Finish()
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;features['x11'] = False
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-opts.Save('scache.conf', env)
&lt;br&gt;-Help(opts.GenerateHelpText(env))
&lt;br&gt;-
&lt;br&gt;-# defines and compiler flags
&lt;br&gt;-
&lt;br&gt;-env.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPDEFINES = [ '_REENTRANT', PLATFORM_SYMBOL ],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CCFLAGS = [ '-Wno-unknown-pragmas' ],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CXXFLAGS = [ '-Wno-deprecated' ]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# debugging flags
&lt;br&gt;-if env['DEBUG']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Append(CCFLAGS = '-g')
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = make_opt_flags(env),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = ['NDEBUG'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['STRIP']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Append(LINKFLAGS = &amp;quot;-Wl,-s&amp;quot;)
&lt;br&gt;-
&lt;br&gt;-# platform specific
&lt;br&gt;-if False: #PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# universal binary support
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['UNIVERSAL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;archs = map(lambda x: ['-arch', x], ['ppc', 'i386'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = archs,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = archs
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# vectorization
&lt;br&gt;-if features['altivec']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(env, libraries['altivec'])
&lt;br&gt;-elif features['sse']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(env, libraries['sse'])
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 1)])
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# Source/common
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-commonEnv = env.Clone()
&lt;br&gt;-commonEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CCFLAGS = ['-fPIC'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CXXFLAGS = ['-fPIC']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# strtod
&lt;br&gt;-conf = Configure(commonEnv)
&lt;br&gt;-if conf.CheckFunc('strtod'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;commonEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = 'HAVE_STRTOD'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-commonEnv = conf.Finish()
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# back to common
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-commonSources = Split('''
&lt;br&gt;-Source/common/SC_AllocPool.cpp
&lt;br&gt;-Source/common/SC_DirUtils.cpp
&lt;br&gt;-Source/common/SC_Sem.cpp
&lt;br&gt;-Source/common/SC_StringBuffer.cpp
&lt;br&gt;-Source/common/SC_StringParser.cpp
&lt;br&gt;-Source/common/scsynthsend.cpp
&lt;br&gt;-Source/common/sc_popen.cpp
&lt;br&gt;-''')
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;commonSources += [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Source/common/SC_StandAloneInfo_Darwin.cpp'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;-if env['CURL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;commonEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(commonEnv, libraries['libcurl'])
&lt;br&gt;-libcommon = commonEnv.Library('build/common', commonSources)
&lt;br&gt;-
&lt;br&gt;-#if env['amd64']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#commonSources32 = list(commonSources)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#commonEnv32 = commonEnv.Clone()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#commonEnv32.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#CCFLAGS = ['-m32'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#libcommon32 = commonEnv32.Library('build/common32', commonSources32)
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# Source/server
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-serverEnv = env.Clone()
&lt;br&gt;-serverEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_PLUGIN_DIR', '\\&amp;quot;' + pkg_lib_dir(FINAL_PREFIX, 'plugins') + '\\&amp;quot;'), ('SC_PLUGIN_EXT', '\\&amp;quot;' + PLUGIN_EXT + '\\&amp;quot;')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LIBPATH = 'build')
&lt;br&gt;-libscsynthEnv = serverEnv.Clone(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libscsynth',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis server library',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['sndfile'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries['audioapi'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries['rendezvous']),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_LIBS = ['-lscsynth'],
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; PKGCONFIG_LIBS_PRIVATE = ['-lm', '-lpthread', '-ldl'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/server']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# platform specific
&lt;br&gt;-
&lt;br&gt;-# functionality of libdl is included in libc on freebsd
&lt;br&gt;-if PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(LIBS = ['common', 'pthread'])
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(LIBS = ['common', 'pthread', 'dl'])
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'-framework', 'CoreServices'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#'-dylib_install_name', FINAL_PREFIX + '/lib/libsclang.dylib'])
&lt;br&gt;-elif PLATFORM == 'linux':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_PLUGIN_LOAD_SYM', '\\&amp;quot;load\\&amp;quot;')],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;-
&lt;br&gt;-elif PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = [('SC_PLUGIN_LOAD_SYM', '\\&amp;quot;load\\&amp;quot;')])
&lt;br&gt;-
&lt;br&gt;-# required libraries
&lt;br&gt;-merge_lib_info(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['sndfile'], libraries['audioapi'])
&lt;br&gt;-
&lt;br&gt;-# optional features
&lt;br&gt;-if features['rendezvous']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = ['USE_RENDEZVOUS'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(serverEnv, libraries['rendezvous'])
&lt;br&gt;-
&lt;br&gt;-if env['CURL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(serverEnv, libraries['libcurl'])
&lt;br&gt;-
&lt;br&gt;-libscsynthSources = Split('''
&lt;br&gt;-Source/server/Rendezvous.cpp
&lt;br&gt;-Source/server/Samp.cpp
&lt;br&gt;-Source/server/SC_BufGen.cpp
&lt;br&gt;-Source/server/SC_Carbon.cpp
&lt;br&gt;-Source/server/SC_Complex.cpp
&lt;br&gt;-Source/server/SC_ComPort.cpp
&lt;br&gt;-Source/server/SC_CoreAudio.cpp
&lt;br&gt;-Source/server/SC_Dimension.cpp
&lt;br&gt;-Source/server/SC_Errors.cpp
&lt;br&gt;-Source/server/SC_Graph.cpp
&lt;br&gt;-Source/server/SC_GraphDef.cpp
&lt;br&gt;-Source/server/SC_Group.cpp
&lt;br&gt;-Source/server/SC_Lib_Cintf.cpp
&lt;br&gt;-Source/server/SC_Lib.cpp
&lt;br&gt;-Source/server/SC_MiscCmds.cpp
&lt;br&gt;-Source/server/SC_Node.cpp
&lt;br&gt;-Source/server/SC_Rate.cpp
&lt;br&gt;-Source/server/SC_SequencedCommand.cpp
&lt;br&gt;-Source/server/SC_Str4.cpp
&lt;br&gt;-Source/server/SC_SyncCondition.cpp
&lt;br&gt;-Source/server/SC_Unit.cpp
&lt;br&gt;-Source/server/SC_UnitDef.cpp
&lt;br&gt;-Source/server/SC_World.cpp
&lt;br&gt;-''') + libraries['audioapi']['ADDITIONAL_SOURCES']
&lt;br&gt;-
&lt;br&gt;-scsynthSources = ['Source/server/scsynth_main.cpp']
&lt;br&gt;-
&lt;br&gt;-libscsynth = serverEnv.SharedLibrary('build/scsynth', libscsynthSources)
&lt;br&gt;-env.Alias('install-programs', env.Install(lib_dir(INSTALL_PREFIX), [libscsynth]))
&lt;br&gt;-
&lt;br&gt;-libscsynthStaticSources = libscsynthSources + make_static_objects(serverEnv, commonSources, &amp;quot;_libscsynthStatic&amp;quot;);
&lt;br&gt;-libscsynthStatic = serverEnv.StaticLibrary('build/scsynth', libscsynthStaticSources)
&lt;br&gt;-env.Alias('install-programs', env.Install(lib_dir(INSTALL_PREFIX), [libscsynthStatic]))
&lt;br&gt;-
&lt;br&gt;-scsynth = serverEnv.Program('build/scsynth', scsynthSources, LIBS = ['scsynth'])
&lt;br&gt;-env.Alias('install-programs', env.Install(bin_dir(INSTALL_PREFIX), [scsynth]))
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# Source/plugins
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-pluginEnv = env.Clone(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SHLIBPREFIX = '',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SHLIBSUFFIX = PLUGIN_EXT
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-pluginEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libscplugin',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis plugin headers',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['scsynth']),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#PKGCONFIG_LIBS = [],
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; PKGCONFIG_LIBS_PRIVATE = ['-lm', '-lpthread', '-ldl'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/server']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pluginEnv['SHLINKFLAGS'] = '$LINKFLAGS -bundle -flat_namespace -undefined suppress'
&lt;br&gt;-
&lt;br&gt;-# we merge this in even if no libsndfile (it'll pass in the NO_LIBSNDFILE flag)
&lt;br&gt;-merge_lib_info(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pluginEnv,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libraries['sndfile'])
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-plugins = []
&lt;br&gt;-
&lt;br&gt;-def make_plugin_target(name):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return os.path.join('build', 'plugins', name)
&lt;br&gt;-
&lt;br&gt;-# simple plugins
&lt;br&gt;-for name in Split('''
&lt;br&gt;-BinaryOpUGens
&lt;br&gt;-ChaosUGens
&lt;br&gt;-DelayUGens
&lt;br&gt;-DemandUGens
&lt;br&gt;-DynNoiseUGens
&lt;br&gt;-FilterUGens
&lt;br&gt;-GendynUGens
&lt;br&gt;-IOUGens
&lt;br&gt;-LFUGens
&lt;br&gt;-MulAddUGens
&lt;br&gt;-NoiseUGens
&lt;br&gt;-OscUGens
&lt;br&gt;-PanUGens
&lt;br&gt;-PhysicalModelingUGens
&lt;br&gt;-TestUGens
&lt;br&gt;-TriggerUGens
&lt;br&gt;-UnaryOpUGens
&lt;br&gt;-GrainUGens
&lt;br&gt;-ReverbUGens
&lt;br&gt;-'''):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pluginEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;make_plugin_target(name), os.path.join('Source', 'plugins', name + '.cpp')))
&lt;br&gt;-
&lt;br&gt;-# complex
&lt;br&gt;-complexEnv = pluginEnv.Clone()
&lt;br&gt;-complexSources = Split('Source/plugins/SCComplex.cpp')
&lt;br&gt;-complexEnv.SharedObject('Source/plugins/SCComplex.o', complexSources)
&lt;br&gt;-
&lt;br&gt;-# fft ugens
&lt;br&gt;-fftEnv = pluginEnv.Clone()
&lt;br&gt;-fftSources = Split('Source/common/SC_fftlib.cpp Source/plugins/SCComplex.o')
&lt;br&gt;-merge_lib_info(fftEnv, libraries['fftwf'])
&lt;br&gt;-plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;fftEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;make_plugin_target('FFT_UGens'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;['Source/plugins/FFTInterfaceTable.cpp',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Source/plugins/FFT_UGens.cpp',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Source/plugins/PV_UGens.cpp',
&lt;br&gt;-	 'Source/plugins/PartitionedConvolution.cpp'] + fftSources))
&lt;br&gt;-
&lt;br&gt;-plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;fftEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;make_plugin_target('PV_ThirdParty'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;['Source/plugins/Convolution.cpp',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; 'Source/plugins/FFT2InterfaceTable.cpp',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; 'Source/plugins/FeatureDetection.cpp',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; 'Source/plugins/PV_ThirdParty.cpp'] + fftSources))
&lt;br&gt;-
&lt;br&gt;-# fft 'unpacking' ugens
&lt;br&gt;-plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pluginEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;make_plugin_target('UnpackFFTUGens'), ['Source/plugins/SCComplex.o', 'Source/plugins/UnpackFFTUGens.cpp']))
&lt;br&gt;-
&lt;br&gt;-# machine listening ugens
&lt;br&gt;-# fft ugens
&lt;br&gt;-mlEnv = pluginEnv.Clone()
&lt;br&gt;-mlSources = Split('Source/plugins/ML.cpp Source/plugins/Loudness.cpp Source/plugins/BeatTrack.cpp Source/plugins/Onsets.cpp Source/plugins/onsetsds.c Source/plugins/KeyTrack.cpp Source/plugins/MFCC.cpp Source/plugins/SCComplex.o Source/plugins/BeatTrack2.cpp Source/plugins/ML_SpecStats.cpp')
&lt;br&gt;-plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;mlEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;make_plugin_target('ML_UGens'), mlSources))
&lt;br&gt;-
&lt;br&gt;-# diskio ugens
&lt;br&gt;-if not env['NO_LIBSNDFILE']: &amp;nbsp;# (libsndfile needed for all of these, so skip if unavailable)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;diskIOEnv = pluginEnv.Clone(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['common', 'm'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBPATH = 'build'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreServices'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;diskIOSources = [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.SharedObject('Source/plugins/SC_SyncCondition', 'Source/server/SC_SyncCondition.cpp'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Source/plugins/DiskIO_UGens.cpp']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(diskIOEnv, libraries['sndfile'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.SharedLibrary(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;make_plugin_target('DiskIO_UGens'), diskIOSources))
&lt;br&gt;-
&lt;br&gt;-# ui ugens
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;uiUGensEnv = pluginEnv.Clone(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = 'm',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreServices -framework Carbon'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('MouseUGens'), 'Source/plugins/MouseUGens.cpp'))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('KeyboardUGens'), 'Source/plugins/KeyboardUGens.cpp'))
&lt;br&gt;-elif features['x11']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;uiUGensEnv = pluginEnv.Clone()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(uiUGensEnv, libraries['x11'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('MouseUGens'), 'Source/plugins/MouseUGens.cpp'))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('KeyboardUGens'), 'Source/plugins/KeyboardUGens.cpp'))
&lt;br&gt;-
&lt;br&gt;-env.Alias('install-plugins', env.Install(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pkg_lib_dir(INSTALL_PREFIX, 'plugins'), plugins))
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# Source/lang
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-if env['TERMINAL_CLIENT'] == True:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['TERMINAL_CLIENT'] = 1
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['TERMINAL_CLIENT'] = 0
&lt;br&gt;-
&lt;br&gt;-langEnv = env.Clone()
&lt;br&gt;-langEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/lang',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Source/lang/LangSource/Bison'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CPPDEFINES = [['USE_SC_TERMINAL_CLIENT', env['TERMINAL_CLIENT']]],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LIBPATH = 'build'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-if env.get('amd64') and not env.get('SCLANG64'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append( CFLAGS = ['-m32'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CXXFLAGS = ['-m32'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = ['-m32'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = &amp;quot;NO_INTERNAL_SERVER&amp;quot;)
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['common', 'scsynth'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['audioapi'])
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'windows':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = &amp;quot;NO_INTERNAL_SERVER&amp;quot;)
&lt;br&gt;-
&lt;br&gt;-# functionality of libdl is included in libc on freebsd
&lt;br&gt;-if PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['pthread', 'm'])
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['pthread', 'dl', &amp;nbsp;'m'])
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['icucore'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = ['-framework', 'CoreServices'], #'-dylib_install_name', FINAL_PREFIX + '/lib/libsclang.dylib'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = ['#xtralibs/include/icu/unicode'])
&lt;br&gt;-elif PLATFORM == 'linux':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,build -Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env.get('amd64') and not env.get('SCLANG64'):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(LIBPATH=&amp;quot;/emul/ia32-linux/usr/lib/,/usr/lib32/&amp;quot;,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-Wl,-rpath,/emul/ia32-linux/usr/lib/')
&lt;br&gt;-
&lt;br&gt;-elif PLATFORM == 'freebsd':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,build -Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;-
&lt;br&gt;-if env['CURL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['libcurl'])
&lt;br&gt;-
&lt;br&gt;-if env['READLINE'] and env['LANG'] and env['GPL3']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = ['HAVE_READLINE'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['readline'])
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;-libsclangEnv = langEnv.Clone(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libsclang',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis language library',
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['sndfile']) + ['libscsynth'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_LIBS = ['-lsclang'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/lang', '-I${includedir}/server']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-
&lt;br&gt;-# required libraries
&lt;br&gt;-merge_lib_info(langEnv, libraries['sndfile'])
&lt;br&gt;-
&lt;br&gt;-libsclangSources = Split('''
&lt;br&gt;-Source/lang/LangSource/AdvancingAllocPool.cpp
&lt;br&gt;-Source/lang/LangSource/ByteCodeArray.cpp
&lt;br&gt;-Source/lang/LangSource/DumpParseNode.cpp
&lt;br&gt;-Source/lang/LangSource/GC.cpp
&lt;br&gt;-Source/lang/LangSource/InitAlloc.cpp
&lt;br&gt;-Source/lang/LangSource/PyrFileUtils.cpp
&lt;br&gt;-Source/lang/LangSource/PyrInterpreter3.cpp
&lt;br&gt;-Source/lang/LangSource/PyrLexer.cpp
&lt;br&gt;-Source/lang/LangSource/PyrMathOps.cpp
&lt;br&gt;-Source/lang/LangSource/PyrMathSupport.cpp
&lt;br&gt;-Source/lang/LangSource/PyrMessage.cpp
&lt;br&gt;-Source/lang/LangSource/PyrObject.cpp
&lt;br&gt;-Source/lang/LangSource/PyrParseNode.cpp
&lt;br&gt;-Source/lang/LangSource/PyrSignal.cpp
&lt;br&gt;-Source/lang/LangSource/PyrSymbolTable.cpp
&lt;br&gt;-Source/lang/LangSource/SC_LanguageClient.cpp
&lt;br&gt;-Source/lang/LangSource/SC_LibraryConfig.cpp
&lt;br&gt;-Source/lang/LangSource/SC_TerminalClient.cpp
&lt;br&gt;-Source/lang/LangSource/Samp.cpp
&lt;br&gt;-Source/lang/LangSource/SimpleStack.cpp
&lt;br&gt;-Source/lang/LangSource/VMGlobals.cpp
&lt;br&gt;-Source/lang/LangSource/alloca.cpp
&lt;br&gt;-Source/lang/LangSource/dumpByteCodes.cpp
&lt;br&gt;-Source/lang/LangSource/Bison/lang11d_tab.cpp
&lt;br&gt;-Source/lang/LangPrimSource/SC_Wii.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrSignalPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrSched.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrPrimitive.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrMathPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/SC_ComPort.cpp
&lt;br&gt;-Source/lang/LangPrimSource/OSCData.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrArchiver.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrArrayPrimitives.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrBitPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrCharPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrFilePrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrListPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrPlatformPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrSerialPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrStringPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrUStringPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrSymbolPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/PyrUnixPrim.cpp
&lt;br&gt;-Source/common/fftlib.c
&lt;br&gt;-''')
&lt;br&gt;-
&lt;br&gt;-if env['LANG']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['libicu'])
&lt;br&gt;-
&lt;br&gt;-# optional features
&lt;br&gt;-if features['midiapi']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['midiapi'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if features['midiapi'] == 'CoreMIDI':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_CoreMIDI.cpp']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_AlsaMIDI.cpp']
&lt;br&gt;-else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# fallback implementation
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_AlsaMIDI.cpp']
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = ['#Source/lang/LangPrimSource/HID_Utilities',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Source/lang/LangPrimSource/WiiMote_OSX'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework Carbon -framework IOKit -framework IOBluetooth'
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclangSources += Split('''
&lt;br&gt;-Source/lang/LangPrimSource/SC_HID.cpp
&lt;br&gt;-Source/lang/LangPrimSource/SC_CoreAudioPrim.cpp
&lt;br&gt;-Source/lang/LangPrimSource/HID_Utilities/HID_Error_Handler.c
&lt;br&gt;-Source/lang/LangPrimSource/HID_Utilities/HID_Name_Lookup.c
&lt;br&gt;-Source/lang/LangPrimSource/HID_Utilities/HID_Queue_Utilities.c
&lt;br&gt;-Source/lang/LangPrimSource/HID_Utilities/HID_Utilities.c
&lt;br&gt;-Source/lang/LangPrimSource/WiiMote_OSX/wiiremote.c
&lt;br&gt;-''')
&lt;br&gt;-
&lt;br&gt;-if env.has_key('amd64') and env['amd64']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclangSources += commonSources
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'linux':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# HAVE_LID does the right thing in SC_LID.cpp source
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_LID.cpp']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if features['wii']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_WII')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(LINKFLAGS = '-lcwiid')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#langEnv.Append(LINKFLAGS = '-lbluetooth')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#langEnv.Append(CPPPATH = '-I/usr/local/include/libcwiimote-0.4.0/libcwiimote/' ) #FIXME: to proper include directory
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if features['lid']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_LID')
&lt;br&gt;-
&lt;br&gt;-if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_SPEECH')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_Speech.cpp']
&lt;br&gt;-
&lt;br&gt;-sclangSources = ['Source/lang/LangSource/cmdLineFuncs.cpp']
&lt;br&gt;-
&lt;br&gt;-if env['LANG']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;libsclang = langEnv.SharedLibrary('build/sclang', libsclangSources)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-bin', env.Install(lib_dir(INSTALL_PREFIX), [libsclang]))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sclangLibs = ['scsynth', 'sclang']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sclangLibs = ['sclang']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;sclang = langEnv.Program('build/sclang', sclangSources, LIBS=sclangLibs)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-programs', env.Install(bin_dir(INSTALL_PREFIX), [sclang]))
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# doc/doxygen
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-# doxygen = env.Command(None, 'doc/doxygen/html/index.html', 'doxygen doc/doxygen/doxygen.cfg')
&lt;br&gt;-# env.Alias('doxygen', doxygen)
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# installation
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-installEnv = Environment(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ALL = ['install-bin', 'install-data'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;BIN = ['install-plugins', 'install-programs'],
&lt;br&gt;- &amp;nbsp; &amp;nbsp;DATA = ['install-doc']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;)
&lt;br&gt;-if env['LANG']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;installEnv.Append(DATA = ['install-library'])
&lt;br&gt;-
&lt;br&gt;-if is_installing():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# class library
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/SCClassLibrary',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 1))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# help files
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/Help',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 1))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# example files
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/examples',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 1))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# scel
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if env['SCEL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scel/sc',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_extension_dir(INSTALL_PREFIX, 'scide_scel'),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 3))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# scvim
&lt;br&gt;-# &amp;nbsp; &amp;nbsp;if env['SCVIM']:
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scvim/scclasses',
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_extension_dir(INSTALL_PREFIX, 'scvim'),
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 3))
&lt;br&gt;-# &amp;nbsp; &amp;nbsp;# scvim helpfiles
&lt;br&gt;-# &amp;nbsp; &amp;nbsp;if env['SCVIM']:
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; env.Alias('install-library', install_dir(
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scvim/cache/doc',
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX, 'scvim-help'),
&lt;br&gt;-# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 4))
&lt;br&gt;-
&lt;br&gt;-#scvim : unhtml help files
&lt;br&gt;-#if env['SCVIM']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#os.execvpe(&amp;quot;editors/scvim/bin/scvim_make_help&amp;quot;, [ &amp;quot;-c&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;build/Help&amp;quot;],&amp;quot;SCVIM=editors/scvim/&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;#os.popen (&amp;quot;cat /proc/cpuinfo | grep '^flags'&amp;quot;).read()[:-1]
&lt;br&gt;-
&lt;br&gt;-#if env['SCVIM']:
&lt;br&gt;-	#vimenv = env.Clone()
&lt;br&gt;-	#SConscript('editors/test/SConstruct', exports=['vimenv'])
&lt;br&gt;-
&lt;br&gt;-#if env['SCVIM']:
&lt;br&gt;- &amp;nbsp; #print 'installing scvim'
&lt;br&gt;- &amp;nbsp; #vimenv = env.Clone()
&lt;br&gt;- &amp;nbsp; ##env.Append(FROMTOP=True)
&lt;br&gt;- &amp;nbsp; #SConscript('editors/scvim/SConstruct', exports=['vimenv'])
&lt;br&gt;-
&lt;br&gt;-#### scvim and sced scripts need to be called independently, until someone fixes setting the proper variables from the parent script
&lt;br&gt;-
&lt;br&gt;-if env['SCVIM']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print '----------------------------------------------------'
&lt;br&gt;-# &amp;nbsp; SConscript('editors/scvim/SConstruct', exports=['env'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print 'To install SCVIM, please use scons in the directory editors/scvim/'
&lt;br&gt;-
&lt;br&gt;-if env['SCED']:
&lt;br&gt;-# &amp;nbsp; SConscript('editors/sced/SConstruct', 'env')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print '----------------------------------------------------'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;print 'To install SCED, please use the scons in the directory editors/sced/'
&lt;br&gt;-
&lt;br&gt;-# scel
&lt;br&gt;-if env['SCEL']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Command('editors/scel/el/sclang-vars.el', 'editors/scel/el/sclang-vars.el.in',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'sed \'s,@PKG_DATA_DIR@,%s,g\' &amp;lt; $SOURCE &amp;gt; $TARGET' %
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(FINAL_PREFIX))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;el_files = glob.glob('editors/scel/el/*.el') + ['editors/scel/el/sclang-vars.el']
&lt;br&gt;- &amp;nbsp; &amp;nbsp;elc_files = map(lambda f: os.path.splitext(f)[0] + '.elc', el_files)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;elisp_dir = os.path.join(INSTALL_PREFIX, 'share', 'emacs', 'site-lisp')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Command(elc_files, el_files,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'emacs -batch --eval &amp;quot;(add-to-list \'load-path (expand-file-name \\&amp;quot;editors/scel/el/\\&amp;quot;))&amp;quot; -f batch-byte-compile $SOURCES')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-elisp', env.Install(elisp_dir, el_files + elc_files))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;installEnv.Append(DATA = 'install-elisp')
&lt;br&gt;-
&lt;br&gt;-# example library configuration file
&lt;br&gt;-env.Command('linux/examples/sclang.cfg', 'linux/examples/sclang.cfg.in',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'sed \'s,@PKG_DATA_DIR@,%s,g\' &amp;lt; $SOURCE &amp;gt; $TARGET' %
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(FINAL_PREFIX))
&lt;br&gt;-
&lt;br&gt;-# headers
&lt;br&gt;-if env['DEVELOPMENT']:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;header_dirs = Split('common plugin_interface server lang')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;header_dirs += 'app'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for d in header_dirs:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-dev', install_dir(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, os.path.join('Headers', d),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_include_dir(INSTALL_PREFIX),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;re.compile('.*\.h(h|pp)?'), 1)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# other useful headers
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-dev',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Install(pkg_include_dir(INSTALL_PREFIX, 'plugin_interface'), 'Source/plugins/FFT_UGens.h'))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pkgconfig_files = [
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libscsynthEnv.Command('linux/libscsynth.pc', 'SConstruct',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_pkgconfig_file),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangEnv.Command('linux/libsclang.pc', 'SConstruct',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; build_pkgconfig_file),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pluginEnv.Command('linux/libscplugin.pc', 'SConstruct',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; build_pkgconfig_file)]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;pkgconfig_dir = os.path.join(lib_dir(INSTALL_PREFIX), 'pkgconfig')
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-dev', env.Install(pkgconfig_dir, pkgconfig_files))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;installEnv.Append(ALL = 'install-dev')
&lt;br&gt;-
&lt;br&gt;-# documentation
&lt;br&gt;-if is_installing():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;# TODO: build html documentation?
&lt;br&gt;- &amp;nbsp; &amp;nbsp;doc_dir = pkg_doc_dir(INSTALL_PREFIX)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('install-doc',
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'doc', doc_dir, ANY_FILE_RE, 0) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'build/examples', doc_dir, ANY_FILE_RE, 1) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'build/TestingAndToDo', doc_dir, ANY_FILE_RE, 1))
&lt;br&gt;-
&lt;br&gt;-env.Alias('install-bin', installEnv['BIN'])
&lt;br&gt;-env.Alias('install-data', installEnv['DATA'])
&lt;br&gt;-env.Alias('install', installEnv['ALL'])
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# distribution
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-DIST_FILES = Split('''
&lt;br&gt;-COPYING
&lt;br&gt;-SConstruct
&lt;br&gt;-clean-compile.sh
&lt;br&gt;-compile.sh
&lt;br&gt;-distro
&lt;br&gt;-linux/examples/onetwoonetwo.sc
&lt;br&gt;-linux/examples/sclang.cfg.in
&lt;br&gt;-linux/examples/sclang.sc
&lt;br&gt;-editors/scel/README
&lt;br&gt;-editors/scvim/README
&lt;br&gt;-editors/sced/README
&lt;br&gt;-scsynthlib_exp
&lt;br&gt;-''')
&lt;br&gt;-
&lt;br&gt;-DIST_SPECS = [
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('build', HELP_FILE_RE),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('Headers', SRC_FILE_RE),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('editors/scel/sc', SC_FILE_RE),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('editors/scel/el', re.compile('.*\.el$')),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('editors/scvim/scclasses', SC_FILE_RE),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;('Source', SRC_FILE_RE)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;]
&lt;br&gt;-
&lt;br&gt;-def dist_paths():
&lt;br&gt;- &amp;nbsp; &amp;nbsp;paths = DIST_FILES[:]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;specs = DIST_SPECS[:]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;while specs:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base, re = specs.pop()
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not re: re = ANY_FILE_RE
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(base):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for path in dirs[:]:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if re.match(path):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;specs.append((os.path.join(root, path), re))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirs.remove(path)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for path in files:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if re.match(path):
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paths.append(os.path.join(root, path))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;paths.sort()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return paths
&lt;br&gt;-
&lt;br&gt;-def build_tar(env, target, source):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;paths = dist_paths()
&lt;br&gt;- &amp;nbsp; &amp;nbsp;tarfile_name = str(target[0])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;tar_name = os.path.splitext(os.path.basename(tarfile_name))[0]
&lt;br&gt;- &amp;nbsp; &amp;nbsp;tar = tarfile.open(tarfile_name, &amp;quot;w:bz2&amp;quot;)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;for path in paths:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tar.add(path, os.path.join(tar_name, path))
&lt;br&gt;- &amp;nbsp; &amp;nbsp;tar.close()
&lt;br&gt;-
&lt;br&gt;-if 'dist' in COMMAND_LINE_TARGETS:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Alias('dist', env['TARBALL'])
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Command(env['TARBALL'], 'SConstruct', build_tar)
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# cleanup
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-if 'scrub' in COMMAND_LINE_TARGETS:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;env.Clean('scrub', Split('config.log scache.conf .sconf_temp'))
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# configuration summary
&lt;br&gt;-# ======================================================================
&lt;br&gt;-
&lt;br&gt;-def yesorno(p):
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if p: return 'yes'
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else: return 'no'
&lt;br&gt;-
&lt;br&gt;-print '------------------------------------------------------------------------'
&lt;br&gt;-print ' ALTIVEC: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['altivec'])
&lt;br&gt;-print ' AUDIOAPI: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % features['audioapi']
&lt;br&gt;-print ' MIDIAPI: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % features['midiapi']
&lt;br&gt;-print ' DEBUG: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['DEBUG'])
&lt;br&gt;-# print ' DESTDIR: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % env['DESTDIR']
&lt;br&gt;-print ' DEVELOPMENT: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['DEVELOPMENT'])
&lt;br&gt;-print ' LANG: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['LANG'])
&lt;br&gt;-print ' LID: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['lid'])
&lt;br&gt;-print ' NO_LIBSNDFILE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['NO_LIBSNDFILE'])
&lt;br&gt;-print ' WII: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['wii'])
&lt;br&gt;-print ' PREFIX: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % env['PREFIX']
&lt;br&gt;-print ' RENDEZVOUS: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(features['rendezvous'])
&lt;br&gt;-print ' SCEL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['SCEL'])
&lt;br&gt;-print ' SCVIM: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['SCVIM'])
&lt;br&gt;-print ' SCED: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['SCED'])
&lt;br&gt;-print ' SSE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['sse'])
&lt;br&gt;-print ' STRIP: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['STRIP'])
&lt;br&gt;-print ' CROSSCOMPILE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['CROSSCOMPILE'])
&lt;br&gt;-print ' TERMINAL_CLIENT: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['TERMINAL_CLIENT'])
&lt;br&gt;-print ' X11: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['x11'])
&lt;br&gt;-print ' GPL3: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['GPL3'])
&lt;br&gt;-print ' SCLANG64: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env.get('SCLANG64'))
&lt;br&gt;-print '------------------------------------------------------------------------'
&lt;br&gt;-
&lt;br&gt;-# ======================================================================
&lt;br&gt;-# EOF
&lt;br&gt;-
&lt;br&gt;&lt;br&gt;Deleted: trunk/clean-compile.sh
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/clean-compile.sh	2010-02-09 18:24:05 UTC (rev 9820)
&lt;br&gt;+++ trunk/clean-compile.sh	2010-02-09 18:57:58 UTC (rev 9821)
&lt;br&gt;@@ -1,18 +0,0 @@
&lt;br&gt;-#!/bin/sh
&lt;br&gt;-
&lt;br&gt;-# This script cleans all targets, then invokes compile.sh
&lt;br&gt;-
&lt;br&gt;-# clean
&lt;br&gt;-echo &amp;quot;Cleaning scsynth...&amp;quot;
&lt;br&gt;-xcodebuild -project Synth.xcodeproj -target &amp;quot;All&amp;quot; $* clean || exit
&lt;br&gt;-
&lt;br&gt;-echo &amp;quot;Cleaning plugins...&amp;quot;
&lt;br&gt;-xcodebuild -project Plugins.xcodeproj -target &amp;quot;All&amp;quot; $* clean || exit
&lt;br&gt;-
&lt;br&gt;-echo &amp;quot;Cleaning sclang...&amp;quot;
&lt;br&gt;-xcodebuild -project Language.xcodeproj -target &amp;quot;All&amp;quot; $* clean || exit
&lt;br&gt;-
&lt;br&gt;-echo &amp;quot;Clean Done.&amp;quot;
&lt;br&gt;-
&lt;br&gt;-# Now let compile.sh do its job:
&lt;br&gt;-./compile.sh $*
&lt;br&gt;&lt;br&gt;&lt;br&gt;Property changes on: trunk/common/Headers
&lt;br&gt;___________________________________________________________________
&lt;br&gt;Added: svn:mergeinfo
&lt;br&gt;&amp;nbsp; &amp;nbsp;+ 
&lt;br&gt;&lt;br&gt;&lt;br&gt;Property changes on: trunk/common/Psycollider
&lt;br&gt;___________________________________________________________________
&lt;br&gt;Added: svn:mergeinfo
&lt;br&gt;&amp;nbsp; &amp;nbsp;+ 
&lt;br&gt;&lt;br&gt;Copied: trunk/common/SConstruct (from rev 9819, trunk/SConstruct)
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/common/SConstruct	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ trunk/common/SConstruct	2010-02-09 18:57:58 UTC (rev 9821)
&lt;br&gt;@@ -0,0 +1,1401 @@
&lt;br&gt;+# -*- python -*- =======================================================
&lt;br&gt;+# FILE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SConstruct
&lt;br&gt;+# CONTENTS: &amp;nbsp; &amp;nbsp; scons build script for SuperCollider
&lt;br&gt;+# AUTHOR: &amp;nbsp; &amp;nbsp; &amp;nbsp; sk AT k-hornz DOT de
&lt;br&gt;+# modifications: nescivi AT gmail DOT com
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# NOTE: Please use an indentation level of 4 spaces, i.e. no mixing of
&lt;br&gt;+# tabs and spaces.
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# setup
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+EnsureSConsVersion(0,96)
&lt;br&gt;+EnsurePythonVersion(2,3)
&lt;br&gt;+SConsignFile()
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# imports
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+import glob
&lt;br&gt;+import os
&lt;br&gt;+import subprocess
&lt;br&gt;+import re
&lt;br&gt;+import types
&lt;br&gt;+import tarfile
&lt;br&gt;+import platform &amp;nbsp; # Seems to have more portable uname() than os
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# constants
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+PACKAGE = 'SuperCollider'
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+f = open('VERSION')
&lt;br&gt;+VERSION = f.readline()
&lt;br&gt;+f.close()
&lt;br&gt;+
&lt;br&gt;+def short_cpu_name(cpu):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if cpu == 'Power Macintosh':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cpu = 'ppc'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return cpu.lower()
&lt;br&gt;+
&lt;br&gt;+PLATFORM = platform.uname()[0].lower()
&lt;br&gt;+CPU = short_cpu_name(platform.uname()[4])
&lt;br&gt;+
&lt;br&gt;+ANY_FILE_RE = re.compile('.*')
&lt;br&gt;+HELP_FILE_RE = re.compile('.*\.(rtf(d)?|scd|html)$')
&lt;br&gt;+SC_FILE_RE = re.compile('.*\.sc$')
&lt;br&gt;+SRC_FILE_RE = re.compile('.*\.(c(pp)|h)$')
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_DARWIN'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.scx'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'coreaudio'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;+elif PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_FREEBSD'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.so'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'jack'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;+elif PLATFORM == 'linux':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_LINUX'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.so'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'jack'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/usr/local'
&lt;br&gt;+elif PLATFORM == 'windows':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLATFORM_SYMBOL = 'SC_WIN32'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PLUGIN_EXT = '.scx'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_AUDIO_API = 'portaudio'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_PREFIX = '/'
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print 'Unknown platform: %s' % PLATFORM
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;+
&lt;br&gt;+if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = '7450'
&lt;br&gt;+elif CPU in [ 'i586', 'i686' ]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# FIXME: better detection
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = CPU
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DEFAULT_OPT_ARCH = None
&lt;br&gt;+
&lt;br&gt;+if PLATFORM != 'windows':
&lt;br&gt;+	subprocess.call(['sh', 'setMainVersion.sh'])
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# util
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+def make_os_env(*keys):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env = os.environ
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;res = {}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for key in keys:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env.has_key(key):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res[key] = env[key]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;+
&lt;br&gt;+def CheckPKGConfig(context, version):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;context.Message( 'Checking for pkg-config... ' )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;context.Result( ret )
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return ret
&lt;br&gt;+
&lt;br&gt;+def CheckPKG(context, name):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;context.Message('Checking for %s... ' % name)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ret = context.TryAction('pkg-config --exists \'%s\'' % name)[0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;res = None
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if ret:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res = Environment(ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.ParseConfig('pkg-config --cflags --libs \'%s\'' % name)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res['PKGCONFIG'] = name
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;context.Result(ret)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (ret, res)
&lt;br&gt;+
&lt;br&gt;+def get_new_pkg_env():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Environment(ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'))
&lt;br&gt;+
&lt;br&gt;+def merge_lib_info(env, *others):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for other in others:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CCFLAGS = other.get('CCFLAGS', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPDEFINES = other.get('CPPDEFINES', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPPATH = other.get('CPPPATH', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(CXXFLAGS = other.get('CXXFLAGS', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(LIBS = other.get('LIBS', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.AppendUnique(LIBPATH = other.get('LIBPATH', []))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['LINKFLAGS'] = env['LINKFLAGS'] + other.get('LINKFLAGS', &amp;quot;&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+def make_pkgconfig_requires(*envs):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;res = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for env in envs:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env and env.has_key('PKGCONFIG'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.append(env['PKGCONFIG'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;+
&lt;br&gt;+def build_pkgconfig_file(target, source, env):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;def write_field(file, name, prefix, separator=None):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if env.has_key(name):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if separator:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;content = separator.join(env[name])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;content = env[name]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;file.write('%s%s\n' % (prefix, content))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;out = file(str(target[0]), 'w')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;out.writelines([
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'prefix=%s\n' % env['PREFIX'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'exec_prefix=${prefix}\n',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'libdir=${exec_prefix}/lib\n',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'includedir=${prefix}/include/%s\n' % env['PACKAGE'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'\n'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_NAME', 'Name: ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_DESC', 'Description: ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'URL', 'URL: ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'VERSION', 'Version: ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_REQUIRES', 'Requires: ', ', ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_REQUIRES_PRIVATE', 'Requires.private: ', ', ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_LIBS', 'Libs: -L${libdir} ', ' ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_LIBS_PRIVATE', 'Libs.private: ', ' ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;write_field(out, 'PKGCONFIG_CFLAGS', 'Cflags: ', ' ')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;out.close()
&lt;br&gt;+
&lt;br&gt;+def flatten_dir(dir):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;res = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(dir):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for f in files:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;res.append(os.path.join(root, f))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return res
&lt;br&gt;+
&lt;br&gt;+def install_dir(env, src_dir, dst_dir, filter_re, strip_levels=0):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;nodes = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(src_dir):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_paths = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for d in dirs[:]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if filter_re.match(d):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths += flatten_dir(os.path.join(root, d))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirs.remove(d)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for f in files:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if filter_re.match(f):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths.append(os.path.join(root, f))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_paths += map(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;lambda f:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os.path.join(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dst_dir,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*f.split(os.path.sep)[strip_levels:]),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;src_paths)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nodes += env.InstallAs(dst_paths, src_paths)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return nodes
&lt;br&gt;+
&lt;br&gt;+def is_installing():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pat = re.compile('^install.*$')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for x in COMMAND_LINE_TARGETS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if pat.match(x): return True
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return False
&lt;br&gt;+
&lt;br&gt;+def is_home_directory(dir):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.normpath(dir) == os.path.normpath(os.environ.get('HOME', '/'))
&lt;br&gt;+
&lt;br&gt;+def bin_dir(prefix):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'bin')
&lt;br&gt;+def lib_dir(prefix):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'lib')
&lt;br&gt;+
&lt;br&gt;+def pkg_data_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = '/Library/Application Support'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if is_home_directory(prefix):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, base)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, 'share')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(base, PACKAGE, *args)
&lt;br&gt;+def pkg_doc_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = '/Library/Documentation'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if is_home_directory(prefix):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, base)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base = os.path.join(prefix, 'share', 'doc')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(base, PACKAGE, *args)
&lt;br&gt;+def pkg_include_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(prefix, 'include', PACKAGE, *args)
&lt;br&gt;+def pkg_lib_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join(lib_dir(prefix), PACKAGE, *args)
&lt;br&gt;+
&lt;br&gt;+def pkg_classlib_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return pkg_data_dir(prefix, 'SCClassLibrary', *args)
&lt;br&gt;+def pkg_extension_dir(prefix, *args):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return pkg_data_dir(prefix, 'Extensions', *args)
&lt;br&gt;+
&lt;br&gt;+def make_opt_flags(env):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;flags = [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-O3&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;## &amp;quot;-fomit-frame-pointer&amp;quot;, # can behave strangely for sclang
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-ffast-math&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-fno-finite-math-only&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;-fstrength-reduce&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;arch = env.get('OPT_ARCH')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if arch:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-mcpu=%s&amp;quot; % (arch,) ])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-march=%s&amp;quot; % (arch,) ])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if CPU in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flags.extend([ &amp;quot;-fsigned-char&amp;quot;, &amp;quot;-mhard-float&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ## &amp;quot;-mpowerpc-gpopt&amp;quot;, # crashes sqrt
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;-mpowerpc-gfxopt&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return flags
&lt;br&gt;+
&lt;br&gt;+def make_static_object(env, source, postfix=&amp;quot;_a&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;obj = os.path.splitext(source)[0] + postfix
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return env.StaticObject(obj, source)
&lt;br&gt;+
&lt;br&gt;+def make_static_objects(env, sources, postfix=&amp;quot;_a&amp;quot;):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return map(lambda x: make_static_object(env, x, postfix), sources)
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# command line options
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+opts = Options('scache.conf', ARGUMENTS)
&lt;br&gt;+opts.AddOptions(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('ALSA',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with ALSA sequencer support', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('ALTIVEC',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Altivec support', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('OPT_ARCH', 'Architecture to optimize for', DEFAULT_OPT_ARCH),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;EnumOption('AUDIOAPI',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with specified audio API support',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEFAULT_AUDIO_API, ('jack', 'coreaudio', 'portaudio')),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('CC', 'C compiler executable'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('CCFLAGS', 'C compiler flags'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('CXX', 'C++ compiler executable'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('CXXFLAGS', 'C++ compiler flags'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('DEBUG',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with debugging information', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PathOption('DESTDIR',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Intermediate installation prefix for packaging', '/'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('DEVELOPMENT',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build and install the development files', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('FFTW',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Use the FFTW libraries', PLATFORM != 'darwin'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('JACK_DLL',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with delay locked loop support', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('JACK_DEBUG_DLL',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with delay locked loop debugging support', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('LANG',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build the language application', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('LID',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Linux Input Device support [linux]', PLATFORM == 'linux'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('NO_LIBSNDFILE',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Disable libsndfile (audio file reading/writing)', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('WII',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with Linux WII support [linux]', PLATFORM == 'linux'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PathOption('PREFIX',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Installation prefix', DEFAULT_PREFIX),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('RENDEZVOUS',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable Zeroconf/Rendezvous.', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SCEL',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCEL user interface; NOTE for the HTML help system you need emacs-w3m', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SCVIM',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCVIM user interface; NOTE see the README in /editors/scvim for setting variables', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SCED',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Enable the SCED (based on gedit) user interface; NOTE see the README in /editors/sced for setting variables', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SSE',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with SSE support', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SSE2',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with SSE2 support', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('STRIP',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Strip symbols from binaries', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('CROSSCOMPILE',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Crosscompile for another platform (does not do SSE support check)', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('TERMINAL_CLIENT',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with terminal client interface', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('CURL',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with libcurl - allows server to load files from remote servers by URL', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('READLINE',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build with GNU readline for nice command-line sclang interface', PLATFORM == 'linux'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('GPL3',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Allow the inclusion of gpl-3 licensed code. Makes the license of the whole package gpl-3', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PackageOption('X11',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Build with X11 support', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BoolOption('SCLANG64',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build 64bit sclang (only affects compilation on 64bit systems)', 0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;opts.AddOptions(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BoolOption('UNIVERSAL',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Build universal binaries (see UNIVERSAL_ARCHS)', 1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BoolOption('INTERNAL_LIBSNDFILE',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Use internal version of libsndfile', 1),
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; ListOption('UNIVERSAL_ARCHS',
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Architectures to build for',
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'all', ['ppc', 'i386'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# basic environment
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+env = Environment(options = opts,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ENV = make_os_env('PATH', 'PKG_CONFIG_PATH'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PACKAGE = PACKAGE,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VERSION = VERSION,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;URL = '&lt;a href=&quot;http://supercollider.sourceforge.net'&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.sourceforge.net'&lt;/a&gt;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TARBALL = PACKAGE + VERSION + '.tbz2')
&lt;br&gt;+env.Append(PATH = ['/usr/local/bin', '/usr/bin', '/bin'])
&lt;br&gt;+
&lt;br&gt;+# for nova-simd
&lt;br&gt;+env.Append(CPPPATH = [&amp;quot;xtralibs/include/nova-simd&amp;quot;])
&lt;br&gt;+env.Append(CPPDEFINES = [&amp;quot;NOVA_SIMD&amp;quot;])
&lt;br&gt;+
&lt;br&gt;+if not env['GPL3']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Append(CPPDEFINES = [&amp;quot;NO_GPL3_CODE&amp;quot;])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['READLINE']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'WARNING: option READLINE is on and option GPL3 is off, yet readline is GPL3+ licensed, so it will NOT be activated.'
&lt;br&gt;+
&lt;br&gt;+# checks for DISTCC and CCACHE as used in modern linux-distros:
&lt;br&gt;+
&lt;br&gt;+if os.path.exists('/usr/lib/distcc/bin'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;os.environ['PATH'] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = '/usr/lib/distcc/bin:' + os.environ['PATH']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#env['ENV']['DISTCC_HOSTS'] = os.environ['DISTCC_HOSTS']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env['ENV']['DISTCC_HOSTS'] = os.environ.get('DISTCC_HOSTS')
&lt;br&gt;+
&lt;br&gt;+if os.path.exists('/usr/lib/ccache/bin'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;os.environ['PATH'] &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = '/usr/lib/ccache/bin:' + os.environ['PATH']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#env['ENV']['CCACHE_DIR'] &amp;nbsp; = os.environ['CCACHE_DIR']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env['ENV']['CCACHE_DIR'] &amp;nbsp; = os.environ.get('CCACHE_DIR')
&lt;br&gt;+
&lt;br&gt;+env['ENV']['PATH'] = os.environ['PATH']
&lt;br&gt;+if PLATFORM == 'windows':
&lt;br&gt;+	env['ENV']['HOME'] = os.environ['HOMEPATH']
&lt;br&gt;+else:
&lt;br&gt;+	env['ENV']['HOME'] = os.environ['HOME']
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'linux':
&lt;br&gt;+	env['amd64'] = 'x86_64' in platform.uname()
&lt;br&gt;+	if env['amd64']:
&lt;br&gt;+		print &amp;quot;we are on amd64 linux&amp;quot;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# installation directories
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+FINAL_PREFIX = '$PREFIX'
&lt;br&gt;+INSTALL_PREFIX = os.path.join('$DESTDIR', '$PREFIX')
&lt;br&gt;+
&lt;br&gt;+if env['PREFIX'] == '/usr':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FINAL_CONFIG_PREFIX = '/etc'
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;FINAL_CONFIG_PREFIX = os.path.join(env['PREFIX'], 'etc')
&lt;br&gt;+CONFIG_PREFIX = '$DESTDIR' + FINAL_CONFIG_PREFIX
&lt;br&gt;+
&lt;br&gt;+env.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_DATA_DIR', '\\&amp;quot;' + pkg_data_dir(FINAL_PREFIX) + '\\&amp;quot;')])
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# configuration
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+def make_conf(env):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return Configure(env, custom_tests = { 'CheckPKGConfig' : CheckPKGConfig,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'CheckPKG' : CheckPKG })
&lt;br&gt;+
&lt;br&gt;+def isDefaultBuild():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return not env.GetOption('clean') and not 'debian' in COMMAND_LINE_TARGETS
&lt;br&gt;+
&lt;br&gt;+conf = make_conf(env)
&lt;br&gt;+
&lt;br&gt;+# libraries
&lt;br&gt;+libraries = { }
&lt;br&gt;+features = { }
&lt;br&gt;+
&lt;br&gt;+if isDefaultBuild():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if not conf.CheckPKGConfig('0'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'pkg-config not found.'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# sndfile
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['NO_LIBSNDFILE']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'] = Environment(CPPDEFINES = ['NO_LIBSNDFILE'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin' and env['INTERNAL_LIBSNDFILE']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'] = Environment(LINKFLAGS = ['xtralibs/mac/scUBlibsndfile.a'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CPPPATH = ['#xtralibs/include/libsndfile'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['sndfile'] = conf.CheckPKG('sndfile &amp;gt;= 1.0.16')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not success: Exit(1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;succes2, libraries['sndfile18'] = conf.CheckPKG('sndfile &amp;gt;= 1.0.18')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if succes2:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sndfile'].Append(CPPDEFINES = ['LIBSNDFILE_1018'])
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# libcurl
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;success, libraries['libcurl'] = conf.CheckPKG('libcurl &amp;gt;= 7')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['CURL'] and not success:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'CURL option was set, but libcurl not found.'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# FFTW
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['fftwf'] = Environment()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['FFTW']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['fftwf'] = conf.CheckPKG('fftw3f')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if success:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_FFTW'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_NONE'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'].Append(CPPDEFINES = ['SC_FFT_NONE'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# needed for vector multiplication
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['fftwf'] = Environment(LINKFLAGS = '-framework vecLib')
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['sndfile'] = get_new_pkg_env()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['fftwf'] = get_new_pkg_env()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['libcurl'] = get_new_pkg_env()
&lt;br&gt;+
&lt;br&gt;+# audio api
&lt;br&gt;+if env['AUDIOAPI'] == 'jack':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['audioapi'] = 'Jack'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;success, libraries['audioapi'] = conf.CheckPKG('jack &amp;gt;= 0.100')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if success:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_JACK')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = ['Source/server/SC_Jack.cpp']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;success, libraries['audioapi'] = conf.CheckPKG('jack')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if isDefaultBuild():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not success: Exit(1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'] = get_new_pkg_env()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_JACK'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'SC_USE_JACK_CLIENT_NEW'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = ['Source/server/SC_Jack.cpp']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['audioapi'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_JACK_USE_DLL', env['JACK_DLL']),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;('SC_JACK_DEBUG_DLL', env['JACK_DEBUG_DLL'])]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+elif env['AUDIOAPI'] == 'coreaudio':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['audioapi'] = 'CoreAudio'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['audioapi'] = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_COREAUDIO')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreAudio',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+elif env['AUDIOAPI'] == 'portaudio':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['audioapi'] = 'Portaudio'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['audioapi'] = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_AUDIO_API', 'SC_AUDIO_API_PORTAUDIO')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['portaudio'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ADDITIONAL_SOURCES = []
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# rendezvous
&lt;br&gt;+if env['RENDEZVOUS']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['rendezvous'], libraries['rendezvous'] = conf.CheckPKG('avahi-client')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if features['rendezvous']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['rendezvous'].Append(CPPDEFINES = ['HAVE_AVAHI'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;features['rendezvous'], libraries['rendezvous'] = conf.CheckPKG('howl')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if features['rendezvous']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['rendezvous'].Append(CPPDEFINES = ['HAVE_HOWL'])
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['rendezvous'] = False
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['rendezvous'] = False
&lt;br&gt;+
&lt;br&gt;+# alsa
&lt;br&gt;+if env['ALSA']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['alsa'], libraries['alsa'] = conf.CheckPKG('alsa')
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['alsa'] = False
&lt;br&gt;+
&lt;br&gt;+if features['alsa']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['alsa'].Append(CPPDEFINES = ['HAVE_ALSA'])
&lt;br&gt;+
&lt;br&gt;+# midi
&lt;br&gt;+if conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['midiapi'] = 'CoreMIDI'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['midiapi'] = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreMIDI',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+elif features['alsa']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['midiapi'] = 'ALSA'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['midiapi'] = libraries['alsa'].Clone()
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['midiapi'] = None
&lt;br&gt;+
&lt;br&gt;+# lid
&lt;br&gt;+features['lid'] = env['LID'] and conf.CheckCHeader('linux/input.h')
&lt;br&gt;+
&lt;br&gt;+# wii on linux
&lt;br&gt;+if PLATFORM == 'linux':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['wii'] = env['WII'] and conf.CheckCHeader('cwiid.h')
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['wii'] = env['WII']
&lt;br&gt;+
&lt;br&gt;+# libicu
&lt;br&gt;+if env['LANG']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin' or conf.CheckCHeader('unicode/uregex.h'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['libicu'] = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-licui18n -licuuc -licudata',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;libicu not found&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;+
&lt;br&gt;+# readline
&lt;br&gt;+if env['LANG'] and env['READLINE'] and env['GPL3']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if conf.CheckCHeader('readline/readline.h'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['readline'] = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-lreadline',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;quot;libreadline not found&amp;quot;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exit(1)
&lt;br&gt;+
&lt;br&gt;+# only _one_ Configure context can be alive at a time
&lt;br&gt;+env = conf.Finish()
&lt;br&gt;+
&lt;br&gt;+# altivec
&lt;br&gt;+if env['ALTIVEC']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;altivec_flags = [ '-faltivec' ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;altivec_flags = [ '-maltivec', '-mabi=altivec' ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['altivec'] = env.Clone()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['altivec'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = altivec_flags,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 16)])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;altiConf = Configure(libraries['altivec'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['altivec'] = altiConf.CheckCHeader('altivec.h')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;altiConf.Finish()
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['altivec'] = False
&lt;br&gt;+
&lt;br&gt;+# sse
&lt;br&gt;+if env['SSE']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['sse'] = env.Clone()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['sse'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = ['-msse', '-mfpmath=sse'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 16)])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['SSE2']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libraries['sse'].Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = ['-msse2'])
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sseConf = Configure(libraries['sse'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;hasSSEHeader = sseConf.CheckCHeader('xmmintrin.h')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['CROSSCOMPILE']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'NOTICE: cross compiling for another platform: assuming SSE support'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = False
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#if CPU != 'ppc':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if CPU not in [ 'ppc' , 'ppc64' ]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine_info = os.popen (&amp;quot;sysctl -a &amp;nbsp;hw.instruction_sse&amp;quot;).read()[:-1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = 'no'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if &amp;quot;1&amp;quot; in [x for x in machine_info]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = 'sse'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; elif PLATFORM != 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;flag_line = os.popen (&amp;quot;cat /proc/cpuinfo | grep '^flags'&amp;quot;).read()[:-1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = flag_line.split (&amp;quot;: &amp;quot;)[1:][0].split ()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;machine_info = os.popen (&amp;quot;sysctl -a machdep.cpu&amp;quot;).read()[:-1]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;x86_flags = machine_info.split()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if &amp;quot;sse&amp;quot; in [x.lower() for x in x86_flags]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_host_supports_sse = True
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print 'NOTICE: CPU has SSE support'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print 'NOTICE: CPU does not have SSE support'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['sse'] = hasSSEHeader and build_host_supports_sse
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sseConf.Finish()
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['sse'] = False
&lt;br&gt;+
&lt;br&gt;+if env['X11']:
&lt;br&gt;+# &amp;nbsp; &amp;nbsp;features['x11'], libraries['x11'] = conf.CheckPKG('xt')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if type(env['X11']) != types.StringType:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if os.path.exists('/usr/X11R6'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['X11'] = '/usr/X11R6'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;elif os.path.exists('/usr/lib/X11'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['X11'] = '/usr/lib/X11'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else: env['X11'] = '/usr'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;x11Env = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = [os.path.join(env['X11'], 'include')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBPATH = [os.path.join(env['X11'], 'lib')])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;x11Conf = Configure(x11Env)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['x11'] = x11Conf.CheckCHeader('X11/Intrinsic.h') \
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;and x11Conf.CheckLib('X11', 'XQueryPointer')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['x11'] = x11Conf.Finish()
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features['x11'] = False
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+opts.Save('scache.conf', env)
&lt;br&gt;+Help(opts.GenerateHelpText(env))
&lt;br&gt;+
&lt;br&gt;+# defines and compiler flags
&lt;br&gt;+
&lt;br&gt;+env.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPDEFINES = [ '_REENTRANT', PLATFORM_SYMBOL ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CCFLAGS = [ '-Wno-unknown-pragmas' ],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CXXFLAGS = [ '-Wno-deprecated' ]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# debugging flags
&lt;br&gt;+if env['DEBUG']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Append(CCFLAGS = '-g')
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = make_opt_flags(env),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = ['NDEBUG'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['STRIP']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Append(LINKFLAGS = &amp;quot;-Wl,-s&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+# platform specific
&lt;br&gt;+if False: #PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# universal binary support
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['UNIVERSAL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;archs = map(lambda x: ['-arch', x], ['ppc', 'i386'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CCFLAGS = archs,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = archs
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# vectorization
&lt;br&gt;+if features['altivec']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(env, libraries['altivec'])
&lt;br&gt;+elif features['sse']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(env, libraries['sse'])
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.AppendUnique(CPPDEFINES = [('SC_MEMORY_ALIGNMENT', 1)])
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# Source/common
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+commonEnv = env.Clone()
&lt;br&gt;+commonEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CCFLAGS = ['-fPIC'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CXXFLAGS = ['-fPIC']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# strtod
&lt;br&gt;+conf = Configure(commonEnv)
&lt;br&gt;+if conf.CheckFunc('strtod'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;commonEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = 'HAVE_STRTOD'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+commonEnv = conf.Finish()
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# back to common
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+commonSources = Split('''
&lt;br&gt;+Source/common/SC_AllocPool.cpp
&lt;br&gt;+Source/common/SC_DirUtils.cpp
&lt;br&gt;+Source/common/SC_Sem.cpp
&lt;br&gt;+Source/common/SC_StringBuffer.cpp
&lt;br&gt;+Source/common/SC_StringParser.cpp
&lt;br&gt;+Source/common/scsynthsend.cpp
&lt;br&gt;+Source/common/sc_popen.cpp
&lt;br&gt;+''')
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;commonSources += [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Source/common/SC_StandAloneInfo_Darwin.cpp'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;]
&lt;br&gt;+if env['CURL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;commonEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(commonEnv, libraries['libcurl'])
&lt;br&gt;+libcommon = commonEnv.Library('build/common', commonSources)
&lt;br&gt;+
&lt;br&gt;+#if env['amd64']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#commonSources32 = list(commonSources)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#commonEnv32 = commonEnv.Clone()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#commonEnv32.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#CCFLAGS = ['-m32'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#libcommon32 = commonEnv32.Library('build/common32', commonSources32)
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# Source/server
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+serverEnv = env.Clone()
&lt;br&gt;+serverEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_PLUGIN_DIR', '\\&amp;quot;' + pkg_lib_dir(FINAL_PREFIX, 'plugins') + '\\&amp;quot;'), ('SC_PLUGIN_EXT', '\\&amp;quot;' + PLUGIN_EXT + '\\&amp;quot;')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LIBPATH = 'build')
&lt;br&gt;+libscsynthEnv = serverEnv.Clone(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libscsynth',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis server library',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['sndfile'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries['audioapi'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; libraries['rendezvous']),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_LIBS = ['-lscsynth'],
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; PKGCONFIG_LIBS_PRIVATE = ['-lm', '-lpthread', '-ldl'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/server']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# platform specific
&lt;br&gt;+
&lt;br&gt;+# functionality of libdl is included in libc on freebsd
&lt;br&gt;+if PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(LIBS = ['common', 'pthread'])
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(LIBS = ['common', 'pthread', 'dl'])
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'-framework', 'CoreServices'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#'-dylib_install_name', FINAL_PREFIX + '/lib/libsclang.dylib'])
&lt;br&gt;+elif PLATFORM == 'linux':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = [('SC_PLUGIN_LOAD_SYM', '\\&amp;quot;load\\&amp;quot;')],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;+
&lt;br&gt;+elif PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = [('SC_PLUGIN_LOAD_SYM', '\\&amp;quot;load\\&amp;quot;')])
&lt;br&gt;+
&lt;br&gt;+# required libraries
&lt;br&gt;+merge_lib_info(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['sndfile'], libraries['audioapi'])
&lt;br&gt;+
&lt;br&gt;+# optional features
&lt;br&gt;+if features['rendezvous']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = ['USE_RENDEZVOUS'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(serverEnv, libraries['rendezvous'])
&lt;br&gt;+
&lt;br&gt;+if env['CURL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;serverEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(serverEnv, libraries['libcurl'])
&lt;br&gt;+
&lt;br&gt;+libscsynthSources = Split('''
&lt;br&gt;+Source/server/Rendezvous.cpp
&lt;br&gt;+Source/server/Samp.cpp
&lt;br&gt;+Source/server/SC_BufGen.cpp
&lt;br&gt;+Source/server/SC_Carbon.cpp
&lt;br&gt;+Source/server/SC_Complex.cpp
&lt;br&gt;+Source/server/SC_ComPort.cpp
&lt;br&gt;+Source/server/SC_CoreAudio.cpp
&lt;br&gt;+Source/server/SC_Dimension.cpp
&lt;br&gt;+Source/server/SC_Errors.cpp
&lt;br&gt;+Source/server/SC_Graph.cpp
&lt;br&gt;+Source/server/SC_GraphDef.cpp
&lt;br&gt;+Source/server/SC_Group.cpp
&lt;br&gt;+Source/server/SC_Lib_Cintf.cpp
&lt;br&gt;+Source/server/SC_Lib.cpp
&lt;br&gt;+Source/server/SC_MiscCmds.cpp
&lt;br&gt;+Source/server/SC_Node.cpp
&lt;br&gt;+Source/server/SC_Rate.cpp
&lt;br&gt;+Source/server/SC_SequencedCommand.cpp
&lt;br&gt;+Source/server/SC_Str4.cpp
&lt;br&gt;+Source/server/SC_SyncCondition.cpp
&lt;br&gt;+Source/server/SC_Unit.cpp
&lt;br&gt;+Source/server/SC_UnitDef.cpp
&lt;br&gt;+Source/server/SC_World.cpp
&lt;br&gt;+''') + libraries['audioapi']['ADDITIONAL_SOURCES']
&lt;br&gt;+
&lt;br&gt;+scsynthSources = ['Source/server/scsynth_main.cpp']
&lt;br&gt;+
&lt;br&gt;+libscsynth = serverEnv.SharedLibrary('build/scsynth', libscsynthSources)
&lt;br&gt;+env.Alias('install-programs', env.Install(lib_dir(INSTALL_PREFIX), [libscsynth]))
&lt;br&gt;+
&lt;br&gt;+libscsynthStaticSources = libscsynthSources + make_static_objects(serverEnv, commonSources, &amp;quot;_libscsynthStatic&amp;quot;);
&lt;br&gt;+libscsynthStatic = serverEnv.StaticLibrary('build/scsynth', libscsynthStaticSources)
&lt;br&gt;+env.Alias('install-programs', env.Install(lib_dir(INSTALL_PREFIX), [libscsynthStatic]))
&lt;br&gt;+
&lt;br&gt;+scsynth = serverEnv.Program('build/scsynth', scsynthSources, LIBS = ['scsynth'])
&lt;br&gt;+env.Alias('install-programs', env.Install(bin_dir(INSTALL_PREFIX), [scsynth]))
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# Source/plugins
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+pluginEnv = env.Clone(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SHLIBPREFIX = '',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SHLIBSUFFIX = PLUGIN_EXT
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+pluginEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libscplugin',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis plugin headers',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['scsynth']),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#PKGCONFIG_LIBS = [],
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; PKGCONFIG_LIBS_PRIVATE = ['-lm', '-lpthread', '-ldl'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/server']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pluginEnv['SHLINKFLAGS'] = '$LINKFLAGS -bundle -flat_namespace -undefined suppress'
&lt;br&gt;+
&lt;br&gt;+# we merge this in even if no libsndfile (it'll pass in the NO_LIBSNDFILE flag)
&lt;br&gt;+merge_lib_info(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pluginEnv,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libraries['sndfile'])
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+plugins = []
&lt;br&gt;+
&lt;br&gt;+def make_plugin_target(name):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return os.path.join('build', 'plugins', name)
&lt;br&gt;+
&lt;br&gt;+# simple plugins
&lt;br&gt;+for name in Split('''
&lt;br&gt;+BinaryOpUGens
&lt;br&gt;+ChaosUGens
&lt;br&gt;+DelayUGens
&lt;br&gt;+DemandUGens
&lt;br&gt;+DynNoiseUGens
&lt;br&gt;+FilterUGens
&lt;br&gt;+GendynUGens
&lt;br&gt;+IOUGens
&lt;br&gt;+LFUGens
&lt;br&gt;+MulAddUGens
&lt;br&gt;+NoiseUGens
&lt;br&gt;+OscUGens
&lt;br&gt;+PanUGens
&lt;br&gt;+PhysicalModelingUGens
&lt;br&gt;+TestUGens
&lt;br&gt;+TriggerUGens
&lt;br&gt;+UnaryOpUGens
&lt;br&gt;+GrainUGens
&lt;br&gt;+ReverbUGens
&lt;br&gt;+'''):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pluginEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;make_plugin_target(name), os.path.join('Source', 'plugins', name + '.cpp')))
&lt;br&gt;+
&lt;br&gt;+# complex
&lt;br&gt;+complexEnv = pluginEnv.Clone()
&lt;br&gt;+complexSources = Split('Source/plugins/SCComplex.cpp')
&lt;br&gt;+complexEnv.SharedObject('Source/plugins/SCComplex.o', complexSources)
&lt;br&gt;+
&lt;br&gt;+# fft ugens
&lt;br&gt;+fftEnv = pluginEnv.Clone()
&lt;br&gt;+fftSources = Split('Source/common/SC_fftlib.cpp Source/plugins/SCComplex.o')
&lt;br&gt;+merge_lib_info(fftEnv, libraries['fftwf'])
&lt;br&gt;+plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fftEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;make_plugin_target('FFT_UGens'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;['Source/plugins/FFTInterfaceTable.cpp',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Source/plugins/FFT_UGens.cpp',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Source/plugins/PV_UGens.cpp',
&lt;br&gt;+	 'Source/plugins/PartitionedConvolution.cpp'] + fftSources))
&lt;br&gt;+
&lt;br&gt;+plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fftEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;make_plugin_target('PV_ThirdParty'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;['Source/plugins/Convolution.cpp',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; 'Source/plugins/FFT2InterfaceTable.cpp',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; 'Source/plugins/FeatureDetection.cpp',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; 'Source/plugins/PV_ThirdParty.cpp'] + fftSources))
&lt;br&gt;+
&lt;br&gt;+# fft 'unpacking' ugens
&lt;br&gt;+plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pluginEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;make_plugin_target('UnpackFFTUGens'), ['Source/plugins/SCComplex.o', 'Source/plugins/UnpackFFTUGens.cpp']))
&lt;br&gt;+
&lt;br&gt;+# machine listening ugens
&lt;br&gt;+# fft ugens
&lt;br&gt;+mlEnv = pluginEnv.Clone()
&lt;br&gt;+mlSources = Split('Source/plugins/ML.cpp Source/plugins/Loudness.cpp Source/plugins/BeatTrack.cpp Source/plugins/Onsets.cpp Source/plugins/onsetsds.c Source/plugins/KeyTrack.cpp Source/plugins/MFCC.cpp Source/plugins/SCComplex.o Source/plugins/BeatTrack2.cpp Source/plugins/ML_SpecStats.cpp')
&lt;br&gt;+plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;mlEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;make_plugin_target('ML_UGens'), mlSources))
&lt;br&gt;+
&lt;br&gt;+# diskio ugens
&lt;br&gt;+if not env['NO_LIBSNDFILE']: &amp;nbsp;# (libsndfile needed for all of these, so skip if unavailable)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;diskIOEnv = pluginEnv.Clone(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['common', 'm'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBPATH = 'build'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreServices'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;diskIOSources = [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.SharedObject('Source/plugins/SC_SyncCondition', 'Source/server/SC_SyncCondition.cpp'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'Source/plugins/DiskIO_UGens.cpp']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(diskIOEnv, libraries['sndfile'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;diskIOEnv.SharedLibrary(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;make_plugin_target('DiskIO_UGens'), diskIOSources))
&lt;br&gt;+
&lt;br&gt;+# ui ugens
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;uiUGensEnv = pluginEnv.Clone(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = 'm',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework CoreServices -framework Carbon'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('MouseUGens'), 'Source/plugins/MouseUGens.cpp'))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('KeyboardUGens'), 'Source/plugins/KeyboardUGens.cpp'))
&lt;br&gt;+elif features['x11']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;uiUGensEnv = pluginEnv.Clone()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(uiUGensEnv, libraries['x11'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('MouseUGens'), 'Source/plugins/MouseUGens.cpp'))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;plugins.append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;uiUGensEnv.SharedLibrary(make_plugin_target('KeyboardUGens'), 'Source/plugins/KeyboardUGens.cpp'))
&lt;br&gt;+
&lt;br&gt;+env.Alias('install-plugins', env.Install(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pkg_lib_dir(INSTALL_PREFIX, 'plugins'), plugins))
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# Source/lang
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+if env['TERMINAL_CLIENT'] == True:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['TERMINAL_CLIENT'] = 1
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env['TERMINAL_CLIENT'] = 0
&lt;br&gt;+
&lt;br&gt;+langEnv = env.Clone()
&lt;br&gt;+langEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPPATH = ['#Headers/common',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/plugin_interface',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/lang',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Headers/server',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Source/lang/LangSource/Bison'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CPPDEFINES = [['USE_SC_TERMINAL_CLIENT', env['TERMINAL_CLIENT']]],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LIBPATH = 'build'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+if env.get('amd64') and not env.get('SCLANG64'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append( CFLAGS = ['-m32'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CXXFLAGS = ['-m32'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = ['-m32'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPDEFINES = &amp;quot;NO_INTERNAL_SERVER&amp;quot;)
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['common', 'scsynth'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['audioapi'])
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'windows':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = &amp;quot;NO_INTERNAL_SERVER&amp;quot;)
&lt;br&gt;+
&lt;br&gt;+# functionality of libdl is included in libc on freebsd
&lt;br&gt;+if PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['pthread', 'm'])
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(LIBS = ['pthread', 'dl', &amp;nbsp;'m'])
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LIBS = ['icucore'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = ['-framework', 'CoreServices'], #'-dylib_install_name', FINAL_PREFIX + '/lib/libsclang.dylib'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = ['#xtralibs/include/icu/unicode'])
&lt;br&gt;+elif PLATFORM == 'linux':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,build -Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env.get('amd64') and not env.get('SCLANG64'):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(LIBPATH=&amp;quot;/emul/ia32-linux/usr/lib/,/usr/lib32/&amp;quot;,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LINKFLAGS = '-Wl,-rpath,/emul/ia32-linux/usr/lib/')
&lt;br&gt;+
&lt;br&gt;+elif PLATFORM == 'freebsd':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LINKFLAGS = '-Wl,-rpath,build -Wl,-rpath,' + FINAL_PREFIX + '/lib')
&lt;br&gt;+
&lt;br&gt;+if env['CURL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = ['HAVE_LIBCURL'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['libcurl'])
&lt;br&gt;+
&lt;br&gt;+if env['READLINE'] and env['LANG'] and env['GPL3']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = ['HAVE_READLINE'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['readline'])
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;+libsclangEnv = langEnv.Clone(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_NAME = 'libsclang',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_DESC = 'SuperCollider synthesis language library',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_PREFIX = FINAL_PREFIX,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_REQUIRES = make_pkgconfig_requires(libraries['sndfile']) + ['libscsynth'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_LIBS = ['-lsclang'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PKGCONFIG_CFLAGS = ['-D' + PLATFORM_SYMBOL, '-I${includedir}/common', '-I${includedir}/plugin_interface', '-I${includedir}/lang', '-I${includedir}/server']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+
&lt;br&gt;+# required libraries
&lt;br&gt;+merge_lib_info(langEnv, libraries['sndfile'])
&lt;br&gt;+
&lt;br&gt;+libsclangSources = Split('''
&lt;br&gt;+Source/lang/LangSource/AdvancingAllocPool.cpp
&lt;br&gt;+Source/lang/LangSource/ByteCodeArray.cpp
&lt;br&gt;+Source/lang/LangSource/DumpParseNode.cpp
&lt;br&gt;+Source/lang/LangSource/GC.cpp
&lt;br&gt;+Source/lang/LangSource/InitAlloc.cpp
&lt;br&gt;+Source/lang/LangSource/PyrFileUtils.cpp
&lt;br&gt;+Source/lang/LangSource/PyrInterpreter3.cpp
&lt;br&gt;+Source/lang/LangSource/PyrLexer.cpp
&lt;br&gt;+Source/lang/LangSource/PyrMathOps.cpp
&lt;br&gt;+Source/lang/LangSource/PyrMathSupport.cpp
&lt;br&gt;+Source/lang/LangSource/PyrMessage.cpp
&lt;br&gt;+Source/lang/LangSource/PyrObject.cpp
&lt;br&gt;+Source/lang/LangSource/PyrParseNode.cpp
&lt;br&gt;+Source/lang/LangSource/PyrSignal.cpp
&lt;br&gt;+Source/lang/LangSource/PyrSymbolTable.cpp
&lt;br&gt;+Source/lang/LangSource/SC_LanguageClient.cpp
&lt;br&gt;+Source/lang/LangSource/SC_LibraryConfig.cpp
&lt;br&gt;+Source/lang/LangSource/SC_TerminalClient.cpp
&lt;br&gt;+Source/lang/LangSource/Samp.cpp
&lt;br&gt;+Source/lang/LangSource/SimpleStack.cpp
&lt;br&gt;+Source/lang/LangSource/VMGlobals.cpp
&lt;br&gt;+Source/lang/LangSource/alloca.cpp
&lt;br&gt;+Source/lang/LangSource/dumpByteCodes.cpp
&lt;br&gt;+Source/lang/LangSource/Bison/lang11d_tab.cpp
&lt;br&gt;+Source/lang/LangPrimSource/SC_Wii.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrSignalPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrSched.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrPrimitive.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrMathPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/SC_ComPort.cpp
&lt;br&gt;+Source/lang/LangPrimSource/OSCData.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrArchiver.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrArrayPrimitives.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrBitPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrCharPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrFilePrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrListPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrPlatformPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrSerialPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrStringPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrUStringPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrSymbolPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/PyrUnixPrim.cpp
&lt;br&gt;+Source/common/fftlib.c
&lt;br&gt;+''')
&lt;br&gt;+
&lt;br&gt;+if env['LANG']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['libicu'])
&lt;br&gt;+
&lt;br&gt;+# optional features
&lt;br&gt;+if features['midiapi']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;merge_lib_info(langEnv, libraries['midiapi'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if features['midiapi'] == 'CoreMIDI':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_CoreMIDI.cpp']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_AlsaMIDI.cpp']
&lt;br&gt;+else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# fallback implementation
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_AlsaMIDI.cpp']
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CPPPATH = ['#Source/lang/LangPrimSource/HID_Utilities',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '#Source/lang/LangPrimSource/WiiMote_OSX'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LINKFLAGS = '-framework Carbon -framework IOKit -framework IOBluetooth'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclangSources += Split('''
&lt;br&gt;+Source/lang/LangPrimSource/SC_HID.cpp
&lt;br&gt;+Source/lang/LangPrimSource/SC_CoreAudioPrim.cpp
&lt;br&gt;+Source/lang/LangPrimSource/HID_Utilities/HID_Error_Handler.c
&lt;br&gt;+Source/lang/LangPrimSource/HID_Utilities/HID_Name_Lookup.c
&lt;br&gt;+Source/lang/LangPrimSource/HID_Utilities/HID_Queue_Utilities.c
&lt;br&gt;+Source/lang/LangPrimSource/HID_Utilities/HID_Utilities.c
&lt;br&gt;+Source/lang/LangPrimSource/WiiMote_OSX/wiiremote.c
&lt;br&gt;+''')
&lt;br&gt;+
&lt;br&gt;+if env.has_key('amd64') and env['amd64']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclangSources += commonSources
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'linux':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# HAVE_LID does the right thing in SC_LID.cpp source
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_LID.cpp']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if features['wii']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_WII')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(LINKFLAGS = '-lcwiid')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#langEnv.Append(LINKFLAGS = '-lbluetooth')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#langEnv.Append(CPPPATH = '-I/usr/local/include/libcwiimote-0.4.0/libcwiimote/' ) #FIXME: to proper include directory
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if features['lid']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_LID')
&lt;br&gt;+
&lt;br&gt;+if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;langEnv.Append(CPPDEFINES = 'HAVE_SPEECH')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclangSources += ['Source/lang/LangPrimSource/SC_Speech.cpp']
&lt;br&gt;+
&lt;br&gt;+sclangSources = ['Source/lang/LangSource/cmdLineFuncs.cpp']
&lt;br&gt;+
&lt;br&gt;+if env['LANG']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;libsclang = langEnv.SharedLibrary('build/sclang', libsclangSources)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-bin', env.Install(lib_dir(INSTALL_PREFIX), [libsclang]))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sclangLibs = ['scsynth', 'sclang']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sclangLibs = ['sclang']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;sclang = langEnv.Program('build/sclang', sclangSources, LIBS=sclangLibs)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-programs', env.Install(bin_dir(INSTALL_PREFIX), [sclang]))
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# doc/doxygen
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+# doxygen = env.Command(None, 'doc/doxygen/html/index.html', 'doxygen doc/doxygen/doxygen.cfg')
&lt;br&gt;+# env.Alias('doxygen', doxygen)
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# installation
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+installEnv = Environment(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ALL = ['install-bin', 'install-data'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BIN = ['install-plugins', 'install-programs'],
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;DATA = ['install-doc']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+if env['LANG']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;installEnv.Append(DATA = ['install-library'])
&lt;br&gt;+
&lt;br&gt;+if is_installing():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# class library
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/SCClassLibrary',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 1))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# help files
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/Help',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 1))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# example files
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'build/examples',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 1))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# scel
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if env['SCEL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scel/sc',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_extension_dir(INSTALL_PREFIX, 'scide_scel'),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 3))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# scvim
&lt;br&gt;+# &amp;nbsp; &amp;nbsp;if env['SCVIM']:
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-library', install_dir(
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scvim/scclasses',
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_extension_dir(INSTALL_PREFIX, 'scvim'),
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SC_FILE_RE, 3))
&lt;br&gt;+# &amp;nbsp; &amp;nbsp;# scvim helpfiles
&lt;br&gt;+# &amp;nbsp; &amp;nbsp;if env['SCVIM']:
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; env.Alias('install-library', install_dir(
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, 'editors/scvim/cache/doc',
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(INSTALL_PREFIX, 'scvim-help'),
&lt;br&gt;+# &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;HELP_FILE_RE, 4))
&lt;br&gt;+
&lt;br&gt;+#scvim : unhtml help files
&lt;br&gt;+#if env['SCVIM']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#os.execvpe(&amp;quot;editors/scvim/bin/scvim_make_help&amp;quot;, [ &amp;quot;-c&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;build/Help&amp;quot;],&amp;quot;SCVIM=editors/scvim/&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;#os.popen (&amp;quot;cat /proc/cpuinfo | grep '^flags'&amp;quot;).read()[:-1]
&lt;br&gt;+
&lt;br&gt;+#if env['SCVIM']:
&lt;br&gt;+	#vimenv = env.Clone()
&lt;br&gt;+	#SConscript('editors/test/SConstruct', exports=['vimenv'])
&lt;br&gt;+
&lt;br&gt;+#if env['SCVIM']:
&lt;br&gt;+ &amp;nbsp; #print 'installing scvim'
&lt;br&gt;+ &amp;nbsp; #vimenv = env.Clone()
&lt;br&gt;+ &amp;nbsp; ##env.Append(FROMTOP=True)
&lt;br&gt;+ &amp;nbsp; #SConscript('editors/scvim/SConstruct', exports=['vimenv'])
&lt;br&gt;+
&lt;br&gt;+#### scvim and sced scripts need to be called independently, until someone fixes setting the proper variables from the parent script
&lt;br&gt;+
&lt;br&gt;+if env['SCVIM']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print '----------------------------------------------------'
&lt;br&gt;+# &amp;nbsp; SConscript('editors/scvim/SConstruct', exports=['env'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print 'To install SCVIM, please use scons in the directory editors/scvim/'
&lt;br&gt;+
&lt;br&gt;+if env['SCED']:
&lt;br&gt;+# &amp;nbsp; SConscript('editors/sced/SConstruct', 'env')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print '----------------------------------------------------'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;print 'To install SCED, please use the scons in the directory editors/sced/'
&lt;br&gt;+
&lt;br&gt;+# scel
&lt;br&gt;+if env['SCEL']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Command('editors/scel/el/sclang-vars.el', 'editors/scel/el/sclang-vars.el.in',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'sed \'s,@PKG_DATA_DIR@,%s,g\' &amp;lt; $SOURCE &amp;gt; $TARGET' %
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(FINAL_PREFIX))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;el_files = glob.glob('editors/scel/el/*.el') + ['editors/scel/el/sclang-vars.el']
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;elc_files = map(lambda f: os.path.splitext(f)[0] + '.elc', el_files)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;elisp_dir = os.path.join(INSTALL_PREFIX, 'share', 'emacs', 'site-lisp')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Command(elc_files, el_files,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'emacs -batch --eval &amp;quot;(add-to-list \'load-path (expand-file-name \\&amp;quot;editors/scel/el/\\&amp;quot;))&amp;quot; -f batch-byte-compile $SOURCES')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-elisp', env.Install(elisp_dir, el_files + elc_files))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;installEnv.Append(DATA = 'install-elisp')
&lt;br&gt;+
&lt;br&gt;+# example library configuration file
&lt;br&gt;+env.Command('linux/examples/sclang.cfg', 'linux/examples/sclang.cfg.in',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;'sed \'s,@PKG_DATA_DIR@,%s,g\' &amp;lt; $SOURCE &amp;gt; $TARGET' %
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_data_dir(FINAL_PREFIX))
&lt;br&gt;+
&lt;br&gt;+# headers
&lt;br&gt;+if env['DEVELOPMENT']:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;header_dirs = Split('common plugin_interface server lang')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if PLATFORM == 'darwin':
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;header_dirs += 'app'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for d in header_dirs:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Alias('install-dev', install_dir(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env, os.path.join('Headers', d),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pkg_include_dir(INSTALL_PREFIX),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;re.compile('.*\.h(h|pp)?'), 1)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# other useful headers
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-dev',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env.Install(pkg_include_dir(INSTALL_PREFIX, 'plugin_interface'), 'Source/plugins/FFT_UGens.h'))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pkgconfig_files = [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libscsynthEnv.Command('linux/libscsynth.pc', 'SConstruct',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;build_pkgconfig_file),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;libsclangEnv.Command('linux/libsclang.pc', 'SConstruct',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; build_pkgconfig_file),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pluginEnv.Command('linux/libscplugin.pc', 'SConstruct',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; build_pkgconfig_file)]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;pkgconfig_dir = os.path.join(lib_dir(INSTALL_PREFIX), 'pkgconfig')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-dev', env.Install(pkgconfig_dir, pkgconfig_files))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;installEnv.Append(ALL = 'install-dev')
&lt;br&gt;+
&lt;br&gt;+# documentation
&lt;br&gt;+if is_installing():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;# TODO: build html documentation?
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;doc_dir = pkg_doc_dir(INSTALL_PREFIX)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('install-doc',
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'doc', doc_dir, ANY_FILE_RE, 0) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'build/examples', doc_dir, ANY_FILE_RE, 1) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;install_dir(env, 'build/TestingAndToDo', doc_dir, ANY_FILE_RE, 1))
&lt;br&gt;+
&lt;br&gt;+env.Alias('install-bin', installEnv['BIN'])
&lt;br&gt;+env.Alias('install-data', installEnv['DATA'])
&lt;br&gt;+env.Alias('install', installEnv['ALL'])
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# distribution
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+DIST_FILES = Split('''
&lt;br&gt;+COPYING
&lt;br&gt;+SConstruct
&lt;br&gt;+clean-compile.sh
&lt;br&gt;+compile.sh
&lt;br&gt;+distro
&lt;br&gt;+linux/examples/onetwoonetwo.sc
&lt;br&gt;+linux/examples/sclang.cfg.in
&lt;br&gt;+linux/examples/sclang.sc
&lt;br&gt;+editors/scel/README
&lt;br&gt;+editors/scvim/README
&lt;br&gt;+editors/sced/README
&lt;br&gt;+scsynthlib_exp
&lt;br&gt;+''')
&lt;br&gt;+
&lt;br&gt;+DIST_SPECS = [
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('build', HELP_FILE_RE),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('Headers', SRC_FILE_RE),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('editors/scel/sc', SC_FILE_RE),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('editors/scel/el', re.compile('.*\.el$')),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('editors/scvim/scclasses', SC_FILE_RE),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;('Source', SRC_FILE_RE)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;]
&lt;br&gt;+
&lt;br&gt;+def dist_paths():
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paths = DIST_FILES[:]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;specs = DIST_SPECS[:]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;while specs:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;base, re = specs.pop()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if not re: re = ANY_FILE_RE
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for root, dirs, files in os.walk(base):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if 'CVS' in dirs: dirs.remove('CVS')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if '.svn' in dirs: dirs.remove('.svn')
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for path in dirs[:]:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if re.match(path):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;specs.append((os.path.join(root, path), re))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirs.remove(path)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for path in files:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if re.match(path):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;paths.append(os.path.join(root, path))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paths.sort()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return paths
&lt;br&gt;+
&lt;br&gt;+def build_tar(env, target, source):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;paths = dist_paths()
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tarfile_name = str(target[0])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tar_name = os.path.splitext(os.path.basename(tarfile_name))[0]
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tar = tarfile.open(tarfile_name, &amp;quot;w:bz2&amp;quot;)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;for path in paths:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tar.add(path, os.path.join(tar_name, path))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;tar.close()
&lt;br&gt;+
&lt;br&gt;+if 'dist' in COMMAND_LINE_TARGETS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Alias('dist', env['TARBALL'])
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Command(env['TARBALL'], 'SConstruct', build_tar)
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# cleanup
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+if 'scrub' in COMMAND_LINE_TARGETS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;env.Clean('scrub', Split('config.log scache.conf .sconf_temp'))
&lt;br&gt;+
&lt;br&gt;+# ======================================================================
&lt;br&gt;+# configuration summary
&lt;br&gt;+# ======================================================================
&lt;br&gt;+
&lt;br&gt;+def yesorno(p):
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if p: return 'yes'
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else: return 'no'
&lt;br&gt;+
&lt;br&gt;+print '------------------------------------------------------------------------'
&lt;br&gt;+print ' ALTIVEC: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['altivec'])
&lt;br&gt;+print ' AUDIOAPI: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % features['audioapi']
&lt;br&gt;+print ' MIDIAPI: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % features['midiapi']
&lt;br&gt;+print ' DEBUG: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['DEBUG'])
&lt;br&gt;+# print ' DESTDIR: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % env['DESTDIR']
&lt;br&gt;+print ' DEVELOPMENT: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['DEVELOPMENT'])
&lt;br&gt;+print ' LANG: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;%s' % yesorno(env['LANG'])
&lt;br&gt;+print ' LID: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(features['lid'])
&lt;br&gt;+print ' NO_LIBSNDFILE: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %s' % yesorno(env['NO_LIBSNDFILE'])
&lt;br&gt;&lt;br&gt;@@ Diff output truncated at 100000 characters. @@
&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9821-trunk-tp4543165p4543165.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-2913030</id>
	<title>show default server?</title>
	<published>2009-05-16T09:20:34Z</published>
	<updated>2009-05-16T09:20:34Z</updated>
	<author>
		<name>Alberto de Campo</name>
	</author>
	<content type="html">hi all,
&lt;br&gt;&lt;br&gt;I find the question 'which server is currently default' occurs really often,
&lt;br&gt;and is a regular source of confusion for students. It occurred to me that the
&lt;br&gt;server windows should just show that.
&lt;br&gt;&lt;br&gt;below the diff for an attempt - ok like that?
&lt;br&gt;any better ideas? opinions?
&lt;br&gt;&lt;br&gt;&lt;br&gt;best, adc
&lt;br&gt;&lt;br&gt;&lt;br&gt;Index: Control/Server.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- Control/Server.sc	(revision 9164)
&lt;br&gt;+++ Control/Server.sc	(working copy)
&lt;br&gt;@@ -185,7 +185,7 @@
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&lt;br&gt;&amp;nbsp; Server : Model {
&lt;br&gt;-	classvar &amp;lt;&amp;gt;local, &amp;lt;&amp;gt;internal, &amp;lt;&amp;gt;default, &amp;lt;&amp;gt;named, &amp;lt;&amp;gt;set, &amp;lt;&amp;gt;program;
&lt;br&gt;+	classvar &amp;lt;&amp;gt;local, &amp;lt;&amp;gt;internal, &amp;lt;default, &amp;lt;&amp;gt;named, &amp;lt;&amp;gt;set, &amp;lt;&amp;gt;program;
&lt;br&gt;&lt;br&gt;&amp;nbsp; 	var &amp;lt;name, &amp;lt;&amp;gt;addr, &amp;lt;clientID=0;
&lt;br&gt;&amp;nbsp; 	var &amp;lt;isLocal, &amp;lt;inProcess, &amp;lt;&amp;gt;sendQuit, &amp;lt;&amp;gt;remoteControlled;
&lt;br&gt;@@ -212,6 +212,12 @@
&lt;br&gt;&lt;br&gt;&amp;nbsp; 	var &amp;lt;pid;
&lt;br&gt;&lt;br&gt;+	*default_ { |server, sync_s = false|
&lt;br&gt;+		default = server; // sync with s?
&lt;br&gt;+		if (sync_s, { thisProcess.interpreter.s = server });
&lt;br&gt;+		this.all.do(_.changed(\default));
&lt;br&gt;+	}
&lt;br&gt;+
&lt;br&gt;&lt;br&gt;Index: GUI/PlusGUI/Control/ServerPlusGUI.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- GUI/PlusGUI/Control/ServerPlusGUI.sc	(revision 9164)
&lt;br&gt;+++ GUI/PlusGUI/Control/ServerPlusGUI.sc	(working copy)
&lt;br&gt;@@ -15,7 +15,7 @@
&lt;br&gt;&amp;nbsp; 	}
&lt;br&gt;&lt;br&gt;&amp;nbsp; 	makeGui { arg w;
&lt;br&gt;-		var active, booter, killer, makeDefault, running, 
&lt;br&gt;booting, stopped, bundling;
&lt;br&gt;+		var active, booter, killer, makeDefault, running, 
&lt;br&gt;booting, stopped, bundling, showDefault;
&lt;br&gt;&amp;nbsp; 		var recorder, scoper;
&lt;br&gt;&amp;nbsp; 		var countsViews, ctlr;
&lt;br&gt;&amp;nbsp; 		var dumping = false, label, gui, font, volumeNum;
&lt;br&gt;@@ -68,12 +68,10 @@
&lt;br&gt;&amp;nbsp; 		makeDefault = gui.button.new(w, Rect(0,0, 54, 18));
&lt;br&gt;&amp;nbsp; 		makeDefault.font = font;
&lt;br&gt;&amp;nbsp; 		makeDefault.canFocus = false;
&lt;br&gt;-		makeDefault.states = [[&amp;quot;-&amp;gt; default&amp;quot;, Color.black, 
&lt;br&gt;Color.clear]];
&lt;br&gt;-		makeDefault.action = {
&lt;br&gt;-			thisProcess.interpreter.s = this;
&lt;br&gt;-			Server.default = this;
&lt;br&gt;-		};
&lt;br&gt;-
&lt;br&gt;+		makeDefault.states = [[&amp;quot;-&amp;gt; default&amp;quot;, Color.black, 
&lt;br&gt;Color.clear], [&amp;quot;-&amp;gt; default&amp;quot;, Color.black, Color.green.alpha_(0.2)]];
&lt;br&gt;+		makeDefault.value_((this == Server.default).binaryValue);
&lt;br&gt;+		makeDefault.action = { Server.default_(this, true) };
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; 		//w.view.decorator.nextLine;
&lt;br&gt;&lt;br&gt;&amp;nbsp; 		recorder = gui.button.new(w, Rect(0,0, 66, 18));
&lt;br&gt;@@ -169,6 +167,7 @@
&lt;br&gt;&amp;nbsp; 				window = nil;
&lt;br&gt;&amp;nbsp; 				ctlr.remove;
&lt;br&gt;&amp;nbsp; 			};
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; 		},{
&lt;br&gt;&amp;nbsp; 			running = {
&lt;br&gt;&amp;nbsp; 				active.stringColor_(Color.new255(74, 120, 74));
&lt;br&gt;@@ -202,6 +201,12 @@
&lt;br&gt;&amp;nbsp; 				ctlr.remove;
&lt;br&gt;&amp;nbsp; 			};
&lt;br&gt;&amp;nbsp; 		});
&lt;br&gt;+
&lt;br&gt;+		showDefault = {
&lt;br&gt;+			&amp;quot;// Server.default: % - s: % // 
&lt;br&gt;\n\n&amp;quot;.postf(Server.default, thisProcess.interpreter.s);
&lt;br&gt;+			makeDefault.value = (Server.default == 
&lt;br&gt;this).binaryValue;
&lt;br&gt;+		};
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; 		if(serverRunning,running,stopped);
&lt;br&gt;&lt;br&gt;&amp;nbsp; 		w.view.decorator.nextLine;
&lt;br&gt;@@ -288,8 +293,10 @@
&lt;br&gt;&amp;nbsp; 					if (unicode == 16rF700, { 
&lt;br&gt;slider.increment; });
&lt;br&gt;&amp;nbsp; 					if (unicode == 16rF703, { 
&lt;br&gt;slider.increment; });
&lt;br&gt;&amp;nbsp; 					if (unicode == 16rF701, { 
&lt;br&gt;slider.decrement; });
&lt;br&gt;-					if (unicode == 16rF702, { 
&lt;br&gt;slider.decrement; });					nil;
&lt;br&gt;-					});
&lt;br&gt;+					if (unicode == 16rF702, { 
&lt;br&gt;slider.decrement; });
&lt;br&gt;+					nil;
&lt;br&gt;+					})
&lt;br&gt;+					;
&lt;br&gt;&amp;nbsp; 			volController = SimpleController(volume)
&lt;br&gt;&amp;nbsp; 				.put(\amp, {|changer, what, vol|
&lt;br&gt;&amp;nbsp; 					{
&lt;br&gt;@@ -325,7 +332,9 @@
&lt;br&gt;&amp;nbsp; 			.put(\cmdPeriod,{
&lt;br&gt;&amp;nbsp; 				recorder.setProperty(\value,0);
&lt;br&gt;&amp;nbsp; 			})
&lt;br&gt;-			.put(\bundling, bundling);
&lt;br&gt;+			.put(\bundling, bundling)
&lt;br&gt;+			.put(\default, showDefault);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; 		this.startAliveThread;
&lt;br&gt;&amp;nbsp; 	}
&lt;br&gt;&amp;nbsp; }
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;--
&lt;br&gt;Alberto de Campo
&lt;br&gt;Bergstrasse 59/33
&lt;br&gt;A-8020 Graz, Austria
&lt;br&gt;e-mail : &lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=2913030&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;
&lt;br&gt;--
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/show-default-server-tp2913030p2913030.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4504548</id>
	<title>plotting behaviour</title>
	<published>2010-02-02T15:42:59Z</published>
	<updated>2010-02-02T15:42:59Z</updated>
	<author>
		<name>Julian Rohrhuber</name>
	</author>
	<content type="html">It seems to me that ArrayedCollection:plot would deserve some second thoughts. I've tried to improve it, so that we get a little more information (also on the long run, it would be good to write a PlotView class).
&lt;br&gt;&lt;br&gt;What I have often come across as uncomfortable behaviour is that the default range is taken to be -1 and 1 for UGen functions. I think it would be better if the appropriate range were estimated from the data and the range printed to one text view for each channel (Or grids of course..).
&lt;br&gt;&lt;br&gt;Another issue is the plotting of multichannel arrays. Two representations may be appropriate: interlaced frames (each frame in a subarray) or parallel channels. Currently plot expects the former. I think it would be better to assume that if you want to express frames, you'd use a flat array and supply numChannels. Otherwise I think it is far more useful to plot parallel arrays.
&lt;br&gt;&lt;br&gt;The attached implementation shows how this would work - please let me know what you think.
&lt;br&gt;Currently it tries to support interlaced data in separate frames, but it would be useful to get rid of this and default to separate rescaling.
&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;// Arrays
&lt;br&gt;[5, 6, 7, 6.5, 4.5, 3.5].plot(&amp;quot;Some data&amp;quot;)
&lt;br&gt;[5, 6, 7, 6.5, 4.5, 3.5].plot(&amp;quot;Some data, in stereo&amp;quot;, numChannels:2)
&lt;br&gt;[5, 6, 7, 6.5, 4.5, 3.5].plot(&amp;quot;Some data, in stereo&amp;quot;, numChannels:2, discrete: true)
&lt;br&gt;&lt;br&gt;// nested arrays
&lt;br&gt;[[5, 6, 7, 6.5, 4.5, 3.5], [5, 6, 7, 6.5, 4.5, 13.5].scramble].plot(&amp;quot;Some data&amp;quot;)
&lt;br&gt;{ |i| { |j| j + 1 * i % 6 / (j * 0.01 + 1) }.dup(200) }.dup(5).plot(&amp;quot;Some 2-d data&amp;quot;);
&lt;br&gt;&lt;br&gt;// 3-channel interlaced data
&lt;br&gt;b = [{1.0.rand}.dup(50), { 20.0.rand - 30 }.dup(50),{ 10.0.rand }.dup(50)].lace(150);
&lt;br&gt;b.plot(numChannels:3, minval: nil, maxval: nil); // Common rescaling
&lt;br&gt;b.plot(numChannels:3, minval: [nil, nil, nil], maxval: [nil, nil, nil]); // Separate rescaling
&lt;br&gt;&lt;br&gt;// Envelopes
&lt;br&gt;Env.adsr(0.4, 0.4, 0.8, 0.9).plot
&lt;br&gt;Env([0, 1, -2, 1, 0.4, 0], [0.2, 0.5, 0.1, 0.3], [-3, 0, 4, 2]).plot;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://n2.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;SignalPlusGUI.sc&lt;/strong&gt; (6K) &lt;a href=&quot;http://n2.nabble.com/attachment/4504548/0/SignalPlusGUI.sc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/plotting-behaviour-tp4504548p4504548.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4542949</id>
	<title>SF.net SVN: supercollider:[9820] trunk</title>
	<published>2010-02-09T10:24:05Z</published>
	<updated>2010-02-09T10:24:05Z</updated>
	<author>
		<name>danstowell</name>
	</author>
	<content type="html">Revision: 9820
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9820&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9820&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; danstowell
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 18:24:05 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;reorganise furniture: add new folders in root; rm unneeded xcode-related folder
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/common/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/iphone/
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/mac/
&lt;br&gt;&lt;br&gt;Removed Paths:
&lt;br&gt;-------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Intermediate Build Files/
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9820-trunk-tp4542949p4542949.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4516616</id>
	<title>SynthDef method cleanup</title>
	<published>2010-02-04T14:16:51Z</published>
	<updated>2010-02-04T14:16:51Z</updated>
	<author>
		<name>Julian Rohrhuber</name>
	</author>
	<content type="html">Some methods of SynthDef are a bit hard to read. I've tried to clear thing up a bit and added a flag to send which stores the synthDesc (see patch).
&lt;br&gt;&lt;br&gt;I'm not sure what the general opinion about this is. My experience is that the combinatorics of methods are hard to explain and that memStore is a too complicated name for a simple behaviour. To understand the name, one has to understand the history of supercollider. I would not be against using the method &amp;quot;add&amp;quot; instead, but as we are in a mess already, I tend to just make things work. 
&lt;br&gt;&lt;br&gt;The new send message now has three args:
&lt;br&gt;&lt;br&gt;server, completionMsg, store = true;
&lt;br&gt;&lt;br&gt;I can imagine to do:
&lt;br&gt;&lt;br&gt;server, completionMsg, libName = \global;
&lt;br&gt;&lt;br&gt;and if libname is nil, or none, it would not store. This is more flexible but less explicit.
&lt;br&gt;&lt;br&gt;One question: should metadata not consistently respond something to &amp;quot;at&amp;quot; ? At least for me, the call
&lt;br&gt;metadata.tryPerform(\at, \shouldNotSend) ? false
&lt;br&gt;is a bit like a sudoku. Could there be a more explicit interface?
&lt;br&gt;&lt;br&gt;+ Dictionary {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; trueAt { arg key;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^this.at(key) == true
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;+ Object {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; trueAt { arg key;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^false
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;Other / further suggestions?
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://n2.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;synthDefSend.patch&lt;/strong&gt; (6K) &lt;a href=&quot;http://n2.nabble.com/attachment/4516616/0/synthDefSend.patch&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SynthDef-method-cleanup-tp4516616p4516616.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4541548</id>
	<title>Where to put system defs? (spun off from SynthDef cleanup)</title>
	<published>2010-02-09T06:56:24Z</published>
	<updated>2010-02-09T06:56:24Z</updated>
	<author>
		<name>James Harkins</name>
	</author>
	<content type="html">
&lt;div&gt;On Feb 9, 2010, at 9:28 AM, Dan Stowell wrote:&lt;/div&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&lt;blockquote type=&quot;cite&quot;&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;In my work I create classes which have associated synthdefs. I use&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;writeOnce to create them as needed. The amount of synthdefs actually&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;weighs down startup quite a lot if I change that to writeDefFile, it's&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;quite noticeable. I don't want my startup to be generating these&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;synthdefs every single time.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;As this is a tangent to the main SynthDef discussion, I thought it best to start a new thread.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I have a real pet peeve about classes that add weight to the synthdefs directory. At the same time, I also have classes that require SynthDefs to be there when needed -- so I put my money where my mouth is and instead, now I use dependencies to send SynthDefs when a server boots.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://quarks.svn.sourceforge.net/viewvc/quarks/dewdrop_lib/ddwChucklib/Prototypes/startup00-ddwSynths.scd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://quarks.svn.sourceforge.net/viewvc/quarks/dewdrop_lib/ddwChucklib/Prototypes/startup00-ddwSynths.scd&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;This might not be an ideal solution for everyone, sure, but there's an interesting problem lurking in there. As you scale up the number of installed extensions, if a certain percentage of them add their own set of SynthDefs, where do you put them?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In principle, I think it would be ideal to send SynthDefs only when they're going to be used and not before. In practice, that proved to be a PITA in my work. I'm not sure which is the lesser of evils. My way takes a bit more care in the initial coding, but it does have the advantage that a user who installs dewdrop_lib, and then uninstalls it later, doesn't have any persistent cruft in the filesystem (whereas writeOnce leaves litter behind). To me, it's worth the extra effort to be more polite to the user.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;hjh&lt;/div&gt;&lt;br&gt;&lt;div&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Lucida Grande'; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; &quot;&gt;&lt;div&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;: H. James Harkins&lt;/div&gt;&lt;div&gt;: &lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4541548&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&lt;/div&gt;&lt;div&gt;: &lt;a href=&quot;http://www.dewdrop-world.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.dewdrop-world.net&lt;/a&gt;&lt;/div&gt;&lt;div&gt;.::!:.:.......:.::........:..!.::.::...:..:...:.:.:.:..:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&quot;Come said the Muse,&lt;/div&gt;&lt;div&gt;Sing me a song no poet has yet chanted,&lt;/div&gt;&lt;div&gt;Sing me the universal.&quot;&amp;nbsp; -- Whitman&lt;/div&gt;&lt;/span&gt; &lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/Where-to-put-system-defs-spun-off-from-SynthDef-cleanup-tp4541548p4541548.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4540822</id>
	<title>NumberBox scrolling fix</title>
	<published>2010-02-09T04:38:55Z</published>
	<updated>2010-02-09T04:38:55Z</updated>
	<author>
		<name>nonprivate</name>
	</author>
	<content type="html">hi, i always swore i'd never (deliberately) post to the dev list, but where i have come across a specific problem and can submit a solution that is easy to implement and does not break code, then i may as well post it here. if this is somehow unacceptable, then... what is this list for!&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;so, i have had problems with the scrolling behaviour of NumberBox. i am on osx so i am specifically referencing SCNumberBox. i don't understand how it can be regarded as usable behaviour if the scrolling is both horizontal and vertical at the same time. i am used to scrolling vertically, as was the case in sc1 and sc2 so i got used to it as a matter of preference, anyway so if i scroll vertically upwards but my mouse wavers even one horizontal pixel backwards, the value will start going the other way, and the resulting value jumps all over the place. i think it's better to have either horizontal or vertical scrolling, and personally i would have vertical only scrolling as the default. however, since i want to avoid the inevitable moans of &quot;that will break code!&quot; the following solution preserves the current behaviour, unless&amp;nbsp;scrollDirection is specifically set to one thing or the other. i used /h and /v as that's what Gradient does.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;so in the variable declarations, add:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;var&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt; &amp;lt;&amp;gt;scrollDirection;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; face=&quot;Monaco&quot; size=&quot;1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 9px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; face=&quot;Monaco&quot; size=&quot;1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 9px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Helvetica; font-size: medium; &quot;&gt;and then alter mouseMove as follows:&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font class=&quot;Apple-style-span&quot; face=&quot;Monaco&quot; size=&quot;1&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 9px;&quot;&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;mouseMove { &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;arg&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt; x, y, modifiers;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;var&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt; direction;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if (scroll == &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;true&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;, {&lt;/font&gt;&lt;/div&gt;&lt;p style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px&quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;br class=&quot;khtml-block-placeholder&quot;&gt;&lt;/p&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;case&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{scrollDirection == &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#007300&quot; style=&quot;font: 9.0px Monaco; color: #007300&quot;&gt;\h&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;}&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#bf0000&quot; style=&quot;font: 9.0px Monaco; color: #bf0000&quot;&gt;// horizontal scrolling:&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ((x - hit.x) &amp;lt; 0) {direction = -1.0} {direction = 1.0};&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{scrollDirection == &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#007300&quot; style=&quot;font: 9.0px Monaco; color: #007300&quot;&gt;\v&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;}&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#bf0000&quot; style=&quot;font: 9.0px Monaco; color: #bf0000&quot;&gt;// vertical scrolling:&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ((y - hit.y) &amp;gt; 0) {direction = -1.0} {direction = 1.0};&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;}&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;{&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#bf0000&quot; style=&quot;font: 9.0px Monaco; color: #bf0000&quot;&gt;// horizontal or vertical scrolling:&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;direction = 1.0;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;if ( (x - hit.x) &amp;lt; 0 or: { (y - hit.y) &amp;gt; 0 }) { direction = -1.0; };&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;};&lt;/font&gt;&lt;/div&gt;&lt;p style=&quot;margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px&quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;br class=&quot;khtml-block-placeholder&quot;&gt;&lt;/p&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; min-height: 12px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;this&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;.valueAction = (&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;this&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;.value + (inc * &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;this&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;.scroll_step * direction));&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;hit = &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;Point&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;(x, y);&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;});&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;mouseMoveAction.value(&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0000bf&quot; style=&quot;font: 9.0px Monaco; color: #0000bf&quot;&gt;this&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;, x, y, modifiers);&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;}&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Helvetica; font-size: medium; &quot;&gt;then one can do this:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; &quot;&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 85px; text-indent: -85px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;b =&amp;nbsp;&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0922b2&quot; style=&quot;font: 9.0px Monaco; color: #0922b2&quot;&gt;NumberBox&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;(w, &lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; color=&quot;#0922b2&quot; style=&quot;font: 9.0px Monaco; color: #0922b2&quot;&gt;Rect&lt;/font&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;(150, 10, 100, 20));&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 85px; text-indent: -85px; &quot;&gt;&lt;font face=&quot;Monaco&quot; size=&quot;1&quot; style=&quot;font: 9.0px Monaco&quot;&gt;b.scrollDirection_(\v);&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 85px; text-indent: -85px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 85px; text-indent: -85px; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Helvetica; font-size: medium; &quot;&gt;i would appreciate very much this receiving your consideration, thanks.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/NumberBox-scrolling-fix-tp4540822p4540822.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4540673</id>
	<title>supernova v0.2</title>
	<published>2010-02-09T04:10:24Z</published>
	<updated>2010-02-09T04:10:24Z</updated>
	<author>
		<name>Tim Blechmann-2</name>
	</author>
	<content type="html">hi all,
&lt;br&gt;&lt;br&gt;there is a new release of supernova, a multi-processor aware version of
&lt;br&gt;the supercollider server scsynth. it provides most features of scsynth,
&lt;br&gt;the most prominent feature, that is still missing, is non-realtime
&lt;br&gt;synthesis. that will be part of v0.3, though ...
&lt;br&gt;&lt;br&gt;getting started:
&lt;br&gt;&lt;a href=&quot;http://tim.klingt.org/code/wiki/supernova&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://tim.klingt.org/code/wiki/supernova&lt;/a&gt;&lt;br&gt;&lt;br&gt;tarballs: &lt;a href=&quot;http://tim.klingt.org/code/projects/list_files/supernova&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://tim.klingt.org/code/projects/list_files/supernova&lt;/a&gt;&lt;br&gt;git repository: git://tim.klingt.org/supercollider.git
&lt;br&gt;debs: &lt;a href=&quot;https://launchpad.net/~tim-klingt/+archive/supernova&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;https://launchpad.net/~tim-klingt/+archive/supernova&lt;/a&gt;&lt;br&gt;&lt;br&gt;cheers, tim
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4540673&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://tim.klingt.org&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://tim.klingt.org&lt;/a&gt;&lt;br&gt;&lt;br&gt;Happiness is a byproduct of function, purpose, and conflict; those who
&lt;br&gt;seek happiness for itself seek victory without war.
&lt;br&gt;&amp;nbsp; William S. Burroughs
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://n2.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (204 bytes) &lt;a href=&quot;http://n2.nabble.com/attachment/4540673/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/supernova-v0-2-tp4540673p4540673.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4540452</id>
	<title>SF.net SVN: quarks:[1372] JITMIDIKtl</title>
	<published>2010-02-09T03:05:19Z</published>
	<updated>2010-02-09T03:05:19Z</updated>
	<author>
		<name>decampo</name>
	</author>
	<content type="html">Revision: 1372
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://quarks.svn.sourceforge.net/quarks/?rev=1372&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://quarks.svn.sourceforge.net/quarks/?rev=1372&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; decampo
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 11:05:19 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;added pocketdial class, more cleanups.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/BCRKtl.sc
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/FFLV2Ktl.sc
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/MIDIKtl.sc
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/NanoKtl.html
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/NanoKtl.sc
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/PFKtl.sc
&lt;br&gt;&lt;br&gt;Added Paths:
&lt;br&gt;-----------
&lt;br&gt;&amp;nbsp; &amp;nbsp; JITMIDIKtl/PDKtl.html
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/BCRKtl.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/BCRKtl.sc	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/BCRKtl.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -10,17 +10,6 @@
&lt;br&gt;&amp;nbsp;		this.makeDefaults;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;-	init {
&lt;br&gt;-		super.init;
&lt;br&gt;-		ctlNames = defaults[this.class];
&lt;br&gt;-		^this
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;-	mapCC { |ctl= \sl1, action|
&lt;br&gt;-		var ccDictKey = ctlNames[ctl]; // '0_42'
&lt;br&gt;-		ccDict.put(ccDictKey, action);
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	mapToPxPars { |proxy ... pairs|
&lt;br&gt;&amp;nbsp;		if (midiOut.notNil) {
&lt;br&gt;&amp;nbsp;			this.sendFromProxy(proxy, pairs);
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/FFLV2Ktl.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/FFLV2Ktl.sc	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/FFLV2Ktl.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -6,15 +6,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	init { 
&lt;br&gt;&amp;nbsp;		super.init; 
&lt;br&gt;-		ctlNames = defaults[this.class];
&lt;br&gt;&amp;nbsp;		lastVals = ();
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;-	mapCC { |ctl= \sl1, action| 
&lt;br&gt;-		var ccDictKey = ctlNames[ctl]; // '0_42'
&lt;br&gt;-		ccDict.put(ccDictKey, action);
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;		// to do: how to map to editor? 
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		// how to map to proxymixer?
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/MIDIKtl.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/MIDIKtl.sc	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/MIDIKtl.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -14,6 +14,8 @@
&lt;br&gt;&amp;nbsp;		// subclasses override this method. 
&lt;br&gt;&amp;nbsp;		// they put their controller keys and chan/ccnum combinations into 
&lt;br&gt;&amp;nbsp;		// defaults[class]
&lt;br&gt;+			// MIDIKtl is empty by default
&lt;br&gt;+		defaults.put(this.class, ());
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;&amp;nbsp;	*new { |srcID, ccDict, noteDict| 
&lt;br&gt;@@ -27,6 +29,8 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	init { 
&lt;br&gt;+		ctlNames = defaults[this.class];
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;		ccDict = ccDict ?? ();
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		ccresp.remove; 
&lt;br&gt;@@ -49,7 +53,34 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	noteKeyToChanNote { |noteKey| ^noteKey.asString.split($_).asInteger }
&lt;br&gt;+
&lt;br&gt;+		// use when ctlNames is one flat dict
&lt;br&gt;+	mapCC { |ctl= \sl1, action| 
&lt;br&gt;+		var ccDictKey = ctlNames[ctl]; // '0_42'
&lt;br&gt;+		if (ccDictKey.isNil) { 
&lt;br&gt;+			warn(&amp;quot;key % : no chan_ccnum found!\n&amp;quot;.format(ctl));
&lt;br&gt;+			^this
&lt;br&gt;+		}; 
&lt;br&gt;+		ccDict.put(ccDictKey, action);
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;	
&lt;br&gt;+		// use when ctlNames are scene-based dicts (NanoKtl, PDKtl)
&lt;br&gt;+	mapCCS { |scene=2, ctl= \sl1, action| 
&lt;br&gt;+		var ccScene, ccDictKey; 
&lt;br&gt;+		
&lt;br&gt;+		ccScene = ctlNames[scene];
&lt;br&gt;+		if (ccScene.isNil) { 
&lt;br&gt;+			warn(&amp;quot;% : mapCCS: scene % : not found!\n&amp;quot;.format(this, scene));
&lt;br&gt;+			^this
&lt;br&gt;+		};
&lt;br&gt;+		ccDictKey = ccScene[ctl]; // '0_42'
&lt;br&gt;+		if (ccDictKey.isNil) { 
&lt;br&gt;+			warn(&amp;quot;key % : no chan_ccnum found!\n&amp;quot;.format(ctl));
&lt;br&gt;+			^nil			
&lt;br&gt;+		};	
&lt;br&gt;+		ccDict.put(ccDictKey, action);
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;MIDINKtl : MIDIKtl { 
&lt;br&gt;@@ -80,6 +111,15 @@
&lt;br&gt;&amp;nbsp;		}, srcID);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	mapNoteOn { 
&lt;br&gt;+		
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	mapNoteOff { 
&lt;br&gt;+		
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	free { 
&lt;br&gt;&amp;nbsp;		super.free;
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/NanoKtl.html
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/NanoKtl.html	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/NanoKtl.html	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -91,8 +91,8 @@
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p12&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.ccresp;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// a midi CCResponder listing to that MIDI port&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p8&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p12&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// map transport buttons 'play' and 'rec' to simple actions:&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(0, &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;'play'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; 'play': %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(0, &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;'rec'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; 'rec': %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(0, &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;'play'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; 'play': %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(0, &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;'rec'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; 'rec': %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p12&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// the actions are now in the dict:&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.ccDict.postcs;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p8&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;@@ -120,24 +120,24 @@
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p15&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;g.ctlNames&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;[1]&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p10&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p14&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// add some more mapped actions&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'sl1'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, slider1: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'kn2'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, knob2: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'bu3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button up 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'bd3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button down 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'sl1'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, slider1: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'kn2'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, knob2: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'bu3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button up 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;'bd3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button down 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p8&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.ccDict;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p13&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Instance Methods&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p10&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;mapCC (editor, scene)&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;mapCCS (editor, scene)&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p10&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;map one of the controls in a scene to a general function.&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p10&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g = &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;NanoKtl&amp;lt;/span&amp;gt;.new;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;// listen to all midi in ports&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'sl1'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, slider1: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'kn2'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, knob2: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'bu3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button up 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;-&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCC(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'bd3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button down 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'sl1'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, slider1: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'kn2'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, knob2: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'bu3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button up 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.mapCCS(1, &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;'bd3'&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;|ch, cc, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;quot; scene 1, button down 3: %.\n&amp;quot;&amp;lt;/span&amp;gt;.postf([ch, cc, val]) });&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;g.ccDict;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p10&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&amp;nbsp;&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;mapToPxEdit (editor, scene)&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/NanoKtl.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/NanoKtl.sc	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/NanoKtl.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -29,11 +29,6 @@
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;		^this
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-
&lt;br&gt;-	mapCC { |scene=2, ctl= \sl1, action| 
&lt;br&gt;-		var ccDictKey = ctlNames[scene][ctl]; // '0_42'
&lt;br&gt;-		ccDict.put(ccDictKey, action);
&lt;br&gt;-	}
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;	mapToPxEdit { |editor, scene=1, volPause = true| 
&lt;br&gt;&amp;nbsp;		pxEditors.put(scene, editor);
&lt;br&gt;@@ -41,7 +36,7 @@
&lt;br&gt;&amp;nbsp;			// map 8 knobs to params - can be shifted
&lt;br&gt;&amp;nbsp;		 [\kn1, \kn2, \kn3, \kn4, \kn5, \kn6, \kn7, \kn8].do { |key, i| 
&lt;br&gt;&amp;nbsp;		 	
&lt;br&gt;-			this.mapCC(scene, key, 
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;&amp;nbsp;				{ |ch, cc, val| 
&lt;br&gt;&amp;nbsp;					var proxy = pxEditors[scene].proxy;
&lt;br&gt;&amp;nbsp;					var parKey = &amp;nbsp;pxEditors[scene].editKeys[i + parOffsets[scene]];
&lt;br&gt;@@ -55,7 +50,7 @@
&lt;br&gt;&amp;nbsp;			)
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;&amp;nbsp;			// and use 9th knob for proxy volume 
&lt;br&gt;-		this.mapCC(scene, \kn9, { |ch, cc, val| 
&lt;br&gt;+		this.mapCCS(scene, \kn9, { |ch, cc, val| 
&lt;br&gt;&amp;nbsp;			var lastVal = lastVals[\kn9];
&lt;br&gt;&amp;nbsp;			var mappedVol = \amp.asSpec.map(val / 127);
&lt;br&gt;&amp;nbsp;			var proxy = pxEditors[scene].proxy;
&lt;br&gt;@@ -71,7 +66,7 @@
&lt;br&gt;&amp;nbsp;		pairs.do { |pair| 
&lt;br&gt;&amp;nbsp;			var ctlName, paramName; 
&lt;br&gt;&amp;nbsp;			#ctlName, paramName = pair;
&lt;br&gt;-			this.mapCC(scene, ctlName, 
&lt;br&gt;+			this.mapCCS(scene, ctlName, 
&lt;br&gt;&amp;nbsp;				{ &amp;nbsp;|ch, cc, midival| 
&lt;br&gt;&amp;nbsp;					proxy.set(paramName, paramName.asSpec.map(midival / 127))
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;@@ -92,13 +87,13 @@
&lt;br&gt;&amp;nbsp;		mastaFunc = { |chan, cc, val| server.volume.volume_(\mastaVol.asSpec.map(val/127)) };
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;			Spec.add(\mastaVol, [server.volume.min, server.volume.max, \db]);
&lt;br&gt;-			(1..4).do { |scene| this.mapCC(scene, \sl9, mastaFunc) };
&lt;br&gt;+			(1..4).do { |scene| this.mapCCS(scene, \sl9, mastaFunc) };
&lt;br&gt;&amp;nbsp;			
&lt;br&gt;&amp;nbsp;			// scene 1: 
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			// map first 8 volumes to sliders
&lt;br&gt;&amp;nbsp;		[\sl1, \sl2, \sl3, \sl4, \sl5, \sl6, \sl7, \sl8].do { |key, i| 
&lt;br&gt;-			this.mapCC(scene, key, 
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;&amp;nbsp;				{ |ch, cc, val| 
&lt;br&gt;&amp;nbsp;					var lastVal = lastVals[key]; 
&lt;br&gt;&amp;nbsp;					var mappedVal = \amp.asSpec.map(val / 127); 
&lt;br&gt;@@ -116,13 +111,13 @@
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;&amp;nbsp;			// upper buttons: send to editor
&lt;br&gt;&amp;nbsp;		[\bu1, \bu2, \bu3, \bu4, \bu5, \bu6, \bu7, \bu8].do { |key, i| 
&lt;br&gt;-			this.mapCC(scene, key, 
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;&amp;nbsp;				{ |ch, cc, val| defer { pxmixers[scene].editBtnsAr[i + pxOffsets[scene]].doAction }; })
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;&amp;nbsp;		
&lt;br&gt;&amp;nbsp;			// lower buttons: toggle play/stop 
&lt;br&gt;&amp;nbsp;		 [\bd1, \bd2, \bd3, \bd4, \bd5, \bd6, \bd7, \bd8].do { |key, i| 
&lt;br&gt;-			this.mapCC(scene, key, 
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;&amp;nbsp;				{ |ch, cc, val| defer { 
&lt;br&gt;&amp;nbsp;					var px = pxmixers[scene].pxMons[i + pxOffsets[scene]].proxy;
&lt;br&gt;&amp;nbsp;					if ( ctlNames[scene]['mode'] == 'push' ){
&lt;br&gt;@@ -138,8 +133,8 @@
&lt;br&gt;&amp;nbsp;				}; )
&lt;br&gt;&amp;nbsp;		};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		this.mapCC(scene, \bu9, { |src, chan, val| if (val &amp;gt; 0) { this.pxShift(1, scene) } });
&lt;br&gt;-		this.mapCC(scene, \bd9, { |src, chan, val| if (val &amp;gt; 0) { this.paramShift(1, scene) } });
&lt;br&gt;+		this.mapCCS(scene, \bu9, { |src, chan, val| if (val &amp;gt; 0) { this.pxShift(1, scene) } });
&lt;br&gt;+		this.mapCCS(scene, \bd9, { |src, chan, val| if (val &amp;gt; 0) { this.paramShift(1, scene) } });
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		this.pxShift(0, scene);		
&lt;br&gt;&amp;nbsp;		this.mapToPxEdit(mixer.editor, scene);
&lt;br&gt;Added: JITMIDIKtl/PDKtl.html
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/PDKtl.html	 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(rev 0)
&lt;br&gt;+++ JITMIDIKtl/PDKtl.html	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -0,0 +1,127 @@
&lt;br&gt;+&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD HTML 4.01//EN&amp;quot; &amp;quot;&lt;a href=&quot;http://www.w3.org/TR/html4/strict.dtd&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.w3.org/TR/html4/strict.dtd&lt;/a&gt;&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;html&amp;gt;
&lt;br&gt;+&amp;lt;head&amp;gt;
&lt;br&gt;+&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;meta http-equiv=&amp;quot;Content-Style-Type&amp;quot; content=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
&lt;br&gt;+&amp;lt;meta name=&amp;quot;Generator&amp;quot; content=&amp;quot;Cocoa HTML Writer&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;meta name=&amp;quot;CocoaVersion&amp;quot; content=&amp;quot;1038.25&amp;quot;&amp;gt;
&lt;br&gt;+&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
&lt;br&gt;+p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
&lt;br&gt;+p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
&lt;br&gt;+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
&lt;br&gt;+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
&lt;br&gt;+p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #cd0b0b}
&lt;br&gt;+p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #2024c7}
&lt;br&gt;+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #737373}
&lt;br&gt;+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #2b30fa; min-height: 14.0px}
&lt;br&gt;+p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d}
&lt;br&gt;+span.s1 {font: 18.0px Helvetica}
&lt;br&gt;+span.s2 {font: 9.0px Monaco}
&lt;br&gt;+span.s3 {font: 12.0px Helvetica; color: #2b30fa}
&lt;br&gt;+span.s4 {color: #0000ee}
&lt;br&gt;+span.s5 {color: #2b30fa}
&lt;br&gt;+span.s6 {text-decoration: underline ; color: #2b30fa}
&lt;br&gt;+span.s7 {color: #000000}
&lt;br&gt;+span.s8 {color: #008417}
&lt;br&gt;+span.s9 {color: #737373}
&lt;br&gt;+span.s10 {color: #2024c7}
&lt;br&gt;+span.s11 {color: #1d20b9}
&lt;br&gt;+span.s12 {color: #606060}
&lt;br&gt;+span.s13 {color: #ad140d}
&lt;br&gt;+span.Apple-tab-span {white-space:pre}
&lt;br&gt;+&amp;lt;/style&amp;gt;
&lt;br&gt;+&amp;lt;/head&amp;gt;
&lt;br&gt;+&amp;lt;body&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;PDKtl&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s2&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;a MIDIKtl class for the Doepfer PocketDial&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;The Doepfer PocketDial only has 16 endless knobs, so PDKtl is a rather simple class.&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s2&amp;quot;&amp;gt;see also&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt;  &amp;lt;/span&amp;gt;&amp;lt;a href=&amp;quot;PFKtl.html&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;PFKtl&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;, &amp;lt;/b&amp;gt;&amp;lt;a href=&amp;quot;MIDIKtl.html&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s4&amp;quot;&amp;gt;&amp;lt;b&amp;gt;MIDIKtl&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;, &amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s6&amp;quot;&amp;gt;&amp;lt;b&amp;gt;NanoKtl&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;first example&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;// make a new PDKtl&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f = PDKtl.new;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// map a single slider's action&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p6&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;f.mapCC(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\kn01&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;, { &amp;lt;/span&amp;gt;|chan, ccnum, val|&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;var normstep = 0.01;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;var midiNudge = 64 - val;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;var normedNudge = midiNudge * normstep;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p7&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;PDKtl test: ch % cc % val % - midinudge: % normedNudge: % \n&amp;quot;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;.postf(chan, ccnum, val, midiNudge, normedNudge);&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;quot;map here with a spec...&amp;quot;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;});&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;// fails if no midi info for that key&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f.mapCC(&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\wrongKey&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;|chan, ccnum, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;&amp;quot;PDKtl test: ch % cc % val %\n&amp;quot;&amp;lt;/span&amp;gt;.postf(chan, ccnum, val) });&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Class Variables&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;*verbose &amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;// a flag whether the class posts extended info &amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;PDKtl.verbose = true;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;PDKtl.verbose = false;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Instance Variables&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p8&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Methods&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p8&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;*new(uid)&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;make a new PDKtl. uid is an optional ID for the MIDI port to listen to.&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f = PDKtl.new;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s2&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;mapCCS(scene, ctl, action)&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// map a single knob's action&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f.mapCCS(1, &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\kn01&amp;lt;/span&amp;gt;, { &amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;|chan, ccnum, val|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s9&amp;quot;&amp;gt;&amp;quot;PDKtl test: ch % cc % val %\n&amp;quot;&amp;lt;/span&amp;gt;.postf(chan, ccnum, val) });&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;// the valid names are:&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f.ctlNames[1].keys.asArray.sort;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;mapToPxEdit(editor, indices, lastIsVol) &amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;- map to a NodeProxyEditor.&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;editor&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;the editor&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;indices&amp;lt;/b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;which sliders to map to. default is [1, 2 .. 8].&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;lastIsVol&amp;lt;/b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;flag whether the last slider becomes a volume control for that editor.&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p5&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// make an Ndef and its editor first&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;Spec&amp;lt;/span&amp;gt;.add(&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\harm&amp;lt;/span&amp;gt;, [2, 200, &amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\exp&amp;lt;/span&amp;gt;]);&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p6&amp;quot;&amp;gt;Ndef&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;, { &amp;lt;/span&amp;gt;|freq = 20, harm = 20|&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;Blip&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;.ar(freq, harm) });&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p6&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;o = &amp;lt;/span&amp;gt;NodeProxyEditor&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;Ndef&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;));&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f.mapToPxEdit(o, 1);&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;)&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s2&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;mapToPxMix(mixer, splitIndex, lastEdIsVol, lastIsMaster)&amp;lt;/b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;map to a proxymixer.&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p2&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;mixer &amp;lt;/b&amp;gt;is the mixer to map to.&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;the left hand sliders (sliders 1 to splitIndex) are mapped to volumes;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;the right hand sliders&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt;  &amp;lt;/span&amp;gt;map to the mixer.editor parameters.&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;lastIsMaster: &amp;lt;/b&amp;gt;if true, the rightmost control maps to server volume.&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;lastEdIsVol: &amp;lt;/b&amp;gt;if true, the last free slider on the right side is used for&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;the edited proxy's volume.&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p1&amp;quot;&amp;gt;&amp;lt;b&amp;gt;(&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p6&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;m = &amp;lt;/span&amp;gt;NdefMixer&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;();&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;f.mapToPxMix(m, 1);&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;m.openEditZone;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;m.editor.proxy_(&amp;lt;span class=&amp;quot;s10&amp;quot;&amp;gt;Ndef&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;s8&amp;quot;&amp;gt;\a&amp;lt;/span&amp;gt;));&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;)&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;s7&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;// test many proxies&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;Spec.add(\freqScale, [0.1, 10, \exp]);&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p9&amp;quot;&amp;gt;Spec.add(\rateScale, [0.1, 10, \exp]);&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;10.do { &amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;|i|&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;Ndef((&amp;lt;span class=&amp;quot;s12&amp;quot;&amp;gt;&amp;quot;test&amp;quot;&amp;lt;/span&amp;gt; ++ i).asSymbol, { |&amp;lt;span class=&amp;quot;s13&amp;quot;&amp;gt;rateScale&amp;lt;/span&amp;gt; = 1, freqScale = 1|&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;Pan2&amp;lt;/span&amp;gt;.ar(&amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;Ringz&amp;lt;/span&amp;gt;.ar(&amp;lt;span class=&amp;quot;s11&amp;quot;&amp;gt;Impulse&amp;lt;/span&amp;gt;.ar(exprand(0.5, 4) * &amp;lt;span class=&amp;quot;s13&amp;quot;&amp;gt;rateScale&amp;lt;/span&amp;gt;), exprand(300, 3000) * freqScale, 0.02), 1.0.rand2, 0.2)&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;}).play(vol: 0.2)&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;Apple-tab-span&amp;quot;&amp;gt;	&amp;lt;/span&amp;gt;;&amp;lt;span class=&amp;quot;Apple-converted-space&amp;quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;};&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p4&amp;quot;&amp;gt;)&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;p class=&amp;quot;p3&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&lt;br&gt;+&amp;lt;/body&amp;gt;
&lt;br&gt;+&amp;lt;/html&amp;gt;
&lt;br&gt;&lt;br&gt;Modified: JITMIDIKtl/PFKtl.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- JITMIDIKtl/PFKtl.sc	2010-02-07 20:50:55 UTC (rev 1371)
&lt;br&gt;+++ JITMIDIKtl/PFKtl.sc	2010-02-09 11:05:19 UTC (rev 1372)
&lt;br&gt;@@ -4,7 +4,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	init { 
&lt;br&gt;&amp;nbsp;		super.init;
&lt;br&gt;-		ctlNames = defaults[this.class];
&lt;br&gt;&amp;nbsp;		lastVals = ();
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -32,16 +31,7 @@
&lt;br&gt;&amp;nbsp;			)
&lt;br&gt;&amp;nbsp;		);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	
&lt;br&gt;-	mapCC { |ctl= \sl1, action| 
&lt;br&gt;-		var ccDictKey = ctlNames[ctl]; // '0_42'
&lt;br&gt;-		if (ccDictKey.isNil) { 
&lt;br&gt;-			warn(&amp;quot;key % : no chan_ccnum found!\n&amp;quot;.format(ctl));
&lt;br&gt;-		} { 
&lt;br&gt;-			ccDict.put(ccDictKey, action);
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;-		// map to 
&lt;br&gt;+			// map to 
&lt;br&gt;&amp;nbsp;	mapToPxEdit { |editor, indices, lastIsVol = true| 
&lt;br&gt;&amp;nbsp;		var slKeys, lastSlKey; 
&lt;br&gt;&amp;nbsp;		indices = indices ? (1..8); 
&lt;br&gt;@@ -110,3 +100,158 @@
&lt;br&gt;&amp;nbsp;		this.mapToPxEdit(mixer.editor, (splitIndex + 1 .. slKeys.size));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+PDKtl : MIDIKtl {
&lt;br&gt;+	classvar &amp;lt;&amp;gt;verbose = false; 
&lt;br&gt;+
&lt;br&gt;+	var &amp;lt;&amp;gt;step = 0.01; 
&lt;br&gt;+	
&lt;br&gt;+	*makeDefaults { 
&lt;br&gt;+
&lt;br&gt;+		// implement nudge! 
&lt;br&gt;+	/*	all midi chan 0, 
&lt;br&gt;+	scene 1: 0 - 15
&lt;br&gt;+	scene2: 	16 - 31
&lt;br&gt;+	scene 3: 32 - 47
&lt;br&gt;+	scene4: 48 - 63
&lt;br&gt;+	*/
&lt;br&gt;+
&lt;br&gt;+		// just one bank of sliders
&lt;br&gt;+		defaults.put(this, (
&lt;br&gt;+			1: 	(	kn01: '0_0', 
&lt;br&gt;+					kn02: '0_1', 
&lt;br&gt;+					kn03: '0_2', 
&lt;br&gt;+					kn04: '0_3', 
&lt;br&gt;+					kn05: '0_4', 
&lt;br&gt;+					kn06: '0_5', 
&lt;br&gt;+					kn07: '0_6', 
&lt;br&gt;+					kn08: '0_7', 
&lt;br&gt;+					kn09: '0_8', 
&lt;br&gt;+					kn10: '0_9', 
&lt;br&gt;+					kn11: '0_10', 
&lt;br&gt;+					kn12: '0_11', 
&lt;br&gt;+					kn13: '0_12', 
&lt;br&gt;+					kn14: '0_13', 
&lt;br&gt;+					kn15: '0_14',
&lt;br&gt;+					kn16: '0_15'
&lt;br&gt;+			),
&lt;br&gt;+
&lt;br&gt;+			2: 	(	kn01: '0_16', 
&lt;br&gt;+					kn02: '0_17', 
&lt;br&gt;+					kn03: '0_18', 
&lt;br&gt;+					kn04: '0_19', 
&lt;br&gt;+					kn05: '0_20', 
&lt;br&gt;+					kn06: '0_21', 
&lt;br&gt;+					kn07: '0_22', 
&lt;br&gt;+					kn08: '0_23', 
&lt;br&gt;+					kn09: '0_24', 
&lt;br&gt;+					kn10: '0_25', 
&lt;br&gt;+					kn11: '0_26', 
&lt;br&gt;+					kn12: '0_27', 
&lt;br&gt;+					kn13: '0_28', 
&lt;br&gt;+					kn14: '0_29', 
&lt;br&gt;+					kn15: '0_30',
&lt;br&gt;+					kn16: '0_31'
&lt;br&gt;+			),
&lt;br&gt;+
&lt;br&gt;+			3: 	(	kn01: '0_32', 
&lt;br&gt;+					kn02: '0_33', 
&lt;br&gt;+					kn03: '0_34', 
&lt;br&gt;+					kn04: '0_35', 
&lt;br&gt;+					kn05: '0_36', 
&lt;br&gt;+					kn06: '0_37', 
&lt;br&gt;+					kn07: '0_38', 
&lt;br&gt;+					kn08: '0_39', 
&lt;br&gt;+					kn09: '0_40', 
&lt;br&gt;+					kn10: '0_41', 
&lt;br&gt;+					kn11: '0_42', 
&lt;br&gt;+					kn12: '0_43', 
&lt;br&gt;+					kn13: '0_44', 
&lt;br&gt;+					kn14: '0_45', 
&lt;br&gt;+					kn15: '0_46',
&lt;br&gt;+					kn16: '0_47'
&lt;br&gt;+			),
&lt;br&gt;+
&lt;br&gt;+			4: 	(	kn01: '0_48', 
&lt;br&gt;+					kn02: '0_49', 
&lt;br&gt;+					kn03: '0_50', 
&lt;br&gt;+					kn04: '0_51', 
&lt;br&gt;+					kn05: '0_52', 
&lt;br&gt;+					kn06: '0_53', 
&lt;br&gt;+					kn07: '0_54', 
&lt;br&gt;+					kn08: '0_55', 
&lt;br&gt;+					kn09: '0_56', 
&lt;br&gt;+					kn10: '0_57', 
&lt;br&gt;+					kn11: '0_58', 
&lt;br&gt;+					kn12: '0_59', 
&lt;br&gt;+					kn13: '0_60', 
&lt;br&gt;+					kn14: '0_61', 
&lt;br&gt;+					kn15: '0_62',
&lt;br&gt;+					kn16: '0_63'
&lt;br&gt;+			)
&lt;br&gt;+		));
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+		// map to 
&lt;br&gt;+	mapToPxEdit { |editor, scene = 1, indices, lastIsVol = true| 
&lt;br&gt;+		var knobKeys, lastKnobKey; 
&lt;br&gt;+		indices = indices ? (1..8); 
&lt;br&gt;+		
&lt;br&gt;+		knobKeys = indices.collect { |i| (&amp;quot;kn&amp;quot; ++ (100 + i).asString.drop(1)).asSymbol}.postcs; 
&lt;br&gt;+		
&lt;br&gt;+		if (lastIsVol) { 
&lt;br&gt;+			lastKnobKey = knobKeys.pop;
&lt;br&gt;+			
&lt;br&gt;+				// use last knob for proxy volume
&lt;br&gt;+			this.mapCCS(scene, lastKnobKey, { |ch, cc, val| 
&lt;br&gt;+				var proxy = editor.proxy;
&lt;br&gt;+				if (proxy.notNil) { proxy.nudgeVol(val - 64 * step) };
&lt;br&gt;+			});
&lt;br&gt;+		};
&lt;br&gt;+		
&lt;br&gt;+		knobKeys.do { |key, i| &amp;nbsp;	
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;+				{ |ch, cc, val| 
&lt;br&gt;+					var proxy = editor.proxy;
&lt;br&gt;+					var parKey = &amp;nbsp;editor.editKeys[i];
&lt;br&gt;+					if (parKey.notNil and: proxy.notNil) { 
&lt;br&gt;+						proxy.nudge(parKey, val - 64 * step) 
&lt;br&gt;+					};
&lt;br&gt;+				}
&lt;br&gt;+			)
&lt;br&gt;+		};
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	mapToPxMix { |mixer, scene = 1, splitIndex = 8, lastEdIsVol = true, lastIsMaster = true| 
&lt;br&gt;+ 	
&lt;br&gt;+		var server = mixer.proxyspace.server;
&lt;br&gt;+		var knobKeys = (1..16).collect { |i| (&amp;quot;kn&amp;quot; ++ (100 + i).asString.drop(1)).asSymbol }; 
&lt;br&gt;+		var lastKey; 
&lt;br&gt;+		
&lt;br&gt;+				// add master volume on knob 16
&lt;br&gt;+		if (lastIsMaster) { 
&lt;br&gt;+			lastKey = knobKeys.pop; 
&lt;br&gt;+			Spec.add(\mastaVol, [server.volume.min, server.volume.max, \db]);
&lt;br&gt;+			this.mapCCS(scene, lastKey, { |chan, cc, val| 
&lt;br&gt;+				var oldNormVal = \mastaVol.asSpec.unmap(server.volume.volume).postln;
&lt;br&gt;+				var nudgedVol = (oldNormVal + (64 - val * step)).clip(0, 1);
&lt;br&gt;+				server.volume.volume_(nudgedVol.ampdb) 
&lt;br&gt;+			});
&lt;br&gt;+		};			
&lt;br&gt;+
&lt;br&gt;+			// map first n knobs to volumes
&lt;br&gt;+		knobKeys.keep(splitIndex).do { |key, i| 
&lt;br&gt;+			
&lt;br&gt;+			this.mapCCS(scene, key, 
&lt;br&gt;+				{ |ch, cc, val| 
&lt;br&gt;+					var proxy = mixer.pxMons[i].proxy; 
&lt;br&gt;+					if (proxy.notNil) { 
&lt;br&gt;+						proxy.nudgeVol(64 - val * step); 
&lt;br&gt;+					};
&lt;br&gt;+				};
&lt;br&gt;+			)
&lt;br&gt;+		};
&lt;br&gt;+		
&lt;br&gt;+		this.mapToPxEdit(mixer.editor, scene, (splitIndex + 1 .. knobKeys.size));
&lt;br&gt;+	}
&lt;br&gt;+}
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-quarks-1372-JITMIDIKtl-tp4540452p4540452.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4540436</id>
	<title>SF.net SVN: supercollider:[9819] trunk/build/SCClassLibrary/JITLib/extras/ extSoftSet.sc</title>
	<published>2010-02-09T03:01:38Z</published>
	<updated>2010-02-09T03:01:38Z</updated>
	<author>
		<name>decampo</name>
	</author>
	<content type="html">Revision: 9819
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9819&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9819&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; decampo
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-09 11:01:38 +0000 (Tue, 09 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;added nudging for endless knob controllers.
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/build/SCClassLibrary/JITLib/extras/extSoftSet.sc
&lt;br&gt;&lt;br&gt;Modified: trunk/build/SCClassLibrary/JITLib/extras/extSoftSet.sc
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/build/SCClassLibrary/JITLib/extras/extSoftSet.sc	2010-02-08 18:44:01 UTC (rev 9818)
&lt;br&gt;+++ trunk/build/SCClassLibrary/JITLib/extras/extSoftSet.sc	2010-02-09 11:01:38 UTC (rev 9819)
&lt;br&gt;@@ -1,6 +1,21 @@
&lt;br&gt;&amp;nbsp;	// Maybe rewrite as SoftSet(what, key, val, within, mapped, oldVal);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;+ NodeProxy {
&lt;br&gt;+	
&lt;br&gt;+	nudgeSet { |param, incr = 0.02| 
&lt;br&gt;+		var spec = param.asSpec;
&lt;br&gt;+		var oldval = this.nodeMap.get(param).value ?? { this.getDefaultVal(param) ? 0 };
&lt;br&gt;+		var oldnorm = spec.unmap(oldval);
&lt;br&gt;+		var newnorm = (oldnorm + incr).clip(0, 1);
&lt;br&gt;+		this.set(param, spec.map(newnorm));
&lt;br&gt;+	}
&lt;br&gt;+	
&lt;br&gt;+	nudgeVol { |incr = 0.02| 
&lt;br&gt;+		var spec = \amp.asSpec; 
&lt;br&gt;+		var oldval = spec.unmap(this.vol); 
&lt;br&gt;+		var newVol = spec.map((oldval + incr).clip(0, 1));
&lt;br&gt;+		this.vol_(newVol)
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	softSet { |param, val, within = 0.025, mapped=false, lastVal|
&lt;br&gt;&amp;nbsp;		var spec, newNormVal, oldVal, oldNormVal, maxDiff;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9819-trunk-build-SCClassLibrary-JITLib-extras-extSoftSet-sc-tp4540436p4540436.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4533760</id>
	<title>nowExecutingPath in Routines bug</title>
	<published>2010-02-08T04:01:44Z</published>
	<updated>2010-02-08T04:01:44Z</updated>
	<author>
		<name>Scott Wilson</name>
	</author>
	<content type="html">Having a look at fixing this.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;So I add a couple of vars to Thread:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; color: rgb(0, 0, 191); &quot;&gt;Thread&lt;span style=&quot;color: #000000&quot;&gt; : &lt;/span&gt;Stream&lt;span style=&quot;color: #000000&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; &amp;lt;state=0, func, stack, method, block, frame, ip=0, sp=0;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; numpop=0, receiver, numArgsPushed=0;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; parent, terminalValue;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; &amp;lt;primitiveError=0, &amp;lt;primitiveIndex=0, randData=0;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; &amp;lt;beats=0.0, &amp;lt;seconds=0.0, &amp;lt;clock, &amp;lt;nextBeat, &amp;lt;&amp;gt;endBeat, &amp;lt;&amp;gt;endValue;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; environment;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; &amp;lt;&amp;gt;exceptionHandler;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #0000bf&quot;&gt;var&lt;/span&gt; myExecutingPath, oldExecutingPath;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;And understanding that I &quot;must not make any change at all to the order or number of&amp;nbsp;instance variables in these classes!&quot; I presume I need to adjust the PyrThread so that the number of vars matches:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span style=&quot;color: #aa0d91&quot;&gt;struct&lt;/span&gt; PyrThread : &lt;span style=&quot;color: #aa0d91&quot;&gt;public&lt;/span&gt; PyrObjectHdr&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;{&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; min-height: 14px; &quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; state, func, stack, &lt;span style=&quot;color: #3f6e74&quot;&gt;method&lt;/span&gt;, &lt;span style=&quot;color: #3f6e74&quot;&gt;block&lt;/span&gt;, frame, ip, sp;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; numpop, receiver, numArgsPushed;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; &lt;span style=&quot;color: #3f6e74&quot;&gt;parent&lt;/span&gt;, terminalValue;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; primitiveError;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; primitiveIndex;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; randData;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; beats, seconds, clock, nextBeat, endBeat, endValue;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; environment;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; exceptionHandler;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; myExecutingPath;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span style=&quot;color: #5c2699&quot;&gt;PyrSlot&lt;/span&gt; oldExecutingPath;&lt;/div&gt;&lt;div style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 10px/normal Monaco; &quot;&gt;};&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;But I still get&amp;nbsp;• ERROR: You may not change variable definitions of intrinsic classes.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I can't see where else the number of vars is specified, What am I doing wrong?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;S.&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/nowExecutingPath-in-Routines-bug-tp4533760p4533760.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4511705</id>
	<title>debug voodoo</title>
	<published>2010-02-03T20:45:09Z</published>
	<updated>2010-02-03T20:45:09Z</updated>
	<author>
		<name>James Harkins</name>
	</author>
	<content type="html">
All right. This has happened to me MANY times, and finally I have proof.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Something isn't working.&lt;/div&gt;&lt;div&gt;I add debug statements without changing any program logic.&lt;/div&gt;&lt;div&gt;It works.&lt;/div&gt;&lt;div&gt;I remove debug statements.&lt;/div&gt;&lt;div&gt;It still works.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I'm really starting to think I'm going crazy here.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I have a Pbind that calculates timingOffset from a couple keys in the event.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;\timingOffset, Pfunc({ |ev| (ev[\timingOffset].debug(&quot;timingOffset in calc&quot;) ? 0) + (ev[\latencyAdjust] ? 0) }),&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I confirmed at every stage that&amp;nbsp;ev[\timingOffset] going into this is 0.5, but the result was 0. (latencyAdjust is always 0.)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;input event:&lt;/b&gt; ( 'clock': a TempoClock, 'eventKey': singleSynthPlayer, &lt;b&gt;'timingOffset': 0.05,&lt;/b&gt; 'grain': true,&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; 'collIndex': lbrk, 'propagateDownward': a Function )&lt;/div&gt; &lt;div&gt;&lt;b&gt;result event:&lt;/b&gt; (instrument -&amp;gt; bufGrainPan), (clock -&amp;gt; a TempoClock), (eventKey -&amp;gt; singleSynthPlayer), (time -&amp;gt; 0.073536929057336), (amp -&amp;gt; 1),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (start -&amp;gt; 500835.6297), (rate -&amp;gt; 1), (decay -&amp;gt; 0.02), (pan -&amp;gt; 0), (attack -&amp;gt; 0.001),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (collIndex -&amp;gt; lbrk), (latencyAdjust -&amp;gt; 0), &lt;b&gt;(timingOffset -&amp;gt; 0)&lt;/b&gt;, (bufIndex -&amp;gt; 0), (grain -&amp;gt; true),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (delta -&amp;gt; 0.5), (chan -&amp;gt; a MixerChannel), (bufnum -&amp;gt; 2), (propagateDownward -&amp;gt; a Function)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Huh? The result event does 0.05 + 0 and comes up with 0?&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;So I changed the pattern to add a couple of debugs ONLY. Nothing else changed.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt;	&lt;/span&gt;\timingOffset, Pfunc({ |ev| ev.debug(&quot;event processed for timingOffset&quot;); (ev[\timingOffset].debug(&quot;timingOffset in calc&quot;) ? 0) + (ev[\latencyAdjust] ? 0) }),&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;And...&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;input event:&lt;/b&gt; ( 'clock': a TempoClock, 'eventKey': singleSynthPlayer, &lt;b&gt;'timingOffset': 0.05&lt;/b&gt;, 'grain': true,&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; 'collIndex': lbrk, 'propagateDownward': a Function )&lt;/div&gt; &lt;div&gt;&lt;b&gt;event processed for timingOffset:&lt;/b&gt; (instrument -&amp;gt; bufGrainPan), (clock -&amp;gt; a TempoClock), (eventKey -&amp;gt; singleSynthPlayer), (time -&amp;gt; 0.094536929057336), (amp -&amp;gt; 1),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (start -&amp;gt; 158603.5773), (rate -&amp;gt; 1), (collIndex -&amp;gt; lbrk), (latencyAdjust -&amp;gt; 0), (&lt;b&gt;timingOffset -&amp;gt; 0.05&lt;/b&gt;),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (bufIndex -&amp;gt; 0), (grain -&amp;gt; true), (chan -&amp;gt; a MixerChannel), (bufnum -&amp;gt; 2), (propagateDownward -&amp;gt; a Function)&lt;/div&gt; &lt;div&gt;&lt;b&gt;timingOffset in calc: 0.05&lt;/b&gt;&lt;/div&gt; &lt;div&gt;&lt;b&gt;result event:&lt;/b&gt; (instrument -&amp;gt; bufGrainPan), (clock -&amp;gt; a TempoClock), (eventKey -&amp;gt; singleSynthPlayer), (time -&amp;gt; 0.073536929057336), (amp -&amp;gt; 1),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (start -&amp;gt; 158603.5773), (rate -&amp;gt; 1), (decay -&amp;gt; 0.02), (pan -&amp;gt; 0), (attack -&amp;gt; 0.001),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (collIndex -&amp;gt; lbrk), (latencyAdjust -&amp;gt; 0), &lt;b&gt;(timingOffset -&amp;gt; 0.05)&lt;/b&gt;, (bufIndex -&amp;gt; 0), (grain -&amp;gt; true),&amp;nbsp;&lt;/div&gt; &lt;div&gt;&amp;nbsp; (delta -&amp;gt; 0.5), (chan -&amp;gt; a MixerChannel), (bufnum -&amp;gt; 2), (propagateDownward -&amp;gt; a Function)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;If this were the first time, I would write it off but I've seen this dozens of times -- some weird, unexplainable result that corrects itself as soon as I print something in the middle.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;I'm probably misinterpreting this but why did the same logic minus printing fail? It's upsetting my sense of order and logic in the computer world. :)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;hjh&lt;/div&gt;&lt;br&gt;&lt;div&gt; &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 11px; &quot;&gt;&lt;div&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;: H. James Harkins&lt;/div&gt;&lt;div&gt;: &lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4511705&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&lt;/div&gt;&lt;div&gt;: &lt;a href=&quot;http://www.dewdrop-world.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.dewdrop-world.net&lt;/a&gt;&lt;/div&gt;&lt;div&gt;.::!:.:.......:.::........:..!.::.::...:..:...:.:.:.:..:&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&quot;Come said the Muse,&lt;/div&gt;&lt;div&gt;Sing me a song no poet has yet chanted,&lt;/div&gt;&lt;div&gt;Sing me the universal.&quot;&amp;nbsp; -- Whitman&lt;/div&gt;&lt;/span&gt; &lt;/div&gt;&lt;br&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/debug-voodoo-tp4511705p4511705.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4536188</id>
	<title>SF.net SVN: supercollider:[9818] trunk/Headers/plugin_interface/SC_SndBuf.h</title>
	<published>2010-02-08T10:44:01Z</published>
	<updated>2010-02-08T10:44:01Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9818
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9818&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9818&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 18:44:01 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;compile fix
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4536188&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Headers/plugin_interface/SC_SndBuf.h
&lt;br&gt;&lt;br&gt;Modified: trunk/Headers/plugin_interface/SC_SndBuf.h
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Headers/plugin_interface/SC_SndBuf.h	2010-02-08 18:07:06 UTC (rev 9817)
&lt;br&gt;+++ trunk/Headers/plugin_interface/SC_SndBuf.h	2010-02-08 18:44:01 UTC (rev 9818)
&lt;br&gt;@@ -84,7 +84,7 @@
&lt;br&gt;&amp;nbsp;inline float lookupi(const float *table, uint32 phase, uint32 mask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	float frac = PhaseFrac(phase);
&lt;br&gt;-	float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;+	const float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;&amp;nbsp;	float a = tbl[0];
&lt;br&gt;&amp;nbsp;	float b = tbl[1];
&lt;br&gt;&amp;nbsp;	return a + frac * (b - a);
&lt;br&gt;@@ -93,7 +93,7 @@
&lt;br&gt;&amp;nbsp;inline float lookupi2(const float *table, uint32 phase, uint32 mask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	float frac = PhaseFrac1(phase);
&lt;br&gt;-	float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;+	const float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;&amp;nbsp;	float a = tbl[0];
&lt;br&gt;&amp;nbsp;	float b = tbl[1];
&lt;br&gt;&amp;nbsp;	return a + frac * b;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9818-trunk-Headers-plugin-interface-SC-SndBuf-h-tp4536188p4536188.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535788</id>
	<title>SF.net SVN: supercollider:[9811] trunk</title>
	<published>2010-02-08T09:44:09Z</published>
	<updated>2010-02-08T09:44:09Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9811
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9811&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9811&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:43:59 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;unit generators: const safety for read-only table acces
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535788&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Headers/plugin_interface/SC_SndBuf.h
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/DelayUGens.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/OscUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Headers/plugin_interface/SC_SndBuf.h
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Headers/plugin_interface/SC_SndBuf.h	2010-02-08 17:41:51 UTC (rev 9810)
&lt;br&gt;+++ trunk/Headers/plugin_interface/SC_SndBuf.h	2010-02-08 17:43:59 UTC (rev 9811)
&lt;br&gt;@@ -59,20 +59,20 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;inline float PhaseFrac(uint32 inPhase)
&lt;br&gt;-		{
&lt;br&gt;-			union { uint32 itemp; float ftemp; } u;
&lt;br&gt;-			u.itemp = 0x3F800000 | (0x007FFF80 &amp; ((inPhase)&amp;lt;&amp;lt;7));
&lt;br&gt;-			return u.ftemp - 1.f;
&lt;br&gt;-		}
&lt;br&gt;+{
&lt;br&gt;+	union { uint32 itemp; float ftemp; } u;
&lt;br&gt;+	u.itemp = 0x3F800000 | (0x007FFF80 &amp; ((inPhase)&amp;lt;&amp;lt;7));
&lt;br&gt;+	return u.ftemp - 1.f;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;inline float PhaseFrac1(uint32 inPhase)
&lt;br&gt;-		{
&lt;br&gt;-			union { uint32 itemp; float ftemp; } u;
&lt;br&gt;-			u.itemp = 0x3F800000 | (0x007FFF80 &amp; ((inPhase)&amp;lt;&amp;lt;7));
&lt;br&gt;-			return u.ftemp;
&lt;br&gt;-		}
&lt;br&gt;+{
&lt;br&gt;+	union { uint32 itemp; float ftemp; } u;
&lt;br&gt;+	u.itemp = 0x3F800000 | (0x007FFF80 &amp; ((inPhase)&amp;lt;&amp;lt;7));
&lt;br&gt;+	return u.ftemp;
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-inline float lookup(float *table, int32 phase, int32 mask)
&lt;br&gt;+inline float lookup(const float *table, int32 phase, int32 mask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	return table[(phase &amp;gt;&amp;gt; 16) &amp; mask];
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -81,7 +81,7 @@
&lt;br&gt;&amp;nbsp;#define xlobits 14
&lt;br&gt;&amp;nbsp;#define xlobits1 13
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-inline float lookupi(float *table, uint32 phase, uint32 mask)
&lt;br&gt;+inline float lookupi(const float *table, uint32 phase, uint32 mask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	float frac = PhaseFrac(phase);
&lt;br&gt;&amp;nbsp;	float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;@@ -90,7 +90,7 @@
&lt;br&gt;&amp;nbsp;	return a + frac * (b - a);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-inline float lookupi2(float *table, uint32 phase, uint32 mask)
&lt;br&gt;+inline float lookupi2(const float *table, uint32 phase, uint32 mask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	float frac = PhaseFrac1(phase);
&lt;br&gt;&amp;nbsp;	float *tbl = table + ((phase &amp;gt;&amp;gt; 16) &amp; mask);
&lt;br&gt;@@ -99,12 +99,12 @@
&lt;br&gt;&amp;nbsp;	return a + frac * b;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-inline float lookupi1(float* table0, float* table1, uint32 pphase, int32 lomask)
&lt;br&gt;+inline float lookupi1(const float* table0, const float* table1, uint32 pphase, int32 lomask)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	float pfrac = PhaseFrac1(pphase);
&lt;br&gt;&amp;nbsp;	uint32 index = ((pphase &amp;gt;&amp;gt; xlobits1) &amp; lomask);
&lt;br&gt;-	float val1 = *(float*)((char*)table0 + index);
&lt;br&gt;-	float val2 = *(float*)((char*)table1 + index);
&lt;br&gt;+	float val1 = *(const float*)((const char*)table0 + index);
&lt;br&gt;+	float val2 = *(const float*)((const char*)table1 + index);
&lt;br&gt;&amp;nbsp;	return val1 + val2 * pfrac;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/DelayUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/DelayUGens.cpp	2010-02-08 17:41:51 UTC (rev 9810)
&lt;br&gt;+++ trunk/Source/plugins/DelayUGens.cpp	2010-02-08 17:43:59 UTC (rev 9811)
&lt;br&gt;@@ -831,10 +831,10 @@
&lt;br&gt;&amp;nbsp;#define LOOP_BODY_4 \
&lt;br&gt;&amp;nbsp;		phase = sc_loop((Unit*)unit, phase, loopMax, loop); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;-		float* table0 = table1 - bufChannels; \
&lt;br&gt;-		float* table2 = table1 + bufChannels; \
&lt;br&gt;-		float* table3 = table2 + bufChannels; \
&lt;br&gt;+		const float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;+		const float* table0 = table1 - bufChannels; \
&lt;br&gt;+		const float* table2 = table1 + bufChannels; \
&lt;br&gt;+		const float* table3 = table2 + bufChannels; \
&lt;br&gt;&amp;nbsp;		if (iphase == 0) { \
&lt;br&gt;&amp;nbsp;			if (loop) { \
&lt;br&gt;&amp;nbsp;				table0 += bufSamples; \
&lt;br&gt;@@ -943,8 +943,8 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_fbufnum = fbufnum;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_buf = world-&amp;gt;mSndBufs + bufnum;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	SndBuf *buf = unit-&amp;gt;m_buf;
&lt;br&gt;-	float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;
&lt;br&gt;+	const SndBuf *buf = unit-&amp;gt;m_buf;
&lt;br&gt;+	const float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;
&lt;br&gt;&amp;nbsp;	uint32 bufChannels __attribute__((__unused__)) = buf-&amp;gt;channels;
&lt;br&gt;&amp;nbsp;	uint32 bufSamples __attribute__((__unused__)) = buf-&amp;gt;samples;
&lt;br&gt;&amp;nbsp;	uint32 bufFrames = buf-&amp;gt;frames;
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/OscUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/OscUGens.cpp	2010-02-08 17:41:51 UTC (rev 9810)
&lt;br&gt;+++ trunk/Source/plugins/OscUGens.cpp	2010-02-08 17:43:59 UTC (rev 9811)
&lt;br&gt;@@ -397,7 +397,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int32 key, oct;
&lt;br&gt;@@ -429,7 +429,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -465,7 +465,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -657,7 +657,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int32 index = (int32)ZIN0(1);
&lt;br&gt;@@ -669,7 +669,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -688,7 +688,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -722,7 +722,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int32 index = (int32)ZIN0(1);
&lt;br&gt;@@ -734,7 +734,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int32 index = (int32)ZIN0(1);
&lt;br&gt;@@ -752,7 +752,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -785,7 +785,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	int32 index = (int32)floor(ZIN0(1));
&lt;br&gt;@@ -797,7 +797,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -815,7 +815,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -830,7 +830,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;////////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static float IndexInBetween_FindIndex(float* table, float in, int32 maxindex)
&lt;br&gt;+static float IndexInBetween_FindIndex(const float* table, float in, int32 maxindex)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	for(int32 i = 0; i &amp;lt;= maxindex; i++) {
&lt;br&gt;&amp;nbsp;		if(table[i] &amp;gt; in) {
&lt;br&gt;@@ -861,7 +861,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float in = ZIN0(1);
&lt;br&gt;@@ -872,7 +872,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -889,7 +889,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -903,7 +903,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;////////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-static int32 DetectIndex_FindIndex(float* table, float in, int32 maxindex)
&lt;br&gt;+static int32 DetectIndex_FindIndex(const float* table, float in, int32 maxindex)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	int32 index;
&lt;br&gt;&amp;nbsp;	for(index = 0; index &amp;lt;= maxindex; index+=1) {
&lt;br&gt;@@ -932,7 +932,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float in = ZIN0(1);
&lt;br&gt;@@ -951,7 +951,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -976,7 +976,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *out = ZOUT(0);
&lt;br&gt;@@ -1019,8 +1019,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		float fmaxindex = (float)(tableSize&amp;gt;&amp;gt;1) - 0.001;
&lt;br&gt;&amp;nbsp;		float offset = tableSize * 0.25;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1042,8 +1042,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		float fmaxindex = (float)(tableSize&amp;gt;&amp;gt;1) - 0.001;
&lt;br&gt;&amp;nbsp;		float offset = tableSize * 0.25;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1073,8 +1073,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		float fmaxindex = (float)(tableSize&amp;gt;&amp;gt;1) - 0.001;
&lt;br&gt;&amp;nbsp;		float offset = tableSize * 0.25;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1119,8 +1119,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;		float maxphase = (float)maxindex;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;@@ -1148,8 +1148,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;		float maxphase = (float)maxindex;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;@@ -1183,8 +1183,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		int32 maxindex = tableSize - 1;
&lt;br&gt;&amp;nbsp;		float maxphase = (float)maxindex;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;@@ -1728,9 +1728,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			int tableSize2 = tableSize &amp;gt;&amp;gt; 1;
&lt;br&gt;@@ -1763,8 +1762,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			int tableSize2 = tableSize &amp;gt;&amp;gt; 1;
&lt;br&gt;@@ -1797,8 +1796,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			int tableSize2 = tableSize &amp;gt;&amp;gt; 1;
&lt;br&gt;@@ -1833,8 +1832,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			int tableSize2 = tableSize &amp;gt;&amp;gt; 1;
&lt;br&gt;@@ -1924,7 +1923,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;m_lomask = (tableSize - 1) &amp;lt;&amp;lt; 2;
&lt;br&gt;@@ -1956,7 +1955,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;m_lomask = (tableSize - 1) &amp;lt;&amp;lt; 2;
&lt;br&gt;@@ -1985,7 +1984,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;m_lomask = (tableSize - 1) &amp;lt;&amp;lt; 2;
&lt;br&gt;@@ -2016,7 +2015,7 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table = bufData;
&lt;br&gt;+		const float *table = bufData;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;m_lomask = (tableSize - 1) &amp;lt;&amp;lt; 2;
&lt;br&gt;@@ -2063,8 +2062,8 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// get table
&lt;br&gt;&amp;nbsp;	GET_TABLE
&lt;br&gt;-		float *table0 = bufData;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;+		const float *table0 = bufData;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;		if (tableSize != unit-&amp;gt;mTableSize) {
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mTableSize = tableSize;
&lt;br&gt;&amp;nbsp;			int tableSize2 = tableSize &amp;gt;&amp;gt; 1;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9811-trunk-tp4535788p4535788.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535965</id>
	<title>SF.net SVN: supercollider:[9817] trunk/Source/plugins/PV_UGens.cpp</title>
	<published>2010-02-08T10:07:07Z</published>
	<updated>2010-02-08T10:07:07Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9817
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9817&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9817&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 18:07:06 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;plugins: pv ugen cleanup
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535965&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/PV_UGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/PV_UGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/PV_UGens.cpp	2010-02-08 18:04:39 UTC (rev 9816)
&lt;br&gt;+++ trunk/Source/plugins/PV_UGens.cpp	2010-02-08 18:07:06 UTC (rev 9817)
&lt;br&gt;@@ -674,7 +674,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void PV_Copy_next(PV_Unit *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float fbufnum1 = ZIN0(0);
&lt;br&gt;&amp;nbsp;	float fbufnum2 = ZIN0(1);
&lt;br&gt;&amp;nbsp;	if (fbufnum1 &amp;lt; 0.f || fbufnum2 &amp;lt; 0.f) { ZOUT0(0) = -1.f; return; }
&lt;br&gt;@@ -774,8 +773,6 @@
&lt;br&gt;&amp;nbsp;	SCComplexBuf *p = ToComplexApx(buf1);
&lt;br&gt;&amp;nbsp;	SCComplexBuf *q = ToComplexApx(buf2);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float hypot, preal;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	p-&amp;gt;dc &amp;nbsp;/= q-&amp;gt;dc;
&lt;br&gt;&amp;nbsp;	p-&amp;gt;nyq /= q-&amp;gt;nyq;
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;numbins; ++i) {
&lt;br&gt;@@ -783,8 +780,8 @@
&lt;br&gt;&amp;nbsp;		// Note that hypot has danger of overflow (see URL above),
&lt;br&gt;&amp;nbsp;		// however FFT values typically stay within a small range,
&lt;br&gt;&amp;nbsp;		// so I'm considering this OK for now.
&lt;br&gt;-		hypot = q-&amp;gt;bin[i].real * q-&amp;gt;bin[i].real + q-&amp;gt;bin[i].imag * q-&amp;gt;bin[i].imag;
&lt;br&gt;-		preal = p-&amp;gt;bin[i].real;
&lt;br&gt;+		float hypot = q-&amp;gt;bin[i].real * q-&amp;gt;bin[i].real + q-&amp;gt;bin[i].imag * q-&amp;gt;bin[i].imag;
&lt;br&gt;+		float preal = p-&amp;gt;bin[i].real;
&lt;br&gt;&amp;nbsp;		p-&amp;gt;bin[i].real = (preal &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* q-&amp;gt;bin[i].real + p-&amp;gt;bin[i].imag * q-&amp;gt;bin[i].imag) / hypot;
&lt;br&gt;&amp;nbsp;		p-&amp;gt;bin[i].imag = (p-&amp;gt;bin[i].imag * q-&amp;gt;bin[i].real - preal &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* q-&amp;gt;bin[i].imag) / hypot;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9817-trunk-Source-plugins-PV-UGens-cpp-tp4535965p4535965.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535944</id>
	<title>SF.net SVN: supercollider:[9816] trunk/Source/plugins/Convolution.cpp</title>
	<published>2010-02-08T10:04:40Z</published>
	<updated>2010-02-08T10:04:40Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9816
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9816&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9816&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 18:04:39 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;convolution ugens: declare local symbol as static &amp; small indentation fix
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535944&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/Convolution.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/Convolution.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/Convolution.cpp	2010-02-08 18:03:28 UTC (rev 9815)
&lt;br&gt;+++ trunk/Source/plugins/Convolution.cpp	2010-02-08 18:04:39 UTC (rev 9816)
&lt;br&gt;@@ -87,7 +87,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	scfft *m_scfft1, *m_scfft2[2], *m_scfft3[2], *m_scfftR[2], *m_scfftR2[2];
&lt;br&gt;&amp;nbsp;	float *m_trbuf;	//shared temporary buffer for fft code
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct Convolution3 : Unit
&lt;br&gt;@@ -190,7 +189,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Convolution_next(Convolution *unit, int numSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *in1 = IN(0);
&lt;br&gt;&amp;nbsp;	float *in2 = IN(1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -208,7 +206,6 @@
&lt;br&gt;&amp;nbsp;	int insize= unit-&amp;gt;m_insize;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (unit-&amp;gt;m_pos &amp; insize) {
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//have collected enough samples to transform next frame
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_pos = 0; //reset collection counter
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -276,7 +273,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;//include local buffer test in one place
&lt;br&gt;-SndBuf * ConvGetBuffer(Unit * unit, uint32 bufnum)
&lt;br&gt;+static SndBuf * ConvGetBuffer(Unit * unit, uint32 bufnum)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	SndBuf *buf;
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;@@ -401,7 +398,6 @@
&lt;br&gt;&amp;nbsp;			unit-&amp;gt;mDone = true;
&lt;br&gt;&amp;nbsp;			//SETCALC(Convolution2_next2);
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -422,7 +418,6 @@
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_scfft1);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_scfft2);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_scfftR);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -744,13 +739,11 @@
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_tempbuf);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_outbuf);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_overlapbuf);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Convolution2L_next(Convolution2L *unit, int numSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *in1 = IN(0);
&lt;br&gt;&amp;nbsp;	//float *in2 = IN(1);
&lt;br&gt;&amp;nbsp;	float curtrig = ZIN0(2);
&lt;br&gt;@@ -1021,47 +1014,44 @@
&lt;br&gt;&amp;nbsp;		//in place transform for now
&lt;br&gt;&amp;nbsp;		//rffts(unit-&amp;gt;m_fftbuf2[0], log2n, 1, cosTable[log2n]);
&lt;br&gt;&amp;nbsp;		scfft_dofft(unit-&amp;gt;m_scfft2[0]);
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		buf = ConvGetBuffer(unit,bufnumR);
&lt;br&gt;+	buf = ConvGetBuffer(unit,bufnumR);
&lt;br&gt;+	if (buf) {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (buf) {
&lt;br&gt;+		//if (bufnumR &amp;gt;= world-&amp;gt;mNumSndBufs) bufnumR = 0;
&lt;br&gt;+		//buf = world-&amp;gt;mSndBufs + bufnumR;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			//if (bufnumR &amp;gt;= world-&amp;gt;mNumSndBufs) bufnumR = 0;
&lt;br&gt;-			//buf = world-&amp;gt;mSndBufs + bufnumR;
&lt;br&gt;+		//calculate fft for kernel straight away
&lt;br&gt;+		memcpy(unit-&amp;gt;m_fftbuf2[1], buf-&amp;gt;data, insize);
&lt;br&gt;+		//zero pad second part of buffer to allow for convolution
&lt;br&gt;+		memset(unit-&amp;gt;m_fftbuf2[1]+unit-&amp;gt;m_insize, 0, insize);
&lt;br&gt;+		//in place transform for now
&lt;br&gt;+		//rffts(unit-&amp;gt;m_fftbuf2[1], log2n, 1, cosTable[log2n]);
&lt;br&gt;+		scfft_dofft(unit-&amp;gt;m_scfft2[1]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			//calculate fft for kernel straight away
&lt;br&gt;-			memcpy(unit-&amp;gt;m_fftbuf2[1], buf-&amp;gt;data, insize);
&lt;br&gt;-			//zero pad second part of buffer to allow for convolution
&lt;br&gt;-			memset(unit-&amp;gt;m_fftbuf2[1]+unit-&amp;gt;m_insize, 0, insize);
&lt;br&gt;-			//in place transform for now
&lt;br&gt;-			//rffts(unit-&amp;gt;m_fftbuf2[1], log2n, 1, cosTable[log2n]);
&lt;br&gt;-			scfft_dofft(unit-&amp;gt;m_scfft2[1]);
&lt;br&gt;+		//test for full input buffer
&lt;br&gt;+		//unit-&amp;gt;m_mask = unit-&amp;gt;m_insize;
&lt;br&gt;+		unit-&amp;gt;m_pos = 0;
&lt;br&gt;+		//
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_outbuf[0] = (float*)RTAlloc(unit-&amp;gt;mWorld, fftsize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_overlapbuf[0] = (float*)RTAlloc(unit-&amp;gt;mWorld, insize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_outbuf[1] = (float*)RTAlloc(unit-&amp;gt;mWorld, fftsize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_overlapbuf[1] = (float*)RTAlloc(unit-&amp;gt;mWorld, insize);
&lt;br&gt;+		//
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_outbuf[0], 0, fftsize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_overlapbuf[0], 0, insize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_outbuf[1], 0, fftsize);
&lt;br&gt;+		// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_overlapbuf[1], 0, insize);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			//test for full input buffer
&lt;br&gt;-			//unit-&amp;gt;m_mask = unit-&amp;gt;m_insize;
&lt;br&gt;-			unit-&amp;gt;m_pos = 0;
&lt;br&gt;-			//
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_outbuf[0] = (float*)RTAlloc(unit-&amp;gt;mWorld, fftsize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_overlapbuf[0] = (float*)RTAlloc(unit-&amp;gt;mWorld, insize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_outbuf[1] = (float*)RTAlloc(unit-&amp;gt;mWorld, fftsize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unit-&amp;gt;m_overlapbuf[1] = (float*)RTAlloc(unit-&amp;gt;mWorld, insize);
&lt;br&gt;-			//
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_outbuf[0], 0, fftsize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_overlapbuf[0], 0, insize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_outbuf[1], 0, fftsize);
&lt;br&gt;-			// &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;memset(unit-&amp;gt;m_overlapbuf[1], 0, insize);
&lt;br&gt;+		unit-&amp;gt;m_prevtrig = 0.f;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			unit-&amp;gt;m_prevtrig = 0.f;
&lt;br&gt;-
&lt;br&gt;-			SETCALC(StereoConvolution2L_next);
&lt;br&gt;-
&lt;br&gt;-		}
&lt;br&gt;+		SETCALC(StereoConvolution2L_next);
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void StereoConvolution2L_Dtor(StereoConvolution2L *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	scfft_destroy(unit-&amp;gt;m_scfft1);
&lt;br&gt;&amp;nbsp;	scfft_destroy(unit-&amp;gt;m_scfft2[0]);
&lt;br&gt;&amp;nbsp;	scfft_destroy(unit-&amp;gt;m_scfft3[0]);
&lt;br&gt;@@ -1105,7 +1095,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void StereoConvolution2L_next(StereoConvolution2L *unit, int wrongNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *in1 = IN(0);
&lt;br&gt;&amp;nbsp;	//float *in2 = IN(1);
&lt;br&gt;&amp;nbsp;	float curtrig = ZIN0(3);
&lt;br&gt;@@ -1366,7 +1355,6 @@
&lt;br&gt;&amp;nbsp;			SETCALC(Convolution3_next_a);
&lt;br&gt;&amp;nbsp;		else
&lt;br&gt;&amp;nbsp;			SETCALC(Convolution3_next_k);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1379,7 +1367,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Convolution3_next_a(Convolution3 *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *in = IN(0);
&lt;br&gt;&amp;nbsp;	float curtrig = ZIN0(2);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1443,7 +1430,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Convolution3_next_k(Convolution3 *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float input = ZIN0(0);
&lt;br&gt;&amp;nbsp;	//	float *in2 = IN(1);
&lt;br&gt;&amp;nbsp;	float curtrig = ZIN0(2);
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9816-trunk-Source-plugins-Convolution-cpp-tp4535944p4535944.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535936</id>
	<title>SF.net SVN: supercollider:[9815] trunk/Source/plugins</title>
	<published>2010-02-08T10:03:33Z</published>
	<updated>2010-02-08T10:03:33Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9815
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9815&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9815&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 18:03:28 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;beattrack2: fix possible crash if buffer not allocated
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535936&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/BeatTrack.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/BeatTrack2.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/BeatTrack2.h
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/BeatTrack.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/BeatTrack.cpp	2010-02-08 18:01:53 UTC (rev 9814)
&lt;br&gt;+++ trunk/Source/plugins/BeatTrack.cpp	2010-02-08 18:03:28 UTC (rev 9815)
&lt;br&gt;@@ -137,18 +137,15 @@
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_flagstep=0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;mCalcFunc = (UnitCalcFunc)&amp;BeatTrack_next;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void BeatTrack_Dtor(BeatTrack *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_prevmag);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_prevphase);
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;m_predict);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/BeatTrack2.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/BeatTrack2.cpp	2010-02-08 18:01:53 UTC (rev 9814)
&lt;br&gt;+++ trunk/Source/plugins/BeatTrack2.cpp	2010-02-08 18:03:28 UTC (rev 9815)
&lt;br&gt;@@ -151,13 +151,15 @@
&lt;br&gt;&amp;nbsp;	//printf(&amp;quot;srate %f conversion factor %f frame period %f \n&amp;quot;, unit-&amp;gt;m_srate, unit-&amp;gt;m_srateconversion, unit-&amp;gt;m_frameperiod);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	int bufnum = (int)(ZIN0(5)+0.001);
&lt;br&gt;-	if (bufnum &amp;gt;= unit-&amp;gt;mWorld-&amp;gt;mNumSndBufs) bufnum = 0;
&lt;br&gt;+	int bufnum = (int)(ZIN0(5)+0.001f);
&lt;br&gt;+	if (bufnum &amp;gt;= unit-&amp;gt;mWorld-&amp;gt;mNumSndBufs)
&lt;br&gt;+		bufnum = 0;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if(bufnum&amp;lt;0) {unit-&amp;gt;m_weightingscheme = bufnum&amp;lt;2? 0 : 1; }
&lt;br&gt;+	if (bufnum&amp;lt;0)
&lt;br&gt;+		unit-&amp;gt;m_weightingscheme = bufnum&amp;lt;2 ? 0 : 1;
&lt;br&gt;&amp;nbsp;	else {
&lt;br&gt;&amp;nbsp;		SndBuf *buf = unit-&amp;gt;mWorld-&amp;gt;mSndBufs + bufnum;
&lt;br&gt;-		unit-&amp;gt;m_tempoweights= buf-&amp;gt;data;
&lt;br&gt;+		unit-&amp;gt;m_tempoweights= buf;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_weightingscheme=2;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -170,7 +172,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;mCalcFunc = (UnitCalcFunc)&amp;BeatTrack2_next;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -217,20 +218,23 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float weight; &amp;nbsp;//compensation for number of events matched; may alter equation later
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	switch (unit-&amp;gt;m_weightingscheme) {
&lt;br&gt;-		case 0:
&lt;br&gt;-			weight = 1.0;	//flat
&lt;br&gt;-			break;
&lt;br&gt;-		case 1:
&lt;br&gt;-			weight= 1.0f/(beatsfit*4); //compensate for number of time points tested
&lt;br&gt;-			break;
&lt;br&gt;-		case 2:
&lt;br&gt;-			weight = unit-&amp;gt;m_tempoweights[which]; //user defined temmpo biases (usually a mask on allowed tempi)
&lt;br&gt;-			//printf(&amp;quot;sanity check %f, %d \n&amp;quot;, unit-&amp;gt;m_tempoweights[which], which);
&lt;br&gt;-			break;
&lt;br&gt;+	switch (unit-&amp;gt;m_weightingscheme)
&lt;br&gt;+	{
&lt;br&gt;+	case 0:
&lt;br&gt;+		weight = 1.0f;	//flat
&lt;br&gt;+		break;
&lt;br&gt;+	case 1:
&lt;br&gt;+		weight= 1.0f/(beatsfit*4); //compensate for number of time points tested
&lt;br&gt;+		break;
&lt;br&gt;+	case 2:
&lt;br&gt;+		SndBuf * buf = unit-&amp;gt;m_tempoweights;
&lt;br&gt;+		if (buf-&amp;gt;data)
&lt;br&gt;+			weight = buf-&amp;gt;data[which]; //user defined temmpo biases (usually a mask on allowed tempi)
&lt;br&gt;+		else
&lt;br&gt;+			weight = 1.f;
&lt;br&gt;+		break;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	int numfeatures= unit-&amp;gt;m_numfeatures;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float * scores = unit-&amp;gt;m_scores; &amp;nbsp;//[2*numfeatures];
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/BeatTrack2.h
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/BeatTrack2.h	2010-02-08 18:01:53 UTC (rev 9814)
&lt;br&gt;+++ trunk/Source/plugins/BeatTrack2.h	2010-02-08 18:03:28 UTC (rev 9815)
&lt;br&gt;@@ -26,6 +26,7 @@
&lt;br&gt;&amp;nbsp;//assume 4 features * 120 tempi * 2 groove * 20 phase = 19200 per calculation time; say you calculate each 0.5 sec, amortise over (44100/64*0.5 &amp;gt;344.5) control blocks;
&lt;br&gt;&amp;nbsp;//calculate over 240 blocks
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#include &amp;quot;SC_PlugIn.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;struct BeatTrack2 : Unit {
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -93,10 +94,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int q1trig;
&lt;br&gt;&amp;nbsp;	int q2trig;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float * m_tempoweights;
&lt;br&gt;+	SndBuf * m_tempoweights;
&lt;br&gt;&amp;nbsp;	int m_weightingscheme;
&lt;br&gt;-
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -108,4 +107,3 @@
&lt;br&gt;&amp;nbsp;	void BeatTrack2_Ctor(BeatTrack2 *unit);
&lt;br&gt;&amp;nbsp;	void BeatTrack2_Dtor(BeatTrack2 *unit);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9815-trunk-Source-plugins-tp4535936p4535936.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535928</id>
	<title>SF.net SVN: supercollider:[9814] trunk/Source/plugins/BeatTrack2.cpp</title>
	<published>2010-02-08T10:01:59Z</published>
	<updated>2010-02-08T10:01:59Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9814
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9814&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9814&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 18:01:53 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;beat track2: fix prototype of calculatetempalte
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535928&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/BeatTrack2.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/BeatTrack2.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/BeatTrack2.cpp	2010-02-08 17:48:42 UTC (rev 9813)
&lt;br&gt;+++ trunk/Source/plugins/BeatTrack2.cpp	2010-02-08 18:01:53 UTC (rev 9814)
&lt;br&gt;@@ -39,7 +39,7 @@
&lt;br&gt;&amp;nbsp;static float g_weight2[9]= {0.05, 0.1, 0.3,0.7,1.0,0.7,0.3, 0.1, 0.05};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;//void BeatTrack2_dofft(BeatTrack2 *unit, uint32);
&lt;br&gt;-static void calculatetemplate(BeatTrack2 *unit, int which);
&lt;br&gt;+static void calculatetemplate(BeatTrack2 *unit, int which, int j);
&lt;br&gt;&amp;nbsp;static void finaldecision(BeatTrack2 *unit);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void BeatTrack2_Ctor(BeatTrack2* unit)
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9814-trunk-Source-plugins-BeatTrack2-cpp-tp4535928p4535928.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535823</id>
	<title>SF.net SVN: supercollider:[9813] trunk/Source/plugins/DemandUGens.cpp</title>
	<published>2010-02-08T09:48:56Z</published>
	<updated>2010-02-08T09:48:56Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9813
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9813&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9813&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:48:42 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;demand ugens: cleanups and const safety
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535823&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/DemandUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/DemandUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/DemandUGens.cpp	2010-02-08 17:46:14 UTC (rev 9812)
&lt;br&gt;+++ trunk/Source/plugins/DemandUGens.cpp	2010-02-08 17:48:42 UTC (rev 9813)
&lt;br&gt;@@ -2112,7 +2112,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			phase = sc_loop((Unit*)unit, phase, loopMax, loop);
&lt;br&gt;&amp;nbsp;			int32 iphase = (int32)phase;
&lt;br&gt;-			float* table1 = bufData + iphase * bufChannels;
&lt;br&gt;+			const float* table1 = bufData + iphase * bufChannels;
&lt;br&gt;&amp;nbsp;			OUT0(0) = table1[0];
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		else
&lt;br&gt;@@ -2123,20 +2123,18 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Dbufrd_Ctor(Dbufrd *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+	SETCALC(Dbufrd_next);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;SETCALC(Dbufrd_next);
&lt;br&gt;+	unit-&amp;gt;m_fbufnum = -1e9f;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;unit-&amp;gt;m_fbufnum = -1e9f;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;Dbufrd_next(unit, 0);
&lt;br&gt;- &amp;nbsp;OUT0(0) = 0.f;
&lt;br&gt;+	Dbufrd_next(unit, 0);
&lt;br&gt;+	OUT0(0) = 0.f;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;////////////////////////////////////
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Dbufwr_next(Dbufwr *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	int32 loop &amp;nbsp; &amp;nbsp; = (int32)DEMANDINPUT_A(3, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	D_GET_BUF
&lt;br&gt;@@ -2147,41 +2145,40 @@
&lt;br&gt;&amp;nbsp;	double phase;
&lt;br&gt;&amp;nbsp;	float val;
&lt;br&gt;&amp;nbsp;	if (inNumSamples)
&lt;br&gt;-		{
&lt;br&gt;-			float x = DEMANDINPUT_A(1, inNumSamples);
&lt;br&gt;-			if (sc_isnan(x)) {
&lt;br&gt;-					OUT0(0) = NAN;
&lt;br&gt;-					return;
&lt;br&gt;-			}
&lt;br&gt;-			phase = x;
&lt;br&gt;-			val = DEMANDINPUT_A(2, inNumSamples);
&lt;br&gt;-			if (sc_isnan(val)) {
&lt;br&gt;-					OUT0(0) = NAN;
&lt;br&gt;-					return;
&lt;br&gt;-			}
&lt;br&gt;-
&lt;br&gt;-			phase = sc_loop((Unit*)unit, phase, loopMax, loop);
&lt;br&gt;-			int32 iphase = (int32)phase;
&lt;br&gt;-			float* table0 = bufData + iphase * bufChannels;
&lt;br&gt;-			table0[0] = val;
&lt;br&gt;-			OUT0(0) = val;
&lt;br&gt;+	{
&lt;br&gt;+		float x = DEMANDINPUT_A(1, inNumSamples);
&lt;br&gt;+		if (sc_isnan(x)) {
&lt;br&gt;+			OUT0(0) = NAN;
&lt;br&gt;+			return;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-		else
&lt;br&gt;-		{
&lt;br&gt;-			RESETINPUT(1);
&lt;br&gt;-			RESETINPUT(2);
&lt;br&gt;+		phase = x;
&lt;br&gt;+		val = DEMANDINPUT_A(2, inNumSamples);
&lt;br&gt;+		if (sc_isnan(val)) {
&lt;br&gt;+			OUT0(0) = NAN;
&lt;br&gt;+			return;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;+
&lt;br&gt;+		phase = sc_loop((Unit*)unit, phase, loopMax, loop);
&lt;br&gt;+		int32 iphase = (int32)phase;
&lt;br&gt;+		float* table0 = bufData + iphase * bufChannels;
&lt;br&gt;+		table0[0] = val;
&lt;br&gt;+		OUT0(0) = val;
&lt;br&gt;+	}
&lt;br&gt;+	else
&lt;br&gt;+	{
&lt;br&gt;+		RESETINPUT(1);
&lt;br&gt;+		RESETINPUT(2);
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void Dbufwr_Ctor(Dbufwr *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;+	SETCALC(Dbufwr_next);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;SETCALC(Dbufwr_next);
&lt;br&gt;+	unit-&amp;gt;m_fbufnum = -1e9f;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;unit-&amp;gt;m_fbufnum = -1e9f;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;Dbufwr_next(unit, 0);
&lt;br&gt;- &amp;nbsp;OUT0(0) = 0.f;
&lt;br&gt;+	Dbufwr_next(unit, 0);
&lt;br&gt;+	OUT0(0) = 0.f;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9813-trunk-Source-plugins-DemandUGens-cpp-tp4535823p4535823.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535805</id>
	<title>SF.net SVN: supercollider:[9812] trunk/Source/plugins</title>
	<published>2010-02-08T09:46:33Z</published>
	<updated>2010-02-08T09:46:33Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9812
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9812&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9812&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:46:14 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;delay/grain ugens: const safety for read-only access
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535805&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/DelayUGens.cpp
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/DelayUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/DelayUGens.cpp	2010-02-08 17:43:59 UTC (rev 9811)
&lt;br&gt;+++ trunk/Source/plugins/DelayUGens.cpp	2010-02-08 17:46:14 UTC (rev 9812)
&lt;br&gt;@@ -872,8 +872,8 @@
&lt;br&gt;&amp;nbsp;#define LOOP_BODY_2 \
&lt;br&gt;&amp;nbsp;		phase = sc_loop((Unit*)unit, phase, loopMax, loop); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;-		float* table2 = table1 + bufChannels; \
&lt;br&gt;+		const float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;+		const float* table2 = table1 + bufChannels; \
&lt;br&gt;&amp;nbsp;		if (iphase &amp;gt; guardFrame) { \
&lt;br&gt;&amp;nbsp;			if (loop) { \
&lt;br&gt;&amp;nbsp;				table2 -= bufSamples; \
&lt;br&gt;@@ -893,7 +893,7 @@
&lt;br&gt;&amp;nbsp;#define LOOP_BODY_1 \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;phase = sc_loop((Unit*)unit, phase, loopMax, loop); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;+		const float* table1 = bufData + iphase * bufChannels; \
&lt;br&gt;&amp;nbsp;		int32 index = 0; \
&lt;br&gt;&amp;nbsp;		for (uint32 i=0; i&amp;lt;numOutputs; ++i) { \
&lt;br&gt;&amp;nbsp;			*++(out[i]) = table1[index++]; \
&lt;br&gt;@@ -990,8 +990,8 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_fbufnum = fbufnum;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;m_buf = world-&amp;gt;mSndBufs + bufnum;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	SndBuf *buf = unit-&amp;gt;m_buf;
&lt;br&gt;-	float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;
&lt;br&gt;+	const SndBuf *buf = unit-&amp;gt;m_buf;
&lt;br&gt;+	const float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;
&lt;br&gt;&amp;nbsp;	uint32 bufChannels __attribute__((__unused__)) = buf-&amp;gt;channels;
&lt;br&gt;&amp;nbsp;	uint32 bufSamples __attribute__((__unused__)) = buf-&amp;gt;samples;
&lt;br&gt;&amp;nbsp;	uint32 bufFrames = buf-&amp;gt;frames;
&lt;br&gt;@@ -6248,8 +6248,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define GRAIN_BUF \
&lt;br&gt;-	SndBuf *buf = bufs + bufnum; \
&lt;br&gt;-	float *bufData __attribute__((__unused__)) = buf-&amp;gt;data; \
&lt;br&gt;+	const SndBuf *buf = bufs + bufnum; \
&lt;br&gt;+	const float *bufData __attribute__((__unused__)) = buf-&amp;gt;data; \
&lt;br&gt;&amp;nbsp;	uint32 bufChannels __attribute__((__unused__)) = buf-&amp;gt;channels; \
&lt;br&gt;&amp;nbsp;	uint32 bufSamples __attribute__((__unused__)) = buf-&amp;gt;samples; \
&lt;br&gt;&amp;nbsp;	uint32 bufFrames = buf-&amp;gt;frames; \
&lt;br&gt;@@ -6281,10 +6281,10 @@
&lt;br&gt;&amp;nbsp;		float amp = y1 * y1; \
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase; \
&lt;br&gt;-		float* table0 = table1 - 1; \
&lt;br&gt;-		float* table2 = table1 + 1; \
&lt;br&gt;-		float* table3 = table1 + 2; \
&lt;br&gt;+		const float* table1 = bufData + iphase; \
&lt;br&gt;+		const float* table0 = table1 - 1; \
&lt;br&gt;+		const float* table2 = table1 + 1; \
&lt;br&gt;+		const float* table3 = table1 + 2; \
&lt;br&gt;&amp;nbsp;		if (iphase == 0) { \
&lt;br&gt;&amp;nbsp;			table0 += bufSamples; \
&lt;br&gt;&amp;nbsp;		} else if (iphase &amp;gt;= guardFrame) { \
&lt;br&gt;@@ -6312,8 +6312,8 @@
&lt;br&gt;&amp;nbsp;		float amp = y1 * y1; \
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase; \
&lt;br&gt;-		float* table2 = table1 + 1; \
&lt;br&gt;+		const float* table1 = bufData + iphase; \
&lt;br&gt;+		const float* table2 = table1 + 1; \
&lt;br&gt;&amp;nbsp;		if (iphase &amp;gt; guardFrame) { \
&lt;br&gt;&amp;nbsp;			table2 -= bufSamples; \
&lt;br&gt;&amp;nbsp;		} \
&lt;br&gt;@@ -6536,18 +6536,18 @@
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_feedbk = sc_CalcFeedback(unit-&amp;gt;m_delaytime, unit-&amp;gt;m_decaytime);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (INRATE(1) == calc_FullRate) {
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;if(INRATE(5) == calc_FullRate){
&lt;br&gt;-		SETCALC(Pluck_next_aa_z);
&lt;br&gt;+		if(INRATE(5) == calc_FullRate){
&lt;br&gt;+			SETCALC(Pluck_next_aa_z);
&lt;br&gt;&amp;nbsp;		} else {
&lt;br&gt;-		SETCALC(Pluck_next_ak_z); //ak
&lt;br&gt;+			SETCALC(Pluck_next_ak_z); //ak
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;+	} else {
&lt;br&gt;&amp;nbsp;	 &amp;nbsp; &amp;nbsp;if(INRATE(5) == calc_FullRate){
&lt;br&gt;-		SETCALC(Pluck_next_ka_z); //ka
&lt;br&gt;+			SETCALC(Pluck_next_ka_z); //ka
&lt;br&gt;&amp;nbsp;		} else {
&lt;br&gt;-		SETCALC(Pluck_next_kk_z); //kk
&lt;br&gt;+			SETCALC(Pluck_next_kk_z); //kk
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-	 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;	OUT0(0) = unit-&amp;gt;m_lastsamp = 0.f;
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_prevtrig = 0.f;
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_inputsamps = 0;
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:43:59 UTC (rev 9811)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:46:14 UTC (rev 9812)
&lt;br&gt;@@ -187,7 +187,7 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#define GRAIN_BUF													\
&lt;br&gt;-	SndBuf *buf;													\
&lt;br&gt;+	const SndBuf *buf;												\
&lt;br&gt;&amp;nbsp;	if (bufnum &amp;gt;= world-&amp;gt;mNumSndBufs) {								\
&lt;br&gt;&amp;nbsp;		int localBufNum = bufnum - world-&amp;gt;mNumSndBufs;				\
&lt;br&gt;&amp;nbsp;		Graph *parent = unit-&amp;gt;mParent;								\
&lt;br&gt;@@ -202,7 +202,7 @@
&lt;br&gt;&amp;nbsp;		buf = world-&amp;gt;mSndBufs + bufnum;								\
&lt;br&gt;&amp;nbsp;	}																\
&lt;br&gt;&amp;nbsp;																	\
&lt;br&gt;-	float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;			\
&lt;br&gt;+	const float *bufData __attribute__((__unused__)) = buf-&amp;gt;data;	\
&lt;br&gt;&amp;nbsp;	uint32 bufChannels __attribute__((__unused__)) = buf-&amp;gt;channels;	\
&lt;br&gt;&amp;nbsp;	uint32 bufSamples __attribute__((__unused__)) = buf-&amp;gt;samples;	\
&lt;br&gt;&amp;nbsp;	uint32 bufFrames = buf-&amp;gt;frames;									\
&lt;br&gt;@@ -213,7 +213,7 @@
&lt;br&gt;&amp;nbsp;	double winPos, winInc, w, b1, y1, y2, y0, amp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;\
&lt;br&gt;&amp;nbsp;	winPos = winInc = w = b1 = y1 = y2 = y0 = amp = 0.;		\
&lt;br&gt;&amp;nbsp;	SndBuf *window;											\
&lt;br&gt;-	float *windowData __attribute__((__unused__));			\
&lt;br&gt;+	const float *windowData __attribute__((__unused__)) = 0;\
&lt;br&gt;&amp;nbsp;	uint32 windowSamples __attribute__((__unused__)) = 0;	\
&lt;br&gt;&amp;nbsp;	uint32 windowFrames __attribute__((__unused__)) = 0;	\
&lt;br&gt;&amp;nbsp;	int windowGuardFrame = 0;
&lt;br&gt;@@ -422,8 +422,8 @@
&lt;br&gt;&amp;nbsp;		winPos += winInc;										\
&lt;br&gt;&amp;nbsp;		int iWinPos = (int)winPos;								\
&lt;br&gt;&amp;nbsp;		double winFrac = winPos - (double)iWinPos;				\
&lt;br&gt;-		float* winTable1 = windowData + iWinPos;				\
&lt;br&gt;-		float* winTable2 = winTable1 + 1;						\
&lt;br&gt;+		const float* winTable1 = windowData + iWinPos;			\
&lt;br&gt;+		const float* winTable2 = winTable1 + 1;					\
&lt;br&gt;&amp;nbsp;		if (!windowData)										\
&lt;br&gt;&amp;nbsp;			break;												\
&lt;br&gt;&amp;nbsp;		if (winPos &amp;gt; windowGuardFrame)							\
&lt;br&gt;@@ -953,10 +953,10 @@
&lt;br&gt;&amp;nbsp;#define GRAIN_BUF_LOOP_BODY_4 \
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase; \
&lt;br&gt;-		float* table0 = table1 - 1; \
&lt;br&gt;-		float* table2 = table1 + 1; \
&lt;br&gt;-		float* table3 = table1 + 2; \
&lt;br&gt;+		const float* table1 = bufData + iphase; \
&lt;br&gt;+		const float* table0 = table1 - 1; \
&lt;br&gt;+		const float* table2 = table1 + 1; \
&lt;br&gt;+		const float* table3 = table1 + 2; \
&lt;br&gt;&amp;nbsp;		if (iphase == 0) { \
&lt;br&gt;&amp;nbsp;			table0 += bufSamples; \
&lt;br&gt;&amp;nbsp;		} else if (iphase &amp;gt;= guardFrame) { \
&lt;br&gt;@@ -979,8 +979,8 @@
&lt;br&gt;&amp;nbsp;#define GRAIN_BUF_LOOP_BODY_2 \
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax); \
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase; \
&lt;br&gt;-		float* table1 = bufData + iphase; \
&lt;br&gt;-		float* table2 = table1 + 1; \
&lt;br&gt;+		const float* table1 = bufData + iphase; \
&lt;br&gt;+		const float* table2 = table1 + 1; \
&lt;br&gt;&amp;nbsp;		if (iphase &amp;gt; guardFrame) { \
&lt;br&gt;&amp;nbsp;			table2 -= bufSamples; \
&lt;br&gt;&amp;nbsp;		} \
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9812-trunk-Source-plugins-tp4535805p4535805.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535785</id>
	<title>sc svn: furniture will be rearranged this week</title>
	<published>2010-02-08T09:44:03Z</published>
	<updated>2010-02-08T09:44:03Z</updated>
	<author>
		<name>Dan Stowell-3</name>
	</author>
	<content type="html">Hi -
&lt;br&gt;&lt;br&gt;Just a warning so no-one gets any shocks: later this week I'm
&lt;br&gt;intending to rearrange the svn trunk of supercollider a little, as
&lt;br&gt;discussed in a recent sc-dev thread.
&lt;br&gt;&lt;a href=&quot;http://permalink.gmane.org/gmane.comp.audio.supercollider.devel/23290&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://permalink.gmane.org/gmane.comp.audio.supercollider.devel/23290&lt;/a&gt;&lt;br&gt;&lt;br&gt;Nothing will be deleted but the main build scripts will move slightly
&lt;br&gt;(eg the mac xcode stuff will move into a 'mac' folder). The various
&lt;br&gt;build scripts will need updating to reflect the changes, but that
&lt;br&gt;should happen pretty quickly.
&lt;br&gt;&lt;br&gt;Dan
&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://www.mcld.co.uk&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.mcld.co.uk&lt;/a&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/sc-svn-furniture-will-be-rearranged-this-week-tp4535785p4535785.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535769</id>
	<title>SF.net SVN: supercollider:[9810] trunk/Source/plugins/OscUGens.cpp</title>
	<published>2010-02-08T09:41:54Z</published>
	<updated>2010-02-08T09:41:54Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9810
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9810&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9810&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:41:51 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;plugins: vosc cleanups
&lt;br&gt;&lt;br&gt;- add SndBuf * to VOSC_GET_BUF
&lt;br&gt;- declare table data as const
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535769&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/OscUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/OscUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/OscUGens.cpp	2010-02-08 17:26:40 UTC (rev 9809)
&lt;br&gt;+++ trunk/Source/plugins/OscUGens.cpp	2010-02-08 17:41:51 UTC (rev 9810)
&lt;br&gt;@@ -2098,6 +2098,7 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;////////////////////////////////////////////////////////////////////////////////////////////////////////
&lt;br&gt;&amp;nbsp;#define VOSC_GET_BUF \
&lt;br&gt;+const SndBuf *bufs;\
&lt;br&gt;&amp;nbsp;if (bufnum+1 &amp;gt;= world-&amp;gt;mNumSndBufs) { \
&lt;br&gt;&amp;nbsp;			int localBufNum = bufnum - world-&amp;gt;mNumSndBufs; \
&lt;br&gt;&amp;nbsp;			Graph *parent = unit-&amp;gt;mParent; \
&lt;br&gt;@@ -2120,7 +2121,6 @@
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_bufpos = nextbufpos;
&lt;br&gt;&amp;nbsp;	uint32 bufnum = (uint32)floor(nextbufpos);
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	SndBuf *bufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2163,19 +2163,18 @@
&lt;br&gt;&amp;nbsp;		float level = cur - floor(cur);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		uint32 bufnum = (int)floor(cur);
&lt;br&gt;-		SndBuf *bufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;-		float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;+		const float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;+		const float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;&amp;nbsp;		if (!table0 || !table2 || tableSize != bufs[0].samples|| tableSize != bufs[1].samples) {
&lt;br&gt;&amp;nbsp;			ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;			return;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;-		float *table3 = table2 + 1;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;+		const float *table3 = table2 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		LOOP1(inNumSamples,
&lt;br&gt;&amp;nbsp;			float pfrac = PhaseFrac1(phase);
&lt;br&gt;@@ -2215,19 +2214,17 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			uint32 bufnum = (int)floor(cur);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			SndBuf *bufs;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;			VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;-			float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;+			const float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;+			const float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;&amp;nbsp;			if (!table0 || !table2 || tableSize != bufs[0].samples|| tableSize != bufs[1].samples) {
&lt;br&gt;&amp;nbsp;				ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;				return;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			float *table1 = table0 + 1;
&lt;br&gt;-			float *table3 = table2 + 1;
&lt;br&gt;+			const float *table1 = table0 + 1;
&lt;br&gt;+			const float *table3 = table2 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			LOOP(nsmps,
&lt;br&gt;&amp;nbsp;				float pfrac = PhaseFrac1(phase);
&lt;br&gt;@@ -2261,7 +2258,6 @@
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;m_bufpos = nextbufpos;
&lt;br&gt;&amp;nbsp;	uint32 bufnum = (uint32)floor(nextbufpos);
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	SndBuf *bufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;	int tableSize = bufs[0].samples;
&lt;br&gt;@@ -2306,19 +2302,18 @@
&lt;br&gt;&amp;nbsp;		float level = cur - floor(cur);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		uint32 bufnum = (int)floor(cur);
&lt;br&gt;-		SndBuf *bufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;-		float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;+		const float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;+		const float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;&amp;nbsp;		if (!table0 || !table2 || tableSize != bufs[0].samples|| tableSize != bufs[1].samples) {
&lt;br&gt;&amp;nbsp;			ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;			return;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		float *table1 = table0 + 1;
&lt;br&gt;-		float *table3 = table2 + 1;
&lt;br&gt;+		const float *table1 = table0 + 1;
&lt;br&gt;+		const float *table3 = table2 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		LOOP1(inNumSamples,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -2382,19 +2377,18 @@
&lt;br&gt;&amp;nbsp;			float slope = sweepdiff / (float)nsmps;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			uint32 bufnum = (int)floor(cur);
&lt;br&gt;-			SndBuf *bufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			VOSC_GET_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;-			float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;+			const float *table0 &amp;nbsp;= bufs[0].data;
&lt;br&gt;+			const float *table2 &amp;nbsp;= bufs[1].data;
&lt;br&gt;&amp;nbsp;			if (!table0 || !table2 || tableSize != bufs[0].samples|| tableSize != bufs[1].samples) {
&lt;br&gt;&amp;nbsp;				ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;				return;
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			float *table1 = table0 + 1;
&lt;br&gt;-			float *table3 = table2 + 1;
&lt;br&gt;+			const float *table1 = table0 + 1;
&lt;br&gt;+			const float *table3 = table2 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			LOOP(nsmps,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9810-trunk-Source-plugins-OscUGens-cpp-tp4535769p4535769.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535677</id>
	<title>SF.net SVN: supercollider:[9809] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:26:41Z</published>
	<updated>2010-02-08T09:26:41Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9809
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9809&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9809&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:26:40 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: fix custom envelopes
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535677&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:25:41 UTC (rev 9808)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:26:40 UTC (rev 9809)
&lt;br&gt;@@ -522,7 +522,7 @@
&lt;br&gt;&amp;nbsp;	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;&amp;nbsp;	DECLARE_WINDOW
&lt;br&gt;&amp;nbsp;	GET_GRAIN_WIN(winType)
&lt;br&gt;-	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+	if (winType &amp;gt;= 0 &amp;&amp; (windowData == NULL))
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainInG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;@@ -671,7 +671,7 @@
&lt;br&gt;&amp;nbsp;	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;&amp;nbsp;	DECLARE_WINDOW
&lt;br&gt;&amp;nbsp;	GET_GRAIN_WIN(winType)
&lt;br&gt;-	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+	if (winType &amp;gt;= 0 &amp;&amp; (windowData == NULL))
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainSinG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;@@ -837,10 +837,10 @@
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;+	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 6, position);
&lt;br&gt;&amp;nbsp;	DECLARE_WINDOW
&lt;br&gt;&amp;nbsp;	GET_GRAIN_WIN(winType)
&lt;br&gt;-	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+	if (winType &amp;gt;= 0 &amp;&amp; (windowData == NULL))
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainFMG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;@@ -1074,7 +1074,7 @@
&lt;br&gt;&amp;nbsp;	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 7, position);
&lt;br&gt;&amp;nbsp;	DECLARE_WINDOW
&lt;br&gt;&amp;nbsp;	GET_GRAIN_WIN(winType)
&lt;br&gt;-	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+	if (winType &amp;gt;= 0 &amp;&amp; (windowData == NULL))
&lt;br&gt;&amp;nbsp;		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	uint32 bufnum = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 2, position);
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9809-trunk-Source-plugins-GrainUGens-cpp-tp4535677p4535677.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535667</id>
	<title>SF.net SVN: supercollider:[9808] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:25:41Z</published>
	<updated>2010-02-08T09:25:41Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9808
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9808&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9808&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:25:41 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: remove unused variables
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535667&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:24:36 UTC (rev 9807)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:25:41 UTC (rev 9808)
&lt;br&gt;@@ -727,9 +727,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;-	float *table1 = table0 + 1;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;&amp;nbsp;		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0))
&lt;br&gt;@@ -1007,8 +1004,6 @@
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;-	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;&amp;nbsp;		GrainBufG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;@@ -1069,8 +1064,6 @@
&lt;br&gt;&amp;nbsp;inline void GrainBuf_next_start_new(GrainBuf *unit, int inNumSamples, int position)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;-	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;&amp;nbsp;		Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;@@ -1253,9 +1246,6 @@
&lt;br&gt;&amp;nbsp;	SETUP_OUT
&lt;br&gt;&amp;nbsp;	CHECK_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	for (uint32 n=0; n &amp;lt; numOutputs; n++) {
&lt;br&gt;&amp;nbsp;		int nextGrain = unit-&amp;gt;mNextGrain[n];
&lt;br&gt;&amp;nbsp;		for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive[n]; ) {
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9808-trunk-Source-plugins-GrainUGens-cpp-tp4535667p4535667.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535658</id>
	<title>SF.net SVN: supercollider:[9807] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:24:36Z</published>
	<updated>2010-02-08T09:24:36Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9807
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9807&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9807&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:24:36 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: fix warp for new macros
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535658&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:23:53 UTC (rev 9806)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:24:36 UTC (rev 9807)
&lt;br&gt;@@ -1327,7 +1327,13 @@
&lt;br&gt;&amp;nbsp;				grain-&amp;gt;interp = (int)GRAIN_IN_AT(unit, 7, i);
&lt;br&gt;&amp;nbsp;				float winType = grain-&amp;gt;winType = (int)GRAIN_IN_AT(unit, 4, i); // the buffer that holds the grain shape
&lt;br&gt;&amp;nbsp;				DECLARE_WINDOW
&lt;br&gt;-				GET_GRAIN_WIN(winType)
&lt;br&gt;+
&lt;br&gt;+				if (winType &amp;gt;= unit-&amp;gt;mWorld-&amp;gt;mNumSndBufs) {
&lt;br&gt;+					Print(&amp;quot;Envelope buffer out of range!\n&amp;quot;);
&lt;br&gt;+					break;
&lt;br&gt;+				}
&lt;br&gt;+
&lt;br&gt;+				GET_GRAIN_WIN_RELAXED(winType)
&lt;br&gt;&amp;nbsp;				if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;&amp;nbsp;					GET_GRAIN_INIT_AMP
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9807-trunk-Source-plugins-GrainUGens-cpp-tp4535658p4535658.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535655</id>
	<title>SF.net SVN: supercollider:[9806] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:23:53Z</published>
	<updated>2010-02-08T09:23:53Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9806
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9806&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9806&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:23:53 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: remove unused macros
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535655&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:23:05 UTC (rev 9805)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:23:53 UTC (rev 9806)
&lt;br&gt;@@ -473,53 +473,7 @@
&lt;br&gt;&amp;nbsp;		out2 = out[chan2];						\
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define WARP_GRAIN_LOOP_BODY_4										\
&lt;br&gt;-	phase = sc_gloop(phase, loopMax);								\
&lt;br&gt;-	int32 iphase = (int32)phase;									\
&lt;br&gt;-	float* table1 = bufData + iphase * bufChannels;					\
&lt;br&gt;-	float* table0 = table1 - bufChannels;							\
&lt;br&gt;-	float* table2 = table1 + bufChannels;							\
&lt;br&gt;-	float* table3 = table2 + bufChannels;							\
&lt;br&gt;-	if (iphase == 0) {												\
&lt;br&gt;-		table0 += bufSamples;										\
&lt;br&gt;-	} else if (iphase &amp;gt;= guardFrame) {								\
&lt;br&gt;-		if (iphase == guardFrame) {									\
&lt;br&gt;-			table3 -= bufSamples;									\
&lt;br&gt;-		} else {													\
&lt;br&gt;-			table2 -= bufSamples;									\
&lt;br&gt;-			table3 -= bufSamples;									\
&lt;br&gt;-		}															\
&lt;br&gt;-	}																\
&lt;br&gt;-	float fracphase = phase - (double)iphase;						\
&lt;br&gt;-	float a = table0[n];											\
&lt;br&gt;-	float b = table1[n];											\
&lt;br&gt;-	float c = table2[n];											\
&lt;br&gt;-	float d = table3[n];											\
&lt;br&gt;-	float outval = amp * cubicinterp(fracphase, a, b, c, d);		\
&lt;br&gt;-	ZXP(out1) += outval;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define WARP_GRAIN_LOOP_BODY_2							\
&lt;br&gt;-	phase = sc_gloop(phase, loopMax);					\
&lt;br&gt;-	int32 iphase = (int32)phase;						\
&lt;br&gt;-	float* table1 = bufData + iphase * bufChannels;		\
&lt;br&gt;-	float* table2 = table1 + bufChannels;				\
&lt;br&gt;-	if (iphase &amp;gt; guardFrame) {							\
&lt;br&gt;-		table2 -= bufSamples;							\
&lt;br&gt;-	}													\
&lt;br&gt;-	float fracphase = phase - (double)iphase;			\
&lt;br&gt;-	float b = table1[n];								\
&lt;br&gt;-	float c = table2[n];								\
&lt;br&gt;-	float outval = amp * (b + fracphase * (c - b));		\
&lt;br&gt;-	ZXP(out1) += outval;
&lt;br&gt;-
&lt;br&gt;-// amp needs to be calculated by looking up values in window
&lt;br&gt;-
&lt;br&gt;-#define WARP_GRAIN_LOOP_BODY_1						\
&lt;br&gt;-	phase = sc_gloop(phase, loopMax);				\
&lt;br&gt;-	int32 iphase = (int32)phase;					\
&lt;br&gt;-	float outval = amp * bufData[iphase + n];		\
&lt;br&gt;-	ZXP(out1) += outval;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;//////////////////// InGrain ////////////////////
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;inline void GrainIn_next_play_active(GrainIn * unit, int inNumSamples)
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9806-trunk-Source-plugins-GrainUGens-cpp-tp4535655p4535655.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535646</id>
	<title>SF.net SVN: supercollider:[9805] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:23:05Z</published>
	<updated>2010-02-08T09:23:05Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9805
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9805&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9805&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:23:05 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: range check for envelope buffer
&lt;br&gt;&lt;br&gt;the current implementation doesn't contain a check, whether the envelope
&lt;br&gt;buffer number is actually valid
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535646&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:21:54 UTC (rev 9804)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:23:05 UTC (rev 9805)
&lt;br&gt;@@ -226,8 +226,9 @@
&lt;br&gt;&amp;nbsp;		return;									\
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define GET_GRAIN_WIN(WINTYPE)							\
&lt;br&gt;+#define GET_GRAIN_WIN_RELAXED(WINTYPE)					\
&lt;br&gt;&amp;nbsp;	do {												\
&lt;br&gt;+		assert(WINTYPE &amp;lt; unit-&amp;gt;mWorld-&amp;gt;mNumSndBufs);	\
&lt;br&gt;&amp;nbsp;		window = unit-&amp;gt;mWorld-&amp;gt;mSndBufs + (int)WINTYPE;	\
&lt;br&gt;&amp;nbsp;		windowData = window-&amp;gt;data;						\
&lt;br&gt;&amp;nbsp;		windowSamples = window-&amp;gt;samples;				\
&lt;br&gt;@@ -235,6 +236,15 @@
&lt;br&gt;&amp;nbsp;		windowGuardFrame = windowFrames - 1;			\
&lt;br&gt;&amp;nbsp;	} while (0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+#define GET_GRAIN_WIN(WINTYPE)							\
&lt;br&gt;+	do {												\
&lt;br&gt;+		if (WINTYPE &amp;gt;= unit-&amp;gt;mWorld-&amp;gt;mNumSndBufs) {		\
&lt;br&gt;+			Print(&amp;quot;Envelope buffer out of range!\n&amp;quot;);	\
&lt;br&gt;+			return;										\
&lt;br&gt;+		}												\
&lt;br&gt;+		GET_GRAIN_WIN_RELAXED(WINTYPE)					\
&lt;br&gt;+	} while (0);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;#define GRAIN_LOOP_BODY_4										\
&lt;br&gt;&amp;nbsp;		float amp = y1 * y1;									\
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax);						\
&lt;br&gt;@@ -428,7 +438,7 @@
&lt;br&gt;&amp;nbsp;		y2 = grain-&amp;gt;y2;							\
&lt;br&gt;&amp;nbsp;		amp = grain-&amp;gt;curamp;					\
&lt;br&gt;&amp;nbsp;	} else {									\
&lt;br&gt;-		GET_GRAIN_WIN(grain-&amp;gt;winType);			\
&lt;br&gt;+		GET_GRAIN_WIN_RELAXED(grain-&amp;gt;winType);	\
&lt;br&gt;&amp;nbsp;		if (!windowData) break;					\
&lt;br&gt;&amp;nbsp;		winPos = grain-&amp;gt;winPos;					\
&lt;br&gt;&amp;nbsp;		winInc = grain-&amp;gt;winInc;					\
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9805-trunk-Source-plugins-GrainUGens-cpp-tp4535646p4535646.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535633</id>
	<title>SF.net SVN: supercollider:[9804] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:21:54Z</published>
	<updated>2010-02-08T09:21:54Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9804
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9804&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9804&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:21:54 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: unify common code of grain starting
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535633&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:20:27 UTC (rev 9803)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:21:54 UTC (rev 9804)
&lt;br&gt;@@ -163,6 +163,15 @@
&lt;br&gt;&amp;nbsp;	return IN0(index);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+template &amp;lt;bool full_rate&amp;gt;
&lt;br&gt;+inline float grain_in_at(Unit* unit, int index, int offset)
&lt;br&gt;+{
&lt;br&gt;+	if (full_rate)
&lt;br&gt;+		return GRAIN_IN_AT(unit, index, offset);
&lt;br&gt;+	else
&lt;br&gt;+		return IN0(index);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;inline double sc_gloop(double in, double hi)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	// avoid the divide if possible
&lt;br&gt;@@ -434,24 +443,15 @@
&lt;br&gt;&amp;nbsp;	grain-&amp;gt;curamp = amp;						\
&lt;br&gt;&amp;nbsp;	grain-&amp;gt;counter -= nsmps;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define WRAP_CHAN									\
&lt;br&gt;-	out1 = out[grain-&amp;gt;chan] + i;					\
&lt;br&gt;+#define WRAP_CHAN(offset)							\
&lt;br&gt;+	out1 = out[grain-&amp;gt;chan] + offset;				\
&lt;br&gt;&amp;nbsp;	if(numOutputs &amp;gt; 1) {							\
&lt;br&gt;&amp;nbsp;		if((grain-&amp;gt;chan + 1) &amp;gt;= (int)numOutputs)	\
&lt;br&gt;-			out2 = out[0] + i;						\
&lt;br&gt;+			out2 = out[0] + offset;					\
&lt;br&gt;&amp;nbsp;		else										\
&lt;br&gt;-			out2 = out[grain-&amp;gt;chan + 1] + i;		\
&lt;br&gt;+			out2 = out[grain-&amp;gt;chan + 1] + offset;	\
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define WRAP_CHAN_K									\
&lt;br&gt;-	out1 = out[grain-&amp;gt;chan];						\
&lt;br&gt;-	if(numOutputs &amp;gt; 1) {							\
&lt;br&gt;-		if((grain-&amp;gt;chan + 1) &amp;gt;= (int)numOutputs)	\
&lt;br&gt;-			out2 = out[0];							\
&lt;br&gt;-		else										\
&lt;br&gt;-			out2 = out[grain-&amp;gt;chan + 1];			\
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;#define GET_PAN_PARAMS							\
&lt;br&gt;&amp;nbsp;	float pan1 = grain-&amp;gt;pan1;					\
&lt;br&gt;&amp;nbsp;	uint32 chan1 = grain-&amp;gt;chan;					\
&lt;br&gt;@@ -547,60 +547,68 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainIn_next_a(GrainIn *unit, int inNumSamples)
&lt;br&gt;+template &amp;lt;bool full_rate&amp;gt;
&lt;br&gt;+inline void GrainIn_next_start_new(GrainIn * unit, int inNumSamples, int position)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-	//begin add
&lt;br&gt;-	// end add
&lt;br&gt;+	if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;+		Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	GrainIn_next_play_active(unit, inNumSamples);
&lt;br&gt;+	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;+	DECLARE_WINDOW
&lt;br&gt;+	GET_GRAIN_WIN(winType)
&lt;br&gt;+	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	GrainInG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;+	float winSize = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 1, position);
&lt;br&gt;+	double counter = winSize * SAMPLERATE;
&lt;br&gt;+	counter = sc_max(4., counter);
&lt;br&gt;+	grain-&amp;gt;counter = (int)counter;
&lt;br&gt;+	grain-&amp;gt;winType = winType;
&lt;br&gt;+
&lt;br&gt;+	GET_GRAIN_INIT_AMP
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;	float *in = IN(2);
&lt;br&gt;-	float *trig = IN(0);
&lt;br&gt;-	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;-		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;-			// start a grain
&lt;br&gt;-			if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {Print(&amp;quot;Too many grains!\n&amp;quot;); break;}
&lt;br&gt;-			float winType = GRAIN_IN_AT(unit, 4, i);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainInG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				float winSize = GRAIN_IN_AT(unit, 1, i);
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;+	float *in1 = in + position;
&lt;br&gt;+	// begin add //
&lt;br&gt;+	float pan = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 3, position);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				float *in1 = in + i;
&lt;br&gt;-				// begin add //
&lt;br&gt;-				float pan = GRAIN_IN_AT(unit, 3, i);
&lt;br&gt;+	CALC_GRAIN_PAN
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;+	WRAP_CHAN(position)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				WRAP_CHAN
&lt;br&gt;+	int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - position);
&lt;br&gt;+	for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+		float outval = amp * in1[j];
&lt;br&gt;+		// begin add / change
&lt;br&gt;+		out1[j] += outval * pan1;
&lt;br&gt;+		if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;+		// end add / change
&lt;br&gt;+		CALC_NEXT_GRAIN_AMP
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// end add //
&lt;br&gt;+	SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - i);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float outval = amp * in1[j];
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;-				}
&lt;br&gt;+	if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+		*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;+void GrainIn_next_a(GrainIn *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+	//begin add
&lt;br&gt;+	// end add
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+	GrainIn_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	float *trig = IN(0);
&lt;br&gt;+	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;+		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0))
&lt;br&gt;+			GrainIn_next_start_new&amp;lt;true&amp;gt;(unit, inNumSamples, i);
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -617,53 +625,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainIn_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;-
&lt;br&gt;-	float *in = IN(2);
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;-		// start a grain
&lt;br&gt;-		if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains)
&lt;br&gt;-			Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-		else {
&lt;br&gt;-			float winType = IN0(4);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainInG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				float winSize = IN0(1);
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType;
&lt;br&gt;-
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;-				// begin add
&lt;br&gt;-				float pan = IN0(3);
&lt;br&gt;-
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;-
&lt;br&gt;-				WRAP_CHAN_K
&lt;br&gt;-
&lt;br&gt;-				// end add
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float outval = amp * in[j];
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;-				}
&lt;br&gt;-
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-		 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;+	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0))
&lt;br&gt;+		GrainIn_next_start_new&amp;lt;false&amp;gt;(unit, inNumSamples, 0);
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;curtrig = trig;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -731,70 +696,80 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainSin_next_a(GrainSin *unit, int inNumSamples)
&lt;br&gt;+template &amp;lt;bool full_rate&amp;gt;
&lt;br&gt;+inline void GrainSin_next_start_new(GrainSin * unit, int inNumSamples, int position)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+	if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;+		Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	GrainSin_next_play_active(unit, inNumSamples);
&lt;br&gt;+	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;+	DECLARE_WINDOW
&lt;br&gt;+	GET_GRAIN_WIN(winType)
&lt;br&gt;+	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	GrainSinG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;+	float freq = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 2, position);
&lt;br&gt;+	float winSize = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 1, position);
&lt;br&gt;+	int32 thisfreq = grain-&amp;gt;freq = (int32)(unit-&amp;gt;m_cpstoinc * freq);
&lt;br&gt;+	int32 oscphase = 0;
&lt;br&gt;+	double counter = winSize * SAMPLERATE;
&lt;br&gt;+	counter = sc_max(4., counter);
&lt;br&gt;+	grain-&amp;gt;counter = (int)counter;
&lt;br&gt;+	grain-&amp;gt;winType = winType;
&lt;br&gt;+
&lt;br&gt;+	GET_GRAIN_INIT_AMP
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;&amp;nbsp;	float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float *trig = IN(0);
&lt;br&gt;-	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;-		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;-			// start a grain
&lt;br&gt;-			if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;-				Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-			float winType = GRAIN_IN_AT(unit, 4, i);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainSinG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				// INRATE(1) == calcFullRate
&lt;br&gt;-				float freq = GRAIN_IN_AT(unit, 2, i);
&lt;br&gt;-				float winSize = GRAIN_IN_AT(unit, 1, i);
&lt;br&gt;-				int32 thisfreq = grain-&amp;gt;freq = (int32)(unit-&amp;gt;m_cpstoinc * freq);
&lt;br&gt;-				int32 oscphase = 0;
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType; //GRAIN_IN_AT(unit, 4, i);
&lt;br&gt;+	// begin add //
&lt;br&gt;+	float pan = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 3, position);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;+	CALC_GRAIN_PAN
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// begin add //
&lt;br&gt;-				float pan = GRAIN_IN_AT(unit, 3, i);
&lt;br&gt;+	WRAP_CHAN(position)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;+	// end add //
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				WRAP_CHAN
&lt;br&gt;+	int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - position);
&lt;br&gt;+	for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+		float outval = amp * lookupi1(table0, table1, oscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;+		// begin add / change
&lt;br&gt;+		out1[j] += outval * pan1;
&lt;br&gt;+		if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;+		// end add / change
&lt;br&gt;+		CALC_NEXT_GRAIN_AMP
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// end add //
&lt;br&gt;+		oscphase += thisfreq;
&lt;br&gt;+	}
&lt;br&gt;+	grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - i);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float outval = amp * lookupi1(table0, table1, oscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;+	SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					oscphase += thisfreq;
&lt;br&gt;-				}
&lt;br&gt;-				grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;+	if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+		*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;+void GrainSin_next_a(GrainSin *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+	GrainSin_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+
&lt;br&gt;+	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;+	float *table1 = table0 + 1;
&lt;br&gt;+
&lt;br&gt;+	float *trig = IN(0);
&lt;br&gt;+	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;+		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0))
&lt;br&gt;+			GrainSin_next_start_new&amp;lt;true&amp;gt;(unit, inNumSamples, i);
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -811,65 +786,14 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainSin_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;-	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;-	float *table1 = table0 + 1;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;-	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;-		// start a grain
&lt;br&gt;-		if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains)
&lt;br&gt;-		{
&lt;br&gt;-			Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-		} else {
&lt;br&gt;-			float winType = IN0(4);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainSinG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				float freq = IN0(2);
&lt;br&gt;-				float winSize = IN0(1);
&lt;br&gt;-				int32 thisfreq = grain-&amp;gt;freq = (int32)(unit-&amp;gt;m_cpstoinc * freq);
&lt;br&gt;-				int32 oscphase = 0;
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// begin add
&lt;br&gt;-				float pan = IN0(3);
&lt;br&gt;-
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;-
&lt;br&gt;-				WRAP_CHAN_K
&lt;br&gt;-
&lt;br&gt;-				// end add
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float outval = amp * lookupi1(table0, table1, oscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;-
&lt;br&gt;-					oscphase += thisfreq;
&lt;br&gt;-				}
&lt;br&gt;-				grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;-
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;+	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0))
&lt;br&gt;+		GrainSin_next_start_new&amp;lt;false&amp;gt;(unit, inNumSamples, 0);
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;curtrig = trig;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;void GrainSin_Ctor(GrainSin *unit)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	if (INRATE(0) == calc_FullRate)
&lt;br&gt;@@ -891,6 +815,7 @@
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;mGrains);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;inline void GrainFM_next_play_active(GrainFM *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;@@ -943,78 +868,82 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainFM_next_a(GrainFM *unit, int inNumSamples)
&lt;br&gt;+template &amp;lt;bool full_rate&amp;gt;
&lt;br&gt;+inline void GrainFM_next_start_new(GrainFM * unit, int inNumSamples, int position)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+	if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;+		Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	GrainFM_next_play_active(unit, inNumSamples);
&lt;br&gt;+	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position);
&lt;br&gt;+	DECLARE_WINDOW
&lt;br&gt;+	GET_GRAIN_WIN(winType)
&lt;br&gt;+	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	GrainFMG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;+	float winSize = GRAIN_IN_AT(unit, 1, position);
&lt;br&gt;+	float carfreq = GRAIN_IN_AT(unit, 2, position);
&lt;br&gt;+	float modfreq = GRAIN_IN_AT(unit, 3, position);
&lt;br&gt;+	float index = GRAIN_IN_AT(unit, 4, position);
&lt;br&gt;+	float deviation = grain-&amp;gt;deviation = index * modfreq;
&lt;br&gt;+	int32 mfreq = grain-&amp;gt;mfreq = (int32)(unit-&amp;gt;m_cpstoinc * modfreq);
&lt;br&gt;+	grain-&amp;gt;carbase = carfreq;
&lt;br&gt;+	int32 coscphase = 0;
&lt;br&gt;+	int32 moscphase = 0;
&lt;br&gt;+	double counter = winSize * SAMPLERATE;
&lt;br&gt;+	counter = sc_max(4., counter);
&lt;br&gt;+	grain-&amp;gt;counter = (int)counter;
&lt;br&gt;+	grain-&amp;gt;winType = winType; //GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;+
&lt;br&gt;+	GET_GRAIN_INIT_AMP
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;&amp;nbsp;	float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float *trig = IN(0);
&lt;br&gt;-	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;-		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;-			// start a grain
&lt;br&gt;-			if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;-				Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-				break;
&lt;br&gt;-			}
&lt;br&gt;-			float winType = GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;+	// begin add //
&lt;br&gt;+	float pan = GRAIN_IN_AT(unit, 5, position);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainFMG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				float winSize = GRAIN_IN_AT(unit, 1, i);
&lt;br&gt;-				float carfreq = GRAIN_IN_AT(unit, 2, i);
&lt;br&gt;-				float modfreq = GRAIN_IN_AT(unit, 3, i);
&lt;br&gt;-				float index = GRAIN_IN_AT(unit, 4, i);
&lt;br&gt;-				float deviation = grain-&amp;gt;deviation = index * modfreq;
&lt;br&gt;-				int32 mfreq = grain-&amp;gt;mfreq = (int32)(unit-&amp;gt;m_cpstoinc * modfreq);
&lt;br&gt;-				grain-&amp;gt;carbase = carfreq;
&lt;br&gt;-				int32 coscphase = 0;
&lt;br&gt;-				int32 moscphase = 0;
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType; //GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;+	CALC_GRAIN_PAN
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;+	WRAP_CHAN(position)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// begin add //
&lt;br&gt;-				float pan = GRAIN_IN_AT(unit, 5, i);
&lt;br&gt;+	// end add //
&lt;br&gt;+	int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - position);
&lt;br&gt;+	for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+		float thismod = lookupi1(table0, table1, moscphase, unit-&amp;gt;m_lomask) * deviation;
&lt;br&gt;+		float outval = amp * lookupi1(table0, table1, coscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;+		// begin add / change
&lt;br&gt;+		out1[j] += outval * pan1;
&lt;br&gt;+		if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;+		// end add / change
&lt;br&gt;+		CALC_NEXT_GRAIN_AMP
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;+		int32 cfreq = (int32)(unit-&amp;gt;m_cpstoinc * (carfreq + thismod)); // needs to be calced in the loop!
&lt;br&gt;+		coscphase += cfreq;
&lt;br&gt;+		moscphase += mfreq;
&lt;br&gt;+	} // need to save float carbase, int32 mfreq, float deviation
&lt;br&gt;+	grain-&amp;gt;coscphase = coscphase;
&lt;br&gt;+	grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				WRAP_CHAN
&lt;br&gt;+	SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				// end add //
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - i);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float thismod = lookupi1(table0, table1, moscphase, unit-&amp;gt;m_lomask) * deviation;
&lt;br&gt;-					float outval = amp * lookupi1(table0, table1, coscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;+	if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+		*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					int32 cfreq = (int32)(unit-&amp;gt;m_cpstoinc * (carfreq + thismod)); // needs to be calced in the loop!
&lt;br&gt;-					coscphase += cfreq;
&lt;br&gt;-					moscphase += mfreq;
&lt;br&gt;-				} // need to save float carbase, int32 mfreq, float deviation
&lt;br&gt;-				grain-&amp;gt;coscphase = coscphase;
&lt;br&gt;-				grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;+void GrainFM_next_a(GrainFM *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;+	GrainFM_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+	float *trig = IN(0);
&lt;br&gt;+	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;+		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0))
&lt;br&gt;+			GrainFM_next_start_new&amp;lt;true&amp;gt;(unit, inNumSamples, i);
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -1032,68 +961,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainFM_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;-
&lt;br&gt;-	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;-	float *table1 = table0 + 1;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;-	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;-		// start a grain
&lt;br&gt;-		if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains)
&lt;br&gt;-			Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-		else {
&lt;br&gt;-			float winType = IN0(6);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-			GET_GRAIN_WIN(winType)
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				GrainFMG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-				float winSize = IN0(1);
&lt;br&gt;-				float carfreq = IN0(2);
&lt;br&gt;-				float modfreq = IN0(3);
&lt;br&gt;-				float index = IN0(4);
&lt;br&gt;-				float deviation = grain-&amp;gt;deviation = index * modfreq;
&lt;br&gt;-				int32 mfreq = grain-&amp;gt;mfreq = (int32)(unit-&amp;gt;m_cpstoinc * modfreq);
&lt;br&gt;-				grain-&amp;gt;carbase = carfreq;
&lt;br&gt;-				int32 coscphase = 0;
&lt;br&gt;-				int32 moscphase = 0;
&lt;br&gt;-				double counter = winSize * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-				grain-&amp;gt;winType = winType;
&lt;br&gt;+	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0))
&lt;br&gt;+		GrainFM_next_start_new&amp;lt;false&amp;gt;(unit, inNumSamples, 0);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;-				// begin add
&lt;br&gt;-				float pan = IN0(5);
&lt;br&gt;-
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;-
&lt;br&gt;-				WRAP_CHAN_K
&lt;br&gt;-
&lt;br&gt;-				// end add
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-				for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-					float thismod = lookupi1(table0, table1, moscphase, unit-&amp;gt;m_lomask) * deviation;
&lt;br&gt;-					float outval = amp * lookupi1(table0, table1, coscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-					// begin add / change
&lt;br&gt;-					out1[j] += outval * pan1;
&lt;br&gt;-					if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-					// end add / change
&lt;br&gt;-					CALC_NEXT_GRAIN_AMP
&lt;br&gt;-
&lt;br&gt;-					int32 cfreq = (int32)(unit-&amp;gt;m_cpstoinc * (carfreq + thismod)); // needs to be calced in the loop!
&lt;br&gt;-					coscphase += cfreq;
&lt;br&gt;-					moscphase += mfreq;
&lt;br&gt;-				} // need to save float carbase, int32 mfreq, float deviation
&lt;br&gt;-				grain-&amp;gt;coscphase = coscphase;
&lt;br&gt;-				grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;curtrig = trig;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1230,98 +1101,98 @@
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainBuf_next_a(GrainBuf *unit, int inNumSamples)
&lt;br&gt;+template &amp;lt;bool full_rate&amp;gt;
&lt;br&gt;+inline void GrainBuf_next_start_new(GrainBuf *unit, int inNumSamples, int position)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-
&lt;br&gt;-	GrainBuf_next_play_active(unit, inNumSamples);
&lt;br&gt;-
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;&amp;nbsp;	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;&amp;nbsp;	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;+		Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;+		return;
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float *trig = IN(0);
&lt;br&gt;-	for (int i=0; i&amp;lt;inNumSamples; i++) {
&lt;br&gt;-		if ((trig[i] &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0)) {
&lt;br&gt;-			// start a grain
&lt;br&gt;-			if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {
&lt;br&gt;-				Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-			} else {
&lt;br&gt;+	GrainBufG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;+	float winType = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 7, position);
&lt;br&gt;+	DECLARE_WINDOW
&lt;br&gt;+	GET_GRAIN_WIN(winType)
&lt;br&gt;+	if (winType &amp;gt;= 0 || (windowData == NULL))
&lt;br&gt;+		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				GrainBufG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;+	uint32 bufnum = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 2, position);
&lt;br&gt;+	grain-&amp;gt;bufnum = bufnum;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				float winType = GRAIN_IN_AT(unit, 7, i);
&lt;br&gt;+	GRAIN_BUF
&lt;br&gt;+	CHECK_BUF
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				DECLARE_WINDOW
&lt;br&gt;-				if(winType &amp;gt;= 0.)
&lt;br&gt;-					GET_GRAIN_WIN(winType)
&lt;br&gt;+	if (bufChannels != 1)
&lt;br&gt;+		return;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-					uint32 bufnum = (uint32)GRAIN_IN_AT(unit, 2, i);
&lt;br&gt;-					grain-&amp;gt;bufnum = bufnum;
&lt;br&gt;-//					if (bufnum &amp;gt;= numBufs) continue;
&lt;br&gt;+	float bufSampleRate = buf-&amp;gt;samplerate;
&lt;br&gt;+	float bufRateScale = bufSampleRate * SAMPLEDUR;
&lt;br&gt;+	double loopMax = (double)bufFrames;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					GRAIN_BUF
&lt;br&gt;-					CHECK_BUF
&lt;br&gt;+	double counter = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 1, position) * SAMPLERATE;
&lt;br&gt;+	counter = sc_max(4., counter);
&lt;br&gt;+	grain-&amp;gt;counter = (int)counter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					if (bufChannels != 1) continue;
&lt;br&gt;+	double rate = grain-&amp;gt;rate = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 3, position) * bufRateScale;
&lt;br&gt;+	double phase = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 4, position) * bufFrames;
&lt;br&gt;+	grain-&amp;gt;interp = (int)grain_in_at&amp;lt;full_rate&amp;gt;(unit, 5, position);
&lt;br&gt;+	grain-&amp;gt;winType = winType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					float bufSampleRate = buf-&amp;gt;samplerate;
&lt;br&gt;-					float bufRateScale = bufSampleRate * SAMPLEDUR;
&lt;br&gt;-					double loopMax = (double)bufFrames;
&lt;br&gt;+	GET_GRAIN_INIT_AMP
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+	// begin add //
&lt;br&gt;+	float pan = grain_in_at&amp;lt;full_rate&amp;gt;(unit, 6, position);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					double counter = GRAIN_IN_AT(unit, 1, i) * SAMPLERATE;
&lt;br&gt;-					counter = sc_max(4., counter);
&lt;br&gt;-					grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-					grain-&amp;gt;winType = winType;
&lt;br&gt;+	CALC_GRAIN_PAN
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					GET_GRAIN_INIT_AMP
&lt;br&gt;+	WRAP_CHAN(position)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					double rate = grain-&amp;gt;rate = GRAIN_IN_AT(unit, 3, i) * bufRateScale;
&lt;br&gt;-					double phase = GRAIN_IN_AT(unit, 4, i) * bufFrames;
&lt;br&gt;-					grain-&amp;gt;interp = (int)GRAIN_IN_AT(unit, 5, i);
&lt;br&gt;-					// begin add //
&lt;br&gt;-					float pan = GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;+	// end add //
&lt;br&gt;+	int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples - position);
&lt;br&gt;+	if (grain-&amp;gt;interp &amp;gt;= 4) {
&lt;br&gt;+		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+			GRAIN_BUF_LOOP_BODY_4
&lt;br&gt;+			CALC_NEXT_GRAIN_AMP
&lt;br&gt;+			phase += rate;
&lt;br&gt;+		}
&lt;br&gt;+	} else if (grain-&amp;gt;interp &amp;gt;= 2) {
&lt;br&gt;+		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+			GRAIN_BUF_LOOP_BODY_2
&lt;br&gt;+			CALC_NEXT_GRAIN_AMP
&lt;br&gt;+			phase += rate;
&lt;br&gt;+		}
&lt;br&gt;+	} else {
&lt;br&gt;+		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;+			GRAIN_BUF_LOOP_BODY_1
&lt;br&gt;+			CALC_NEXT_GRAIN_AMP
&lt;br&gt;+			phase += rate;
&lt;br&gt;+		}
&lt;br&gt;+	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					CALC_GRAIN_PAN
&lt;br&gt;+	grain-&amp;gt;phase = phase;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					WRAP_CHAN
&lt;br&gt;+	SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					// end add //
&lt;br&gt;+	if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+		*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples-i);
&lt;br&gt;-					if (grain-&amp;gt;interp &amp;gt;= 4) {
&lt;br&gt;-						for (int j=0; j&amp;lt;nsmps; j++) {
&lt;br&gt;-							GRAIN_BUF_LOOP_BODY_4
&lt;br&gt;-							CALC_NEXT_GRAIN_AMP
&lt;br&gt;-							phase += rate;
&lt;br&gt;-						}
&lt;br&gt;-					} else if (grain-&amp;gt;interp &amp;gt;= 2) {
&lt;br&gt;-						for (int j=0; j&amp;lt;nsmps; j++) {
&lt;br&gt;-							GRAIN_BUF_LOOP_BODY_2
&lt;br&gt;-							CALC_NEXT_GRAIN_AMP
&lt;br&gt;-							phase += rate;
&lt;br&gt;-						}
&lt;br&gt;-					} else {
&lt;br&gt;-						for (int j=0; j&amp;lt;nsmps; j++) {
&lt;br&gt;-							GRAIN_BUF_LOOP_BODY_1
&lt;br&gt;-							CALC_NEXT_GRAIN_AMP
&lt;br&gt;-							phase += rate;
&lt;br&gt;-						}
&lt;br&gt;-					}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					grain-&amp;gt;phase = phase;
&lt;br&gt;+void GrainBuf_next_a(GrainBuf *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;+	GrainBuf_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-						*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-				}
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;+	float *trig = IN(0);
&lt;br&gt;+	for (int i=0; i&amp;lt;inNumSamples; i++) {
&lt;br&gt;+		if ((trig[i] &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0))
&lt;br&gt;+			GrainBuf_next_start_new&amp;lt;true&amp;gt;(unit, inNumSamples, i);
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -1338,85 +1209,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	GrainBuf_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;-
&lt;br&gt;-	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;-	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;-	//uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;-	if ((trig &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0)) {
&lt;br&gt;-		// start a grain
&lt;br&gt;-		if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains) {Print(&amp;quot;Too many grains!\n&amp;quot;);
&lt;br&gt;-		} else {
&lt;br&gt;-			GrainBufG *grain = unit-&amp;gt;mGrains + unit-&amp;gt;mNumActive++;
&lt;br&gt;-			float winType = IN0(7);
&lt;br&gt;-			DECLARE_WINDOW
&lt;br&gt;-
&lt;br&gt;-			if(winType &amp;gt;= 0.) {
&lt;br&gt;-				GET_GRAIN_WIN(winType)
&lt;br&gt;-			}
&lt;br&gt;-
&lt;br&gt;-			if (windowData || (winType &amp;lt; 0.)) {
&lt;br&gt;-				uint32 bufnum = (uint32)IN0( 2 );
&lt;br&gt;-				grain-&amp;gt;bufnum = bufnum;
&lt;br&gt;-
&lt;br&gt;-				GRAIN_BUF
&lt;br&gt;-				CHECK_BUF
&lt;br&gt;-
&lt;br&gt;-				float bufSampleRate = buf-&amp;gt;samplerate;
&lt;br&gt;-				float bufRateScale = bufSampleRate * SAMPLEDUR;
&lt;br&gt;-				double loopMax = (double)bufFrames;
&lt;br&gt;-
&lt;br&gt;-				double counter = IN0(1) * SAMPLERATE;
&lt;br&gt;-				counter = sc_max(4., counter);
&lt;br&gt;-				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;-
&lt;br&gt;-				double rate = grain-&amp;gt;rate = IN0(3) * bufRateScale;
&lt;br&gt;-				double phase = IN0(4) * bufFrames;
&lt;br&gt;-				grain-&amp;gt;interp = (int)IN0(5);
&lt;br&gt;-				grain-&amp;gt;winType = winType;
&lt;br&gt;-
&lt;br&gt;-				GET_GRAIN_INIT_AMP
&lt;br&gt;-
&lt;br&gt;-				// begin add //
&lt;br&gt;-				float pan = IN0(6);
&lt;br&gt;-
&lt;br&gt;-				CALC_GRAIN_PAN
&lt;br&gt;-
&lt;br&gt;-				WRAP_CHAN_K
&lt;br&gt;-
&lt;br&gt;-				// end add //
&lt;br&gt;-				int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-				if (grain-&amp;gt;interp &amp;gt;= 4) {
&lt;br&gt;-					for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-						GRAIN_BUF_LOOP_BODY_4
&lt;br&gt;-						CALC_NEXT_GRAIN_AMP
&lt;br&gt;-						phase += rate;
&lt;br&gt;-					}
&lt;br&gt;-				} else if (grain-&amp;gt;interp &amp;gt;= 2) {
&lt;br&gt;-					for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-						GRAIN_BUF_LOOP_BODY_2
&lt;br&gt;-						CALC_NEXT_GRAIN_AMP
&lt;br&gt;-						phase += rate;
&lt;br&gt;-					}
&lt;br&gt;-				} else {
&lt;br&gt;-					for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-						GRAIN_BUF_LOOP_BODY_1
&lt;br&gt;-						CALC_NEXT_GRAIN_AMP
&lt;br&gt;-						phase += rate;
&lt;br&gt;-					}
&lt;br&gt;-				}
&lt;br&gt;-
&lt;br&gt;-				grain-&amp;gt;phase = phase;
&lt;br&gt;-
&lt;br&gt;-				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;-	}
&lt;br&gt;+	if ((trig &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0))
&lt;br&gt;+		GrainBuf_next_start_new&amp;lt;false&amp;gt;(unit, inNumSamples, 0);
&lt;br&gt;&amp;nbsp;	unit-&amp;gt;curtrig = trig;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9804-trunk-Source-plugins-GrainUGens-cpp-tp4535633p4535633.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535624</id>
	<title>SF.net SVN: supercollider:[9803] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:20:27Z</published>
	<updated>2010-02-08T09:20:27Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9803
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9803&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9803&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:20:27 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: unify common code of grain ugens
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535624&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:19:10 UTC (rev 9802)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:20:27 UTC (rev 9803)
&lt;br&gt;@@ -512,13 +512,9 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;//////////////////// InGrain ////////////////////
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainIn_next_a(GrainIn *unit, int inNumSamples)
&lt;br&gt;+inline void GrainIn_next_play_active(GrainIn * unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-	//begin add
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;-	// end add
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float *in = IN(2);
&lt;br&gt;&amp;nbsp;	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;&amp;nbsp;		GrainInG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;@@ -544,12 +540,23 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void GrainIn_next_a(GrainIn *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+	//begin add
&lt;br&gt;+	// end add
&lt;br&gt;+
&lt;br&gt;+	GrainIn_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+	float *in = IN(2);
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;&amp;nbsp;		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;@@ -607,42 +614,14 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mMaxGrains = (int)maxGrains;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mGrains = (GrainInG*)RTAlloc(unit-&amp;gt;mWorld, unit-&amp;gt;mMaxGrains * sizeof(GrainInG));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	// begin add //
&lt;br&gt;-	SETUP_GRAIN_OUTS
&lt;br&gt;-	// end add
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	float *in = IN(2);
&lt;br&gt;-	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;-		GrainInG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;-		DECLARE_WINDOW
&lt;br&gt;-		GET_GRAIN_AMP_PARAMS
&lt;br&gt;+	GrainIn_next_play_active(unit, inNumSamples);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		// begin add //
&lt;br&gt;-		float pan2 = 0.;
&lt;br&gt;-		float *out2;
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		GET_PAN_PARAMS
&lt;br&gt;-		// end add //
&lt;br&gt;-
&lt;br&gt;-		int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-			float outval = amp * in[j];
&lt;br&gt;-			// begin change / add //
&lt;br&gt;-			out1[j] += outval * pan1;
&lt;br&gt;-			if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-			// end change //
&lt;br&gt;-			CALC_NEXT_GRAIN_AMP
&lt;br&gt;-		}
&lt;br&gt;-
&lt;br&gt;-		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-		else
&lt;br&gt;-			++i;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;+	float *in = IN(2);
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;&amp;nbsp;		// start a grain
&lt;br&gt;&amp;nbsp;		if (unit-&amp;gt;mNumActive+1 &amp;gt;= unit-&amp;gt;mMaxGrains)
&lt;br&gt;@@ -706,10 +685,8 @@
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;mGrains);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainSin_next_a(GrainSin *unit, int inNumSamples)
&lt;br&gt;+inline void GrainSin_next_play_active(GrainSin * unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;@@ -752,7 +729,19 @@
&lt;br&gt;&amp;nbsp;		else
&lt;br&gt;&amp;nbsp;			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void GrainSin_next_a(GrainSin *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	GrainSin_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+
&lt;br&gt;+	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;+	float *table1 = table0 + 1;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;&amp;nbsp;		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;@@ -819,49 +808,13 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mMaxGrains = (int)maxGrains;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mGrains = (GrainSinG*)RTAlloc(unit-&amp;gt;mWorld, unit-&amp;gt;mMaxGrains * sizeof(GrainSinG));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	// begin add //
&lt;br&gt;+
&lt;br&gt;+	GrainSin_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;-	// end add
&lt;br&gt;&amp;nbsp;	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;&amp;nbsp;	float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;-		GrainSinG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;-		DECLARE_WINDOW
&lt;br&gt;-		GET_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		// begin add //
&lt;br&gt;-		float pan2 = 0.;
&lt;br&gt;-		float *out2;
&lt;br&gt;-
&lt;br&gt;-		GET_PAN_PARAMS
&lt;br&gt;-
&lt;br&gt;-		// end add //
&lt;br&gt;-		int32 thisfreq = grain-&amp;gt;freq;
&lt;br&gt;-		int32 oscphase = grain-&amp;gt;oscphase;
&lt;br&gt;-
&lt;br&gt;-		int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-			float outval = amp * lookupi1(table0, table1, oscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-			// begin change / add //
&lt;br&gt;-			out1[j] += outval * pan1;
&lt;br&gt;-			if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-			// end change //
&lt;br&gt;-
&lt;br&gt;-			CALC_NEXT_GRAIN_AMP
&lt;br&gt;-
&lt;br&gt;-			oscphase += thisfreq;
&lt;br&gt;-		}
&lt;br&gt;-
&lt;br&gt;-		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-		else
&lt;br&gt;-			++i;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;&amp;nbsp;	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;&amp;nbsp;		// start a grain
&lt;br&gt;@@ -938,10 +891,8 @@
&lt;br&gt;&amp;nbsp;	RTFree(unit-&amp;gt;mWorld, unit-&amp;gt;mGrains);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void GrainFM_next_a(GrainFM *unit, int inNumSamples)
&lt;br&gt;+inline void GrainFM_next_play_active(GrainFM *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-	//begin add
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;	// end add
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -990,7 +941,19 @@
&lt;br&gt;&amp;nbsp;		else
&lt;br&gt;&amp;nbsp;			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void GrainFM_next_a(GrainFM *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	GrainFM_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+
&lt;br&gt;+	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;+	float *table1 = table0 + 1;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;&amp;nbsp;		if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig[i] &amp;gt; 0.0)) {
&lt;br&gt;@@ -1067,56 +1030,13 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mGrains = (GrainFMG*)RTAlloc(unit-&amp;gt;mWorld, unit-&amp;gt;mMaxGrains * sizeof(GrainFMG));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	// begin add //
&lt;br&gt;+	GrainFM_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;-	// end add
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *table0 = ft-&amp;gt;mSineWavetable;
&lt;br&gt;&amp;nbsp;	float *table1 = table0 + 1;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;-		GrainFMG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;-		DECLARE_WINDOW
&lt;br&gt;-		GET_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		int32 mfreq = grain-&amp;gt;mfreq;
&lt;br&gt;-		int32 moscphase = grain-&amp;gt;moscphase;
&lt;br&gt;-		int32 coscphase = grain-&amp;gt;coscphase;
&lt;br&gt;-		float deviation = grain-&amp;gt;deviation;
&lt;br&gt;-		float carbase = grain-&amp;gt;carbase;
&lt;br&gt;-
&lt;br&gt;-		// begin add //
&lt;br&gt;-		float pan2;
&lt;br&gt;-		float *out2;
&lt;br&gt;-
&lt;br&gt;-		GET_PAN_PARAMS
&lt;br&gt;-
&lt;br&gt;-		// end add //
&lt;br&gt;-
&lt;br&gt;-		int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-		for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-			float thismod = lookupi1(table0, table1, moscphase, unit-&amp;gt;m_lomask) * deviation;
&lt;br&gt;-			float outval = amp * lookupi1(table0, table1, coscphase, unit-&amp;gt;m_lomask);
&lt;br&gt;-			// begin change / add //
&lt;br&gt;-			out1[j] += outval * pan1;
&lt;br&gt;-			if(numOutputs &amp;gt; 1) out2[j] += outval * pan2;
&lt;br&gt;-			// end change //
&lt;br&gt;-			CALC_NEXT_GRAIN_AMP
&lt;br&gt;-
&lt;br&gt;-			int32 cfreq = (int32)(unit-&amp;gt;m_cpstoinc * (carbase + thismod)); // needs to be calced in the loop!
&lt;br&gt;-			coscphase += cfreq;
&lt;br&gt;-			moscphase += mfreq;
&lt;br&gt;-		} // need to save float carbase, int32 mfreq, float deviation
&lt;br&gt;-		grain-&amp;gt;coscphase = coscphase;
&lt;br&gt;-		grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;-		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;-		else
&lt;br&gt;-			++i;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;&amp;nbsp;	if ((unit-&amp;gt;curtrig &amp;lt;= 0) &amp;&amp; (trig &amp;gt; 0.0)) {
&lt;br&gt;&amp;nbsp;		// start a grain
&lt;br&gt;@@ -1248,13 +1168,9 @@
&lt;br&gt;&amp;nbsp;		if(numOutputs &amp;gt; 1) out2[j] += outval * pan2; \
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-
&lt;br&gt;-void GrainBuf_next_a(GrainBuf *unit, int inNumSamples)
&lt;br&gt;+inline void GrainBuf_next_play_active(GrainBuf *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;-	//begin add
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;-	// end add
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;&amp;nbsp;	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;&amp;nbsp;	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;@@ -1307,12 +1223,25 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+void GrainBuf_next_a(GrainBuf *unit, int inNumSamples)
&lt;br&gt;+{
&lt;br&gt;+	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	GrainBuf_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;+	SETUP_GRAIN_OUTS
&lt;br&gt;+	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;+	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;+	uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;+
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;&amp;nbsp;	for (int i=0; i&amp;lt;inNumSamples; i++) {
&lt;br&gt;&amp;nbsp;		if ((trig[i] &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0)) {
&lt;br&gt;@@ -1406,70 +1335,15 @@
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mMaxGrains = (int)maxGrains;
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;mGrains = (GrainBufG*)RTAlloc(unit-&amp;gt;mWorld, unit-&amp;gt;mMaxGrains * sizeof(GrainBufG));
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;-	//begin add
&lt;br&gt;+
&lt;br&gt;+	GrainBuf_next_play_active(unit, inNumSamples);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;	SETUP_GRAIN_OUTS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	World *world = unit-&amp;gt;mWorld;
&lt;br&gt;&amp;nbsp;	SndBuf *bufs = world-&amp;gt;mSndBufs;
&lt;br&gt;&amp;nbsp;	//uint32 numBufs = world-&amp;gt;mNumSndBufs;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	for (int i=0; i &amp;lt; unit-&amp;gt;mNumActive; ) {
&lt;br&gt;-		GrainBufG *grain = unit-&amp;gt;mGrains + i;
&lt;br&gt;-		uint32 bufnum = grain-&amp;gt;bufnum;
&lt;br&gt;-
&lt;br&gt;-		GRAIN_BUF
&lt;br&gt;-		CHECK_BUF
&lt;br&gt;-
&lt;br&gt;-		if (bufChannels != 1) {
&lt;br&gt;-			 ++i;
&lt;br&gt;-			 continue;
&lt;br&gt;-		}
&lt;br&gt;-
&lt;br&gt;-		double loopMax = (double)bufFrames;
&lt;br&gt;-
&lt;br&gt;-		double rate = grain-&amp;gt;rate;
&lt;br&gt;-		double phase = grain-&amp;gt;phase;
&lt;br&gt;-
&lt;br&gt;-		DECLARE_WINDOW
&lt;br&gt;-		GET_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		// begin add //
&lt;br&gt;-		float pan2 = 0.f;
&lt;br&gt;-		float *out2;
&lt;br&gt;-		GET_PAN_PARAMS
&lt;br&gt;-		// end add //
&lt;br&gt;-
&lt;br&gt;-		int nsmps = sc_min(grain-&amp;gt;counter, inNumSamples);
&lt;br&gt;-		if (grain-&amp;gt;interp &amp;gt;= 4) {
&lt;br&gt;-			for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-				GRAIN_BUF_LOOP_BODY_4
&lt;br&gt;-				CALC_NEXT_GRAIN_AMP
&lt;br&gt;-				phase += rate;
&lt;br&gt;-			}
&lt;br&gt;-		} else if (grain-&amp;gt;interp &amp;gt;= 2) {
&lt;br&gt;-			for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-				GRAIN_BUF_LOOP_BODY_2
&lt;br&gt;-				CALC_NEXT_GRAIN_AMP
&lt;br&gt;-				phase += rate;
&lt;br&gt;-			}
&lt;br&gt;-		} else {
&lt;br&gt;-			for (int j=0; j&amp;lt;nsmps; ++j) {
&lt;br&gt;-				GRAIN_BUF_LOOP_BODY_1
&lt;br&gt;-				CALC_NEXT_GRAIN_AMP
&lt;br&gt;-				phase += rate;
&lt;br&gt;-			}
&lt;br&gt;-		}
&lt;br&gt;-
&lt;br&gt;-		grain-&amp;gt;phase = phase;
&lt;br&gt;-
&lt;br&gt;-		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;-	}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;&amp;nbsp;	if ((trig &amp;gt; 0) &amp;&amp; (unit-&amp;gt;curtrig &amp;lt;=0)) {
&lt;br&gt;&amp;nbsp;		// start a grain
&lt;br&gt;@@ -1611,6 +1485,7 @@
&lt;br&gt;&amp;nbsp;		float outval = amp * bufData[iphase + n]; \
&lt;br&gt;&amp;nbsp;		ZXP(out1) += outval; \
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;void Warp1_next(Warp1 *unit, int inNumSamples)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;	ClearUnitOutputs(unit, inNumSamples);
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9803-trunk-Source-plugins-GrainUGens-cpp-tp4535624p4535624.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535608</id>
	<title>SF.net SVN: supercollider:[9802] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:19:10Z</published>
	<updated>2010-02-08T09:19:10Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9802
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9802&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9802&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:19:10 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: some more style cleanups
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535608&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:17:52 UTC (rev 9801)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:19:10 UTC (rev 9802)
&lt;br&gt;@@ -590,10 +590,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;@@ -638,10 +636,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;@@ -682,10 +680,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -751,10 +747,10 @@
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;@@ -806,10 +802,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;@@ -862,10 +856,10 @@
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		grain-&amp;gt;oscphase = oscphase;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;@@ -914,10 +908,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -993,10 +985,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float *trig = IN(0);
&lt;br&gt;@@ -1056,13 +1048,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;-	unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;+		unit-&amp;gt;curtrig = trig[i];
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1121,10 +1111,10 @@
&lt;br&gt;&amp;nbsp;		grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;&amp;nbsp;		SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-		if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-			// remove grain
&lt;br&gt;-			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-		} else ++i;
&lt;br&gt;+		if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+			*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;+		else
&lt;br&gt;+			++i;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	float trig = IN0(0);
&lt;br&gt;@@ -1179,10 +1169,8 @@
&lt;br&gt;&amp;nbsp;				grain-&amp;gt;moscphase = moscphase;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -1400,10 +1388,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-					if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-						// remove grain
&lt;br&gt;-						*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-					}
&lt;br&gt;+					if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+						*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;@@ -1552,10 +1538,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;				SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-					// remove grain
&lt;br&gt;-					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive];
&lt;br&gt;-				}
&lt;br&gt;+				if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+					*grain = unit-&amp;gt;mGrains[--unit-&amp;gt;mNumActive]; // remove grain
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;@@ -1673,10 +1657,10 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;			grain-&amp;gt;phase = phase;
&lt;br&gt;&amp;nbsp;			SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-			if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-				// remove grain
&lt;br&gt;-				*grain = unit-&amp;gt;mGrains[n][--unit-&amp;gt;mNumActive[n]];
&lt;br&gt;-			} else ++i;
&lt;br&gt;+			if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+				*grain = unit-&amp;gt;mGrains[n][--unit-&amp;gt;mNumActive[n]]; // remove grain
&lt;br&gt;+			else
&lt;br&gt;+				++i;
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;		for (int i=0; i&amp;lt;inNumSamples; ++i) {
&lt;br&gt;@@ -1739,15 +1723,13 @@
&lt;br&gt;&amp;nbsp;					grain-&amp;gt;phase = phase;
&lt;br&gt;&amp;nbsp;					SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;&amp;nbsp;					// end change
&lt;br&gt;-					if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;-						// remove grain
&lt;br&gt;-						*grain = unit-&amp;gt;mGrains[n][--unit-&amp;gt;mNumActive[n]];
&lt;br&gt;-					}
&lt;br&gt;+					if (grain-&amp;gt;counter &amp;lt;= 0)
&lt;br&gt;+						*grain = unit-&amp;gt;mGrains[n][--unit-&amp;gt;mNumActive[n]]; // remove grain
&lt;br&gt;&amp;nbsp;				}
&lt;br&gt;&amp;nbsp;			}
&lt;br&gt;&amp;nbsp;		}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-	unit-&amp;gt;mNextGrain[n] = nextGrain;
&lt;br&gt;+		unit-&amp;gt;mNextGrain[n] = nextGrain;
&lt;br&gt;&amp;nbsp;	}
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9802-trunk-Source-plugins-GrainUGens-cpp-tp4535608p4535608.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535595</id>
	<title>SF.net SVN: supercollider:[9801] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:17:52Z</published>
	<updated>2010-02-08T09:17:52Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9801
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9801&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9801&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:17:52 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: don't copy rng data to local variables
&lt;br&gt;&lt;br&gt;the local variables wouldn't be located in registers anyway (checked
&lt;br&gt;for x86-64), since there is quite a number of local variables.
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535595&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:16:40 UTC (rev 9800)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:17:52 UTC (rev 9801)
&lt;br&gt;@@ -29,18 +29,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;#include &amp;quot;SC_PlugIn.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-// macros to put rgen state in registers
&lt;br&gt;-#define RGET \
&lt;br&gt;-	RGen&amp; rgen = *unit-&amp;gt;mParent-&amp;gt;mRGen; \
&lt;br&gt;-	uint32 s1 = rgen.s1; \
&lt;br&gt;-	uint32 s2 = rgen.s2; \
&lt;br&gt;-	uint32 s3 = rgen.s3;
&lt;br&gt;-
&lt;br&gt;-#define RPUT \
&lt;br&gt;-	rgen.s1 = s1; \
&lt;br&gt;-	rgen.s2 = s2; \
&lt;br&gt;-	rgen.s3 = s3;
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;static InterfaceTable *ft;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;const int kMaxGrains = 64;
&lt;br&gt;@@ -1706,11 +1694,9 @@
&lt;br&gt;&amp;nbsp;				WarpWinGrain *grain = unit-&amp;gt;mGrains[n] + unit-&amp;gt;mNumActive[n]++;
&lt;br&gt;&amp;nbsp;	//			grain-&amp;gt;bufnum = bufnum;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-				RGET
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;				float overlaps = GRAIN_IN_AT(unit, 5, i);
&lt;br&gt;&amp;nbsp;				float counter = GRAIN_IN_AT(unit, 3, i) * SAMPLERATE;
&lt;br&gt;-				double winrandamt = frand2(s1, s2, s3) * (double)GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;+				double winrandamt = unit-&amp;gt;mParent-&amp;gt;mRGen-&amp;gt;frand2() * (double)GRAIN_IN_AT(unit, 6, i);
&lt;br&gt;&amp;nbsp;				counter = sc_max(4., floor(counter + (counter * winrandamt)));
&lt;br&gt;&amp;nbsp;				grain-&amp;gt;counter = (int)counter;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1752,8 +1738,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;					grain-&amp;gt;phase = phase;
&lt;br&gt;&amp;nbsp;					SAVE_GRAIN_AMP_PARAMS
&lt;br&gt;-					// store random values
&lt;br&gt;-					RPUT
&lt;br&gt;&amp;nbsp;					// end change
&lt;br&gt;&amp;nbsp;					if (grain-&amp;gt;counter &amp;lt;= 0) {
&lt;br&gt;&amp;nbsp;						// remove grain
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9801-trunk-Source-plugins-GrainUGens-cpp-tp4535595p4535595.html" />
	
</entry>

<entry>
	<id>tag:n2.nabble.com,2006:post-4535591</id>
	<title>SF.net SVN: supercollider:[9800] trunk/Source/plugins/GrainUGens.cpp</title>
	<published>2010-02-08T09:16:43Z</published>
	<updated>2010-02-08T09:16:43Z</updated>
	<author>
		<name>timblech</name>
	</author>
	<content type="html">Revision: 9800
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://supercollider.svn.sourceforge.net/supercollider/?rev=9800&amp;view=rev&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://supercollider.svn.sourceforge.net/supercollider/?rev=9800&amp;view=rev&lt;/a&gt;&lt;br&gt;Author: &amp;nbsp; timblech
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; 2010-02-08 17:16:40 +0000 (Mon, 08 Feb 2010)
&lt;br&gt;&lt;br&gt;Log Message:
&lt;br&gt;-----------
&lt;br&gt;grain ugens: remove unused macros
&lt;br&gt;&lt;br&gt;Signed-off-by: Tim Blechmann &amp;lt;&lt;a href=&quot;http://n2.nabble.com/user/SendEmail.jtp?type=node&amp;node=4535591&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;[hidden email]&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Modified Paths:
&lt;br&gt;--------------
&lt;br&gt;&amp;nbsp; &amp;nbsp; trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;&lt;br&gt;Modified: trunk/Source/plugins/GrainUGens.cpp
&lt;br&gt;===================================================================
&lt;br&gt;--- trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:15:25 UTC (rev 9799)
&lt;br&gt;+++ trunk/Source/plugins/GrainUGens.cpp	2010-02-08 17:16:40 UTC (rev 9800)
&lt;br&gt;@@ -307,39 +307,6 @@
&lt;br&gt;&amp;nbsp;		}														\
&lt;br&gt;&amp;nbsp;		amp = lininterp(winFrac, winTable1[0], winTable2[0]);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#define GET_INTERP_GRAIN_WIN											\
&lt;br&gt;-		SndBuf *windowA = unit-&amp;gt;mWorld-&amp;gt;mSndBufs + (int)grain-&amp;gt;mWindowA; \
&lt;br&gt;-		float *windowDataA __attribute__((__unused__)) = windowA-&amp;gt;data;	\
&lt;br&gt;-		uint32 windowSamplesA __attribute__((__unused__)) = windowA-&amp;gt;samples; \
&lt;br&gt;-		uint32 windowFramesA = windowA-&amp;gt;frames;							\
&lt;br&gt;-		int windowGuardFrameA __attribute__((__unused__)) = windowFramesA - 1; \
&lt;br&gt;-		SndBuf *windowB = unit-&amp;gt;mWorld-&amp;gt;mSndBufs + (int)grain-&amp;gt;mWindowB; \
&lt;br&gt;-		float *windowDataB __attribute__((__unused__)) = windowB-&amp;gt;data;	\
&lt;br&gt;-		uint32 windowSamplesB __attribute__((__unused__)) = windowB-&amp;gt;samples; \
&lt;br&gt;-		uint32 windowFramesB = windowB-&amp;gt;frames;							\
&lt;br&gt;-		int windowGuardFrameB __attribute__((__unused__)) = windowFramesB - 1;
&lt;br&gt;-
&lt;br&gt;-#define BUF_INTERP_GRAIN_AMP											\
&lt;br&gt;-		winPosA += winIncA;												\
&lt;br&gt;-		int iWinPosA = (int)winPosA;									\
&lt;br&gt;-		double winFracA = winPosA - (double)iWinPosA;					\
&lt;br&gt;-		float* winTableA1 = windowDataA + iWinPosA;						\
&lt;br&gt;-		float* winTableA2 = winTableA1 + 1;								\
&lt;br&gt;-		if (winPosA &amp;gt; windowGuardFrameA) {								\
&lt;br&gt;-			winTableA2 -= windowSamplesA;								\
&lt;br&gt;-		}																\
&lt;br&gt;-		float ampA = lininterp(winFracA, winTableA1[0], winTableA2[0]);	\
&lt;br&gt;-		winPosB += winIncB;												\
&lt;br&gt;-		int iWinPosB = (int)winPosB;									\
&lt;br&gt;-		double winFracB = winPosB - (double)iWinPosB;					\
&lt;br&gt;-		float* winTableB1 = windowDataB + iWinPosB;						\
&lt;br&gt;-		float* winTableB2 = winTableB1 + 1;								\
&lt;br&gt;-		if (winPosB &amp;gt; windowGuardFrameB) {								\
&lt;br&gt;-			winTableB2 -= windowSamplesB;								\
&lt;br&gt;-		}																\
&lt;br&gt;-		float ampB = lininterp(winFracB, winTableB1[0], winTableB2[0]);	\
&lt;br&gt;-		amp = lininterp(grain-&amp;gt;ifac, ampA, ampB);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;#define BUF_GRAIN_LOOP_BODY_4										\
&lt;br&gt;&amp;nbsp;		phase = sc_gloop(phase, loopMax);							\
&lt;br&gt;&amp;nbsp;		int32 iphase = (int32)phase;								\
&lt;br&gt;&lt;br&gt;&lt;br&gt;This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;sc-dev mailing list
&lt;br&gt;&lt;br&gt;info (subscription, etc.): &lt;a href=&quot;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml&lt;/a&gt;&lt;br&gt;archive: &lt;a href=&quot;http://www.listarc.bham.ac.uk/marchives/sc-dev/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/marchives/sc-dev/&lt;/a&gt;&lt;br&gt;search: &lt;a href=&quot;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot; link=&quot;external&quot;&gt;http://www.listarc.bham.ac.uk/lists/sc-dev/search/&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://n2.nabble.com/SF-net-SVN-supercollider-9800-trunk-Source-plugins-GrainUGens-cpp-tp4535591p4535591.html" />
	
</entry>

</feed>
