[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] SF.net SVN: quarks:[2670] SpeakersCorner
- To: sc-dev@xxxxxxxxxxxxxxxx
- Subject: [sc-dev] SF.net SVN: quarks:[2670] SpeakersCorner
- From: decampo@xxxxxxxxxxxxxxxxxxxxx
- Date: Thu, 26 Dec 2013 11:52:51 +0000
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:Subject:To:From:MIME-Version:Date; bh=k0ybZvSZFMJrh4TXtpE8Qrc0zuU3DDM5wNOU5nMq+mE=; b=BSj3VLLYGWMhu0pT1hQaGFVcDJzpUiPuBU64Ajx0CFAF9quuiqrGi0ydhtUx5xcTOEvWS2LYDHkjvTg8RdWfKsKAfF4CRc0PzQEyJ788rvlzIU3FkA8orcIJbFuSjHCcY/WYB5MQI46qYtw9UtJaNOKleOlpnER5BZTsMP/eH6U=;
- Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x; h=Content-Transfer-Encoding:Content-Type:Subject:To:From:MIME-Version:Date; bh=k0ybZvSZFMJrh4TXtpE8Qrc0zuU3DDM5wNOU5nMq+mE=; b=jxDhdJ5Bt5P9WCPweFehVYLFr8vqiZPAut3LADKT/HUwlc0t7a3WlYDeVAibni9C1wZ38c641kUoIDKv9pRd/w8pb9D8JuC1KghYeu2X1+8L9sx6yO3G2oDYyNAcYHSBYxtgWlmaZhAC1SerVhww11sPyvdWkZU4l5mna8R7fgE=;
- List-id: SuperCollider developers mailing list <sc-devel.create.ucsb.edu>
- Reply-to: sc-dev@xxxxxxxxxxxxxxxx
- Sender: owner-sc-dev@xxxxxxxxxxxxxxxx
Revision: 2670
http://sourceforge.net/p/quarks/code/2670
Author: decampo
Date: 2013-12-26 11:52:50 +0000 (Thu, 26 Dec 2013)
Log Message:
-----------
remove relocated
Removed Paths:
-------------
SpeakersCorner/Latency.html
SpeakersCorner/Latency.sc
SpeakersCorner/MasterFX.html
SpeakersCorner/MasterFX.sc
SpeakersCorner/Panning/PanRingTop.html
SpeakersCorner/Panning/PanRingTop.sc
SpeakersCorner/Panning/PanRingTopBot.html
SpeakersCorner/Panning/TorusPanAz.html
SpeakersCorner/Panning/TorusPanAz.sc
SpeakersCorner/SpatioScope.html
SpeakersCorner/SpatioScope.sc
SpeakersCorner/SpeakerAdjust.html
SpeakersCorner/SpeakerAdjust.sc
SpeakersCorner/SpeakersCorner.html
SpeakersCorner/Spectralyzer.html
SpeakersCorner/Spectralyzer.sc
SpeakersCorner/asMapTable.html
SpeakersCorner/extMapTable.sc
Deleted: SpeakersCorner/Latency.html
===================================================================
--- SpeakersCorner/Latency.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Latency.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,96 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; min-height: 14.0px}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000; min-height: 14.0px}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #000000}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #bf0000}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #862323; min-height: 14.0px}
-p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Monaco; color: #862323}
-span.s1 {font: 18.0px Helvetica}
-span.s2 {color: #000000}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><span class="s1"><b>Latency</b></span><b><span class="Apple-tab-span"> </span>measure audio delays for multiple channels</b></p>
-<p class="p2"><br></p>
-<p class="p1">Latency is the time delay between when one initiates something and when it happens.</p>
-<p class="p1">There are several places in the SC architecture where latencies occur:<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p1"><b>1. Interpreter latency:<span class="Apple-converted-space"> </span></b></p>
-<p class="p1">the time between entering a command and the time it is executed in the client (sclang).<span class="Apple-converted-space"> </span></p>
-<p class="p1">This depends on how much code it is and how complex the calculations are.</p>
-<p class="p1">For many cases, it is near zero.<span class="Apple-converted-space"> </span></p>
-<p class="p3"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>// a function that does nothing runs really fast</p>
-<p class="p4">bench({ nil });<span class="Apple-tab-span"> </span></p>
-<p class="p5"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>// filling a big array with random numbers takes a while longer.</p>
-<p class="p4">bench({ Array.rand(100000, 0.0, 1.0) });<span class="Apple-tab-span"> </span></p>
-<p class="p5"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>// different operations may take different times</p>
-<p class="p4">bench({ 1000000.do { 3.sqrt.cos } });<span class="Apple-converted-space"> </span></p>
-<p class="p4">bench({ 1000000.do { 12.squared } });<span class="Apple-converted-space"> </span></p>
-<p class="p5"><br></p>
-<p class="p3"><br></p>
-<p class="p1"><b>2. Network latency:<span class="Apple-converted-space"> </span></b></p>
-<p class="p1">sclang and scserver communicate via network (OpenSoundControl, usually UDP, or also TCP/IP);<span class="Apple-converted-space"> </span></p>
-<p class="p1">until a network packet sent from sclang to the server arrives, an undetermined time passes.<span class="Apple-converted-space"> </span></p>
-<p class="p1">On the same machine, with little other network traffic, this is typically ca. 0.02 seconds, depending mainly<span class="Apple-converted-space"> </span></p>
-<p class="p1">on the server's hardware buffer size.<span class="Apple-converted-space"> </span>This can be measured with:</p>
-<p class="p6"><br></p>
-<p class="p7">s.boot;</p>
-<p class="p7">s.ping(10, 0.1);</p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>// compare</p>
-<p class="p7">s.options.hardwareBufferSize;<span class="Apple-converted-space"> </span></p>
-<p class="p7">s.options.hardwareBufferSize / s.sampleRate</p>
-<p class="p2"><br></p>
-<p class="p1">The order in which packets arrive is not guaranteed, so in the worst case, one can end up sending a command to start a synth process, then set one of its controls to some value; if the order is accidentally reversed, trying to set e.g. frequency on a node which does not exist yet - which will complain (server - Node not found), and then start that node playing at the wrong pitch and staying there forever (because the failed command has happened already).<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p1">Therefore, one usually sets a latency value for the server, which is safely greater than the worst value measured/estimated (e.g. with s.ping). The default for this is 0.2 sec.<span class="Apple-converted-space"> </span></p>
-<p class="p3"><br></p>
-<p class="p9">s.latency;</p>
-<p class="p3"><br></p>
-<p class="p1"><b>3. Audio I/O latency :<span class="Apple-converted-space"> </span></b></p>
-<p class="p1">scsynth passes buffers (one block of numbers per channel) to the audio hardware;<span class="Apple-converted-space"> </span></p>
-<p class="p1">the size of these buffers determines the time it takes between when a synth starts<span class="Apple-converted-space"> </span></p>
-<p class="p1">internally and when it actually is heard.<span class="Apple-converted-space"> </span></p>
-<p class="p1">The same goes for audio input too: input signals are passed to SC as blocks,<span class="Apple-converted-space"> </span></p>
-<p class="p1">so there is some latency between when e.g. a trigger happens at the analog audio input,<span class="Apple-converted-space"> </span></p>
-<p class="p1">and when it is detected with e.g. a Trig Ugen.</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p1">While this latency can be set directly with some utility software for audiocards,<span class="Apple-converted-space"> </span></p>
-<p class="p1">such software may not consider all the factors:<span class="Apple-converted-space"> </span></p>
-<p class="p1">E.g. the operating system itself, firewire or USB connections, and intermediate layers<span class="Apple-converted-space"> </span></p>
-<p class="p1">like Jack may introduce extra buffering and thus extra delay somewhere along the line.</p>
-<p class="p1">For multiple speaker setups, distances to the listening position may also introduce delays.<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p1">So it makes sense to measure audio latency. The *testAudio method generates pulses<span class="Apple-converted-space"> </span></p>
-<p class="p1">on several output channels and measures time until each pulse registers again at an audio input.</p>
-<p class="p10"><br></p>
-<p class="p11">Latency.initClass;<span class="Apple-converted-space"> </span></p>
-<p class="p10"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*testAudio(numChans, maxDT, server, inChan)</b></p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>numChans</b>: <span class="Apple-tab-span"> </span>the number of audio channels to be measured</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>maxDT</b>: <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the longest expected delay time to be measured</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>server</b>: <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the server to be generating the test sound on</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>inChan</b>: <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the input channel where the returning audio signal comes in,<span class="Apple-converted-space"> </span></p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>typically, the mic input.</p>
-<p class="p11">Latency.testAudio;</p>
-<p class="p10"><br></p>
-<p class="p11">s.scope;</p>
-</body>
-</html>
Deleted: SpeakersCorner/Latency.sc
===================================================================
--- SpeakersCorner/Latency.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Latency.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,70 +0,0 @@
-/*
- Latency.testAudio(2, 1);
- Latency.stop;
-*/
-
-Latency {
- classvar <syn, <resp, <latencies, <serv, lastTime;
- classvar <>verbose = false;
-
- *initClass {
- Class.initClassTree(OSCresponderNode);
-
- // register to receive latency values
- resp = OSCresponderNode(nil,'/tr',{ arg time,responder,msg;
- var which = msg[2], exactTime = msg[3], delta;
-
- if ( verbose ) { msg.postln; };
- // msg.postcs;
- // [exactTime, which].dump;
- if ( syn.notNil ){
- // make sure we only listen to the trigger coming from the latency measurement synth
- if ( msg[1] == syn.nodeID ){
- [ { delta = (exactTime - lastTime[1]);
- [lastTime[0], delta, delta / serv.sampleRate].postln;
- latencies[lastTime[0] - 1] = delta;
- },
- { lastTime = [which, exactTime] }
- ].clipAt(which).value;
- };
- };
- });
- }
-
- *testAudio { |numChans=5, maxDT = 0.2, server, inChan=0|
- serv = server ? Server.default;
- latencies = Array.newClear(numChans);
- resp.remove;
- resp.add;
- syn = { var pulses, audIn, phase;
- var pulseFreq = (maxDT * 2 * numChans).reciprocal;
- pulseFreq;
-
- phase = Phasor.ar(0, 1, 0, 2 ** 30); // time in samples
- audIn = SoundIn.ar(inChan); // mike input
-
- pulses = Decay2.ar(
- Impulse.ar( pulseFreq,
- 0.99 - ((0..numChans - 1) / numChans) // phase
- ), 0.0, 0.002
- );
- // send when audioin triggers
- SendTrig.ar( Trig1.ar(audIn > 0.1, 0.05), 0, phase);
- // send when each output plays a trigger
- SendTrig.ar(pulses > 0.1, (1..numChans), phase);
- (pulses ++ [ Silent.ar, audIn ])
- }.play(serv);
- }
-
- *stop {
- resp.remove;
- syn.free;
- this.post;
- }
-
- *post {
- "// measured latencies:".postln;
- "in samples: ".post; latencies.postcs;
- "in seconds: ".post; (latencies / serv.sampleRate).postcs;
- }
-}
\ No newline at end of file
Deleted: SpeakersCorner/MasterFX.html
===================================================================
--- SpeakersCorner/MasterFX.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/MasterFX.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="1038.29">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #862323}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0023b6}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #4d6d13}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #1c23b6; min-height: 12.0px}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0023b6; min-height: 12.0px}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #007300}
-span.s1 {font: 18.0px Helvetica}
-span.s2 {font: 9.0px Monaco}
-span.s3 {color: #0023b6}
-span.s4 {color: #000000}
-span.s5 {color: #4d6d13}
-span.s6 {color: #1936a7}
-span.s7 {color: #0000bf}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><span class="s1"><b>MasterFX</b></span><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><b>a highly configurable chain of effects on the main outputs</b></p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>see also: </b><span class="s3"><b>ProxyChain</b></span><b><span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><br></p>
-<p class="p4">(</p>
-<p class="p4">s.boot;</p>
-<p class="p3"><br></p>
-<p class="p5"><span class="s4"><span class="Apple-tab-span"> </span></span>// add a few global filter functions to use - these are then available by name.</p>
-<p class="p6">ProxyChain<span class="s4">.add(</span></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="s5">\leakDC</span>,<span class="Apple-converted-space"> </span><span class="s5">\filter</span> -> { <span class="s3">|in, leak=0.99|</span> <span class="s3">LeakDC</span>.ar(in, leak) },</p>
-<p class="p6"><span class="s4"><span class="Apple-tab-span"> </span></span><span class="s5">\rollClip</span><span class="s4">, </span><span class="s5">\filter</span><span class="s4"> -> { </span>|in, clip=0.99, pole=0.2|</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">OnePole</span>.ar(in.clip2(clip), pole ** 0.7);</p>
-<p class="p4"><span class="Apple-tab-span"> </span>},</p>
-<p class="p6"><span class="s4"><span class="Apple-tab-span"> </span></span><span class="s5">\krush</span><span class="s4">, </span><span class="s5">\filter</span><span class="s4"> -> { </span>|in, bits=16, downsamp=2|<span class="s4"><span class="Apple-converted-space"> </span></span></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">var</span> down;</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>in = in.round(0.5 ** bits);</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>down = <span class="s3">Latch</span>.ar(in, <span class="s3">Impulse</span>.ar(<span class="s3">SampleRate</span>.ir / downsamp.max(2)));<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="s4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// below 1/2 downsamp, do xfade:</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>blend(in, down, (downsamp - 1).clip(0, 1));</p>
-<p class="p4"><span class="Apple-tab-span"> </span>},</p>
-<p class="p6"><span class="s4"><span class="Apple-tab-span"> </span></span><span class="s5">\ampFin</span><span class="s4">, </span><span class="s5">\filter</span><span class="s4"> -> { </span>|in, limDrive=1, ampLimit=0.8, postAmp=1 |<span class="s4"><span class="Apple-converted-space"> </span></span></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s3">Limiter</span>.ar(in * limDrive, ampLimit) * <span class="s3">postAmp</span>;</p>
-<p class="p4"><span class="Apple-tab-span"> </span>}</p>
-<p class="p4">);</p>
-<p class="p5"><span class="s4"><span class="Apple-tab-span"> </span></span>// and specs for them fof gui control.</p>
-<p class="p4"><span class="s3">Spec</span>.add(<span class="s5">\leak</span>, [0.5, 0.999, <span class="s5">\exp</span>]);</p>
-<p class="p4"><span class="s3">Spec</span>.add(<span class="s5">\clip</span>, [0.0, 1, <span class="s5">\amp</span>]);</p>
-<p class="p4"><span class="s3">Spec</span>.add(<span class="s5">\pole</span>, [0, 0.95, <span class="s5">\lin</span>]);</p>
-<p class="p3"><br></p>
-<p class="p4"><span class="s3">Spec</span>.add(<span class="s5">\bits</span>, [16, 1]);</p>
-<p class="p4"><span class="s3">Spec</span>.add(<span class="s5">\downsamp</span>, [1, 100, <span class="s5">\exp</span>]);</p>
-<p class="p3"><br></p>
-<p class="p7"><span class="s3">Spec</span><span class="s4">.add(</span>\limDrive<span class="s4">, </span>\ampx4<span class="s4">);</span></p>
-<p class="p7"><span class="s3">Spec</span><span class="s4">.add(</span>\ampLimit<span class="s4">, </span>\amp<span class="s4">);</span></p>
-<p class="p6">Spec<span class="s4">.add(</span><span class="s5">\</span>postAmp<span class="s4">, </span><span class="s5">\ampx4</span><span class="s4">);</span></p>
-<p class="p4">)</p>
-<p class="p3"><br></p>
-<p class="p3"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*new(server, numChannels, slotNames, busnum)<span class="Apple-converted-space"> </span></b></p>
-<p class="p2"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>server: <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the server on which the <span class="s3">MasterFX</span> chain will run;</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>numChannels: <span class="Apple-tab-span"> </span>the number of channels it will work on,<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>default is server.numOutputBusChannels</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>slotNames: <span class="Apple-tab-span"> </span>the names of the filters/functions to be used, in order of execution;</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>busnum: <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the busnumber where it will process audio, default = 0.</p>
-<p class="p3"><br></p>
-<p class="p4">(</p>
-<p class="p4">m = <span class="s3">MasterFX</span>.new(server: s,<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>numChannels: 8,<span class="Apple-converted-space"> </span></p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span>slotNames: [</span>\leakDC<span class="s4">, </span>\krush<span class="s4">, </span>\rollClip<span class="s4">, </span>\ampFin<span class="s4">],<span class="Apple-converted-space"> </span></span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>busIndex: 0);</p>
-<p class="p8"><br></p>
-<p class="p4">g = m.gui;</p>
-<p class="p4">)</p>
-<p class="p3"><br></p>
-<p class="p4">{ <span class="s6">PinkNoise</span>.ar(0.5) * LFNoise2.kr([5, 8, 13, 21]).max(0); }.play;</p>
-<p class="p4">s.scope(8);</p>
-<p class="p3"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>// kick the effects in at full wet level</p>
-<p class="p4">m.pxChain.add(<span class="s5">\leakDC</span>, 1);</p>
-<p class="p4">m.pxChain.add(<span class="s5">\rollClip</span>, 1);</p>
-<p class="p4">m.pxChain.add(<span class="s5">\dualComp</span>, 1);</p>
-<p class="p4">m.pxChain.add(<span class="s5">\ampFin</span>, 1);</p>
-<p class="p3"><br></p>
-<p class="p4"><span class="Apple-tab-span"> </span>// make a more specific gui - see also ProxyChainGui</p>
-<p class="p4">(</p>
-<p class="p4">m.gui(<span class="s5">\Mestre</span>, 20, [</p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span>[</span>\leakDC<span class="s4">, </span>\slotCtl<span class="s4">, 1],</span></p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span>[</span>\rollClip<span class="s4">, </span>\slotCtl<span class="s4">, 1],</span></p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span>[</span>\krush<span class="s4">, </span>\slotCtl<span class="s4">, 1],</span></p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span>[</span>\ampFin<span class="s4">, </span>\slotCtl<span class="s4">, 1],</span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>[<span class="s5">\RESET</span>, <span class="s5">\extra</span>, { m.pxChain.add(<span class="s5">\leakDC</span>, 1).add(<span class="s5">\ampFin</span>, 1) }],</p>
-<p class="p4">])</p>
-<p class="p4">)</p>
-<p class="p3"><br></p>
-<p class="p4">m.pxChain.remove(<span class="s5">\leakDC</span>, 1);</p>
-<p class="p4">m.pxChain.remove(<span class="s5">\rollClip</span>, 1);</p>
-<p class="p4">m.pxChain.remove(<span class="s5">\krush</span>);</p>
-<p class="p4">m.pxChain.remove(<span class="s5">\ampFin</span>, 1);</p>
-<p class="p3"><br></p>
-<p class="p3"><br></p>
-<p class="p3"><br></p>
-<p class="p5"><span class="s4"><span class="Apple-tab-span"> </span></span>// removing a MasterFX<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="s3">MasterFX</span><span class="s4">.all;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// all masterFX, one per server, live here.</p>
-<p class="p5"><span class="s3">MasterFX</span><span class="s4">.clear(</span><span class="s5">\localhost</span><span class="s4">); <span class="Apple-tab-span"> </span></span>// clear one specific masterfx</p>
-<p class="p5"><span class="s3">MasterFX</span><span class="s4">.all;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// gone now.</p>
-<p class="p3"><br></p>
-<p class="p7"><span class="s3">MasterFX</span><span class="s4">(</span><span class="s3">Server</span><span class="s4">.internal, 8, [</span>\leakDC<span class="s4">, </span>\rollClip<span class="s4">, </span>\dualComp<span class="s4">, </span>\ampFin<span class="s4">]);</span></p>
-<p class="p6">MasterFX<span class="s4">.all;</span></p>
-<p class="p5"><span class="s3">MasterFX</span><span class="s4">.clear; <span class="Apple-tab-span"> </span></span>// clear all mfxes</p>
-<p class="p6">MasterFX<span class="s4">.all;</span></p>
-<p class="p3"><br></p>
-<p class="p3"><br></p>
-<p class="p4">p = <span class="s3">ProxySpace</span>.push;</p>
-<p class="p4">~pink = { <span class="s3">PinkNoise</span>.ar * <span class="s3">SinOsc</span>.ar };</p>
-<p class="p4">~pink.play;</p>
-<p class="p6">ProxyMixer<span class="s4">(p);</span></p>
-<p class="p9"><br></p>
-<p class="p9"><br></p>
-<p class="p10"><span class="s4">z = </span><span class="s7">MasterFX</span><span class="s4">(s, 8, [</span>\leakDC<span class="s4">, </span>\rollClip<span class="s4">, </span>\dualComp<span class="s4">, </span>\ampFin<span class="s4">]);</span></p>
-<p class="p4">z.gui;</p>
-<p class="p3"><br></p>
-<p class="p3"><br></p>
-<p class="p4">ToDo:<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>maybe at some point one will want separate MasterFX for different output groups<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>on the same server. in that case, remove storage by server name, and use freely<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>given names.<span class="Apple-converted-space"> </span></p>
-</body>
-</html>
Deleted: SpeakersCorner/MasterFX.sc
===================================================================
--- SpeakersCorner/MasterFX.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/MasterFX.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,137 +0,0 @@
-MasterFX {
-
- classvar <all, <maxNumChans = 8;
- var <group, <numChannels, <busIndex, <server, <pxChain;
- var <checkingBadValues = true, <badSynth, badDefName;
-
- *initClass {
- all = IdentityDictionary.new;
- }
-
- *new { |server, numChannels, slotNames, busIndex=0|
- // only one masterfx per server ATM.
- // could be changed if different MasterFX
- // for different outchannel groups are to be used.
-
- var fx = all[server.name];
- if (fx.notNil) {
- "// MasterFX for server % exists - use \nMasterFX.clear(%) \n// to make a new one.\n"
- .postf(server.name, server.name.asCompileString);
- ^fx
- } {
- ^this.make(server, numChannels, slotNames, busIndex)
- }
- }
-
- *make { |server, numChannels, slotNames|
- ^super.new.init(server, numChannels, slotNames);
- }
-
- add { |key, wet, func|
- pxChain.add(key, wet, func);
- }
- remove { |key|
- pxChain.remove(key);
- }
-
- bus {
- ^Bus.new(\audio, busIndex, numChannels, server);
- }
-
-
- cmdPeriod {
- group.freeAll; // for SharedServers
- // evil just to wait? hmmm.
- defer({ this.wakeUp }, 0.2);
- }
-
- hide {
- Ndef.all[server.name].envir.removeAt(pxChain.proxy.key);
- }
- // maybe it is useful to see it under some circumstances
- show {
- Ndef.all[server.name].envir.put(pxChain.proxy.key, pxChain.proxy);
- }
-
- init { |inServer, inNumChannels, inSlotNames, inBusIndex|
- var proxy;
- server = inServer ? Server.default;
- numChannels = inNumChannels ? server.options.numOutputBusChannels;
- busIndex = inBusIndex ? 0;
-
- proxy = Ndef(\zz_mastafx -> server.name);
- proxy.ar(numChannels);
- proxy.bus_(this.bus);
- pxChain = ProxyChain.from(proxy, inSlotNames ? []);
-
- this.hide; // hide by default
-
- all.put(server.name, this);
-
- this.makeGroup;
- CmdPeriod.add(this);
-
- badDefName = ("BadMasterFX_" ++ server.name).asSymbol;
- SynthDef(badDefName, {
- var snd = In.ar(busIndex, numChannels);
- var dt = 0.001;
- var isOK = (CheckBadValues.ar(snd) < 0.001);
- var gate = (isOK * DelayN.ar(isOK, dt * 2));
- var outSnd = DelayL.ar(snd, dt) * gate;
- ReplaceOut.ar(busIndex, outSnd)
- }).add;
-
- fork {
- 0.2.wait;
- this.checkBad(checkingBadValues);
- };
- }
-
- makeGroup {
- group = Group.new(1.asGroup, \addAfter).isPlaying_(true);
- pxChain.proxy.parentGroup_(group);
- }
-
- wakeUp {
- "\nMasterFX for server % waking up.\n\n".postf(server.name);
- this.makeGroup;
- pxChain.proxy.wakeUp;
- this.checkBad;
- }
-
- clear {
- CmdPeriod.remove(this);
- pxChain.proxy.clear;
- all.removeAt(pxChain.proxy.server.name);
- }
-
- *clear { |name|
- (name ?? { all.keys }).do { |name|
- all.removeAt(name).clear;
- };
- }
-
- makeName {
- ^(this.class.name ++ "_" ++ server.name
- ++ "_" ++ pxChain.proxy.numChannels).asSymbol
- }
-
- gui { |name, numItems, buttonList, parent, bounds, makeSkip = true|
- // the effects are all on by default:
- buttonList = buttonList ?? { pxChain.slotNames.collect ([_, \slotCtl, 1]) };
- name = name ?? { this.makeName };
- numItems = numItems ? 16;
- ^MasterFXGui(pxChain, numItems, parent, bounds, makeSkip, buttonList)
- .name_(name);
- }
-
- checkBad { |flag = true|
- checkingBadValues = flag;
- badSynth.free;
- if (checkingBadValues) {
- badSynth = Synth(badDefName, target: group, addAction: \addAfter);
- };
- }
-
- *default { ^all[Server.default.name] }
-}
\ No newline at end of file
Deleted: SpeakersCorner/Panning/PanRingTop.html
===================================================================
--- SpeakersCorner/Panning/PanRingTop.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Panning/PanRingTop.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,60 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616; min-height: 12.0px}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-span.s1 {font: 9.0px Monaco}
-span.s2 {font: 9.0px Monaco; color: #a91616}
-span.s3 {color: #0000bf}
-span.s4 {color: #000000}
-span.s5 {color: #007300}
-span.s6 {color: #bf0000}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>PanRingTop</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>a panner for a ring with one speaker on top.<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><b>see also PanRingTopBot, TorusPanAz.</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*ar(numChans, in, azi, elev, orientation)</b></p>
-<p class="p3"><span class="s1"><span class="Apple-tab-span"> </span></span><b>numChans<span class="Apple-tab-span"> </span></b>number of channels in the ring</p>
-<p class="p3"><span class="s2"><span class="Apple-tab-span"> </span></span><b>in<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>input signal to pan</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>azi<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>azimuth, angle in the horizontal ring; from 0 to 2, wraps around.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>elev<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>height above the horizon, toward top speaker; 0 is ring, 1 is top.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>orientation<span class="Apple-tab-span"> </span></b>direction of azimuth 0: orientation 0 means azi 0 is on chan0,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>orientation 0.5 means azi 0 is between chan0 and chan1.</p>
-<p class="p4"><br></p>
-<p class="p3">The order of the returned channels is: ring1, ring2 ... ringN, top.</p>
-<p class="p5"><br></p>
-<p class="p6"><span class="s3">Server</span>.internal.boot;<span class="Apple-converted-space"> </span></p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s4"><span class="Apple-tab-span"> </span></span>// orientation defaults to 0.5, between first 2 chans.</p>
-<p class="p6">z = { <span class="s3">|azi=0, elev=0|</span> <span class="s3">PanRingTop</span>.ar(4, <span class="s3">Dust</span>.ar(1000, 0.5), azi, elev).postln }.scope;</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p6">z.set(<span class="s5">\azi</span>, -0.25);<span class="Apple-tab-span"> </span><span class="s6">// chan 0</span></p>
-<p class="p6">z.set(<span class="s5">\azi</span>, 0.25);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 1</span></p>
-<p class="p6">z.set(<span class="s5">\azi</span>, 0.75);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 2</span></p>
-<p class="p6">z.set(<span class="s5">\azi</span>, 1.25);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 3</span></p>
-<p class="p8"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, 0.5);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// halfway up to chan 5, top.</p>
-<p class="p8"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, 1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// chan 5 - last chan is top.</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">// could also be done with TorusPanAz now.</p>
-</body>
-</html>
Deleted: SpeakersCorner/Panning/PanRingTop.sc
===================================================================
--- SpeakersCorner/Panning/PanRingTop.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Panning/PanRingTop.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,44 +0,0 @@
-PanRingTop : MultiOutUGen {
- *ar {|numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- ^[numChans, in, azi, elev, orientation ].flop.collect({ |inputs|
- this.ar1(*inputs)
- }).unbubble;
- }
- *ar1 { |numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- var down, up; #down, up = Pan2.ar(in, (elev * 2 - 1).clip(-1, 1));
- ^PanAz.ar(numChans, down, azi) ++ [ up ];
- }
- *kr {|numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- ^[numChans, in, azi, elev, orientation ].flop.collect({ |inputs|
- this.kr1(*inputs)
- }).unbubble;
- }
- *kr1 { |numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- var down, up; #down, up = Pan2.kr(in, (elev * 2 - 1).clip(-1, 1));
- ^PanAz.kr(numChans, down, azi) ++ [ up ];
- }
-}
- // 1 top and 1 bottom speaker,
- // positions azi wraps, elev clips.
-PanRingTopBot : MultiOutUGen {
- *ar {|numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- ^[numChans, in, azi, elev, orientation ].flop.collect({ |inputs|
- this.ar1(*inputs)
- }).unbubble;
- }
- *ar1 { |numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- var down, ring, up;
- #down, ring, up = PanAz.ar(3, in, elev.clip(-1, 1) * 2/3, orientation: 1);
- ^PanAz.ar(numChans, ring, azi) ++ [up, down];
- }
- *kr {|numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- ^[numChans, in, azi, elev, orientation ].flop.collect({ |inputs|
- this.kr1(*inputs)
- }).unbubble;
- }
- *kr1 { |numChans=4, in, azi=0.0, elev=0.0, orientation=0.5|
- var down, ring, up;
- #down, ring, up = PanAz.kr(3, in, elev.clip(-1, 1) * 2/3, orientation: 1);
- ^PanAz.kr(numChans, ring, azi) ++ [up, down];
- }
-}
\ No newline at end of file
Deleted: SpeakersCorner/Panning/PanRingTopBot.html
===================================================================
--- SpeakersCorner/Panning/PanRingTopBot.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Panning/PanRingTopBot.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,80 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-span.s1 {font: 9.0px Monaco}
-span.s2 {font: 9.0px Monaco; color: #a91616}
-span.s3 {color: #0000bf}
-span.s4 {color: #000000}
-span.s5 {color: #007300}
-span.s6 {color: #bf0000}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>PanRingTopBot</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>a panner for a ring with one speaker on top, and one on the bottom.</b></p>
-<p class="p3"><b>see also PanRingTop, TorusPanAz.</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*ar(numChans, in, azi, elev, orientation)</b></p>
-<p class="p3"><span class="s1"><span class="Apple-tab-span"> </span></span><b>numChans<span class="Apple-tab-span"> </span></b>number of channels in the ring</p>
-<p class="p3"><span class="s2"><span class="Apple-tab-span"> </span></span><b>in<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>input signal to pan</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>azi<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>azimuth, angle in the horizontal ring; from 0 to 2, wraps around.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>elev<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>height above the horizon, toward top speaker; 0 is ring, 1 is top, -1 is bottom.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>orientation<span class="Apple-tab-span"> </span></b>direction of azimuth 0: orientation 0 means azi 0 is on chan0,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>orientation 0.5 means azi 0 is between chan0 and chan1.</p>
-<p class="p4"><br></p>
-<p class="p3">The order of the returned channels is: ring1, ring2 ... ringN, top, bottom.</p>
-<p class="p4"><br></p>
-<p class="p2"><br></p>
-<p class="p5"><span class="s3">Server</span>.internal.boot;<span class="Apple-converted-space"> </span></p>
-<p class="p6"><br></p>
-<p class="p7"><span class="s4"><span class="Apple-tab-span"> </span></span>// orientation defaults to 0.5, between first 2 chans.</p>
-<p class="p5">z = { <span class="s3">|azi=0, elev=0|</span> <span class="s3">PanRingTopBot</span>.ar(4, <span class="s3">Dust</span>.ar(1000, 0.5), azi, elev) }.scope;</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, -0.25);<span class="Apple-tab-span"> </span><span class="s6">// chan 1</span></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, 0.25);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 2</span></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, 0.75);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 3</span></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, 1.25);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 4</span></p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, 0.5);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// halfway up to top chan (here chan 5).</p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, 1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// pan all the way to top chan.</p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, -0.5);<span class="Apple-tab-span"> </span></span>// halfway down to bottom (here chan 6).</p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, -1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// pan fully to to bottom chan.</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p7">// The bottom speaker can also be virtual, and mixed to the ring speakers:</p>
-<p class="p5">(</p>
-<p class="p5">z = { <span class="s3">|azi=0, elev=0|</span> <span class="s3">var</span> all, ring, top, bot;<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>all = <span class="s3">PanRingTopBot</span>.ar(6, <span class="s3">Dust</span>.ar(1000, 0.5), azi, elev);<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>ring = all.keep(6);<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>top = all[6];<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>bot = all[7];<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>(ring + (bot * (1/6))) ++ top;</p>
-<p class="p5">}.scope;</p>
-<p class="p5">)</p>
-<p class="p6"><br></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, -0.17);<span class="Apple-tab-span"> </span><span class="s6">// chan 1</span></p>
-<p class="p5">z.set(<span class="s5">\azi</span>, 0.5);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// chan 3</span></p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, 1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// pan all the way to top chan.</p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, -0.5);<span class="Apple-tab-span"> </span></span>// bottom is added to ring of 6.</p>
-<p class="p7"><span class="s4">z.set(</span><span class="s5">\elev</span><span class="s4">, -1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// fully down is now evenly on all ring speakers.</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p7">// could also be done with TorusPanAz now.</p>
-</body>
-</html>
Deleted: SpeakersCorner/Panning/TorusPanAz.html
===================================================================
--- SpeakersCorner/Panning/TorusPanAz.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Panning/TorusPanAz.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0014bc; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0000bf}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-span.s1 {color: #0000bf}
-span.s2 {color: #000000}
-span.s3 {color: #007300}
-span.s4 {color: #bf0000}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>TorusPanAz</b></p>
-<p class="p2"><br></p>
-<p class="p3">a panner for toroidal shaped setups. Can also be used for<span class="Apple-converted-space"> </span></p>
-<p class="p3">cylinders where panning beyond the top wraps back into<span class="Apple-converted-space"> </span></p>
-<p class="p3">the bottom.<span class="Apple-converted-space"> </span></p>
-<p class="p4"><br></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*ar(numSpeakers, in, hPos, vPos, level, hWidth, vWidth)</b></p>
-<p class="p4"><b><span class="Apple-tab-span"> </span></b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>numSpeakers <span class="Apple-tab-span"> </span></b>number of speakers per ring, default is #[ 16, 12, 8, 4 ]</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>in<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>the input signal to pan</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>hPos <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>horizontal position, default is 0 (first speaker in ring)</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>vPos<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>vertical position, default is 0 (bottom ring)</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>level<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>amplitude control, kr (default 1)</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>hWidth <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>horizontal width, max number of speakers that sound together (default 2)</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>vWidth<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>vertical width, max number of speakers that sound together (default 2)</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>hOrients <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>the orientations where vPos 0 on every ring pan to (cf. orientation for PanAz).</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>E.g. 0 means to speaker 0 in that ring, 0.5 is between speaker 0 and 1, etc.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>vOrient<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>vertical orientation, default 0, the first ring specified.</p>
-<p class="p4"><br></p>
-<p class="p5"><span class="s1">Server</span>.internal.boot;</p>
-<p class="p5">(</p>
-<p class="p6"><span class="s2">z = { </span>|hPos=0, vPos=0, hWidth=2, vWidth=2|<span class="s2"><span class="Apple-tab-span"> </span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="s1">TorusPanAz</span>.ar([8, 4, 4], <span class="s1">Dust</span>.ar(1000), hPos, vPos, 1, hWidth, vWidth);</p>
-<p class="p5">}.scope;</p>
-<p class="p5">)</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>// If present, check with SpatioScope:</p>
-<p class="p5"><span class="s1">SpatioScope</span>.rings([8, 4, 4]);</p>
-<p class="p7"><br></p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.25);</p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.5);</p>
-<p class="p7"><br></p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0, <span class="s3">\vPos</span>, 0.667);<span class="Apple-tab-span"> </span><span class="s4">// into middle ring</span></p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.5);</p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 1);<span class="Apple-converted-space"> </span></p>
-<p class="p7"><br></p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0, <span class="s3">\vPos</span>, 1.333);<span class="Apple-tab-span"> </span><span class="s4">// into top ring</span></p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.5);</p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 1);</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\hPos</span><span class="s2">, 0, </span><span class="s3">\vPos</span><span class="s2">, 1.666);<span class="Apple-tab-span"> </span></span>// wrap back into bottom ring: half ...</p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\hPos</span><span class="s2">, 0, </span><span class="s3">\vPos</span><span class="s2">, 2);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// ... and fully back</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\hWidth</span><span class="s2">, 4);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// horizontal width</p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.25);</p>
-<p class="p5">z.set(<span class="s3">\hPos</span>, 0.5);</p>
-<p class="p7"><br></p>
-<p class="p5">z.set(<span class="s3">\hWidth</span>, 2);</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\vWidth</span><span class="s2">, 3);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// vertical width; not usually useful.</p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, 0.666);</p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, -0.666);</p>
-<p class="p7"><br></p>
-<p class="p5">z.set(<span class="s3">\vWidth</span>, 2);</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>// use for panning gon a sphere:</p>
-<p class="p5">(</p>
-<p class="p6"><span class="s2">z = { </span>|hPos, vPos|<span class="s2"><span class="Apple-tab-span"> </span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="s1">TorusPanAz</span>.ar([1, 4, 6, 4, 1], <span class="s1">Dust</span>.ar(1000), hPos, vPos, 1, vOrient: 2);</p>
-<p class="p5">}.scope;</p>
-<p class="p5">)</p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\vPos</span><span class="s2">, 0);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// middle ring</p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, 0.4);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">// top ring</span></p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, 0.8);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">// top 1</span></p>
-<p class="p7"><br></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\hPos</span><span class="s2">, 1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// turn horiz 180 deg</p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\vPos</span><span class="s2">, 0.4);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// top ring, other side</p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, 0);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">// mid ring</span></p>
-<p class="p7"><span class="Apple-tab-span"> </span></p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, -0.4);<span class="Apple-tab-span"> </span><span class="s4">// bottom ring</span></p>
-<p class="p5">z.set(<span class="s3">\vPos</span>, -0.8);<span class="Apple-tab-span"> </span><span class="s4">// bottom 1</span></p>
-<p class="p8"><span class="s2">z.set(</span><span class="s3">\hPos</span><span class="s2">, 0);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// rotate back.</p>
-<p class="p7"><br></p>
-<p class="p7"><br></p>
-<p class="p8">// to do : demonstrate conversion between xy field and panning on a dome.</p>
-</body>
-</html>
Deleted: SpeakersCorner/Panning/TorusPanAz.sc
===================================================================
--- SpeakersCorner/Panning/TorusPanAz.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Panning/TorusPanAz.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,22 +0,0 @@
-TorusPanAz {
- *ar { arg numSpeakers = #[ 16, 12, 8, 4 ],
- in, hPos = 0.0, vPos = 0.0, level = 1.0,
- hWidth = 2, vWidth = 2,
- hOrients=0, vOrient=0;
-
- ^PanAz.ar(numSpeakers.size, in, vPos, level, vWidth, vOrient)
- .collect({ arg vChan, i; var numSpk;
- numSpk = numSpeakers[i];
- if (numSpk == 1, {
- [vChan]
- }, {
- PanAz.ar(numSpk,
- vChan,
- hPos,
- width: hWidth.min(numSpk),
- orientation: hOrients.asArray.clipAt(i)
- )
- });
- }).flat;
- }
-}
\ No newline at end of file
Deleted: SpeakersCorner/SpatioScope.html
===================================================================
--- SpeakersCorner/SpatioScope.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/SpatioScope.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,134 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="824.48">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #9a1d1b}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #001ebb}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-span.s1 {font: 18.0px Helvetica}
-span.s2 {color: #000000}
-span.s3 {color: #001ebb}
-span.s4 {font: 9.0px Monaco}
-span.s5 {color: #9a1d1b}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><span class="s1"><b>SpatioScope<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></span><b>monitor volume levels on multiple speakers</b></p>
-<p class="p2"><br></p>
-<p class="p2"><span class="Apple-tab-span"> </span></p>
-<p class="p3">s.boot;</p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>// quick first example:<span class="Apple-converted-space"> </span></b></p>
-<p class="p4"><span class="s2">z = </span><span class="s3">SpatioScope</span><span class="s2">.new;<span class="Apple-tab-span"> </span></span>// default is 4 speakers<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// 4 chans of sound</p>
-<p class="p3">{ <span class="s3">LFDNoise3</span>.ar([2, 3, 5, 8] * 1000) * <span class="s3">LFNoise2</span>.kr([5, 8, 13, 21] * 0.1).max(0); }.play;</p>
-<p class="p2"><span class="Apple-tab-span"> </span></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// survives cmd-period</p>
-<p class="p5">thisProcess<span class="s2">.stop;</span></p>
-<p class="p2"><br></p>
-<p class="p3">{ <span class="s3">PanAz</span>.ar(4, <span class="s3">ClipNoise</span>.ar, <span class="s3">LFSaw</span>.kr(<span class="s3">SinOsc</span>.ar(0.03) * 1), 0.1) }.play;</p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>// stop and start</b></p>
-<p class="p3">z.stop;</p>
-<p class="p3">z.start;</p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*new(locations, server, parent, bounds)</b></p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>locations</b>: positions in space of [-1, 1] for x and y</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>server</b>: on which server to watch<span class="Apple-tab-span"> </span></p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>parent</b>: which window or view to show on</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>bounds</b>: view bounds.</p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// supply locations by hand - 1@1 is left bottom.</p>
-<p class="p3">z = <span class="s3">SpatioScope</span>([ -0.5 @ -0.7, 0.5 @ -0.4, 0.8 @ 0.8, -0.5 @ 0.5, 0@0 ]);<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p6"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*gridPos(numx, numy) <span class="Apple-tab-span"> </span></b>// calculate positions for a grid</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>numx</b>: number of speakers in the x-direction</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>numy</b>: number of speakers in the y-direction</p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p3"><span class="s3">SpatioScope</span>.gridPos(4,6);</p>
-<p class="p2"><br></p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*grid(numx, numy radius, angleOffset, server, parent, bounds) <span class="Apple-tab-span"> </span></b>// make a SpatioScope for a grid</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>numx, numy</b> as in *<b>gridPos</b></p>
-<p class="p1"><span class="s4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><b>server, parent, bounds </b>as in <b>*new</b></p>
-<p class="p6"><br></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.grid(4,6);</p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*ringPos(num, radius, angleOffset) <span class="Apple-tab-span"> </span></b>// calculate positions for a ring</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>num</b>: number of speakers in the ring</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>radius</b>: radius from center</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>angleOffset</b>: angleOffset of first speaker (0 = right, -0.5pi is top)</p>
-<p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p3"><span class="s3">SpatioScope</span>.ringPos(5);</p>
-<p class="p3"><span class="s3">SpatioScope</span>.ringPos(8);</p>
-<p class="p2"><br></p>
-<p class="p6"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*ring(num, radius, angleOffset, server, parent, bounds) <span class="Apple-tab-span"> </span></b>// make a SpatioScope for a ring</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>num</b>, <b>radius, angleOffset</b> as in *<b>ringPos</b></p>
-<p class="p1"><span class="s4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><b>server, parent, bounds </b>as in <b>*new</b></p>
-<p class="p2"><br></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.ring(5);<span class="Apple-tab-span"> </span><span class="s5">// 1 is right</span></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.ring(8);<span class="Apple-tab-span"> </span>// more speakers</p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.ring(8, 0.8);<span class="Apple-tab-span"> </span>// ring radius</p>
-<p class="p4"><span class="s2">z = </span><span class="s3">SpatioScope</span><span class="s2">.ring(5, 0.5, 0.5pi);<span class="Apple-tab-span"> </span></span>// radius, rotate location clockwise -> bottom</p>
-<p class="p4"><span class="s2">z = </span><span class="s3">SpatioScope</span><span class="s2">.ring(6, 0.5, pi);<span class="Apple-tab-span"> </span></span>// radius, rotate location clockwise -> left</p>
-<p class="p4"><span class="s2">z = </span><span class="s3">SpatioScope</span><span class="s2">.ring(7, 0.5, 1.5pi);<span class="Apple-tab-span"> </span></span>// radius, rotate location clockwise -> top</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span>// ring + subwoofer in center</p>
-<p class="p3">z = <span class="s3">SpatioScope</span>(SpatioScope.ringPos(6, 0.8, pi) ++ [0@0]);<span class="Apple-tab-span"> </span></p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>*rings(nums, radii, angleOffsets, server, parent, bounds)</b></p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// concentric rings, as in dome-style setups<span class="Apple-converted-space"> </span>(e.g. Animax Bonn, IEM-Cube Graz)</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>nums</b>: number of speakers in each ring</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>radii</b>: the radii of each ring (nil distributes the radii between 0 and 1)</p>
-<p class="p1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>angleOffsets</b>: the angle offsets for each ring; if a single value, it applies to all rings.</p>
-<p class="p1"><span class="s4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span><b>server, parent, bounds: </b>as above.</p>
-<p class="p6"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b></p>
-<p class="p4"><span class="s2">z = </span><span class="s3">SpatioScope</span><span class="s2">.rings([8, 4]);<span class="Apple-tab-span"> </span></span>// 2 rings, outer ring is lower channels</p>
-<p class="p2"><br></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.rings([8, 4], <span class="s3">nil</span>, -0.5pi);<span class="Apple-tab-span"> </span><span class="s5">// 1 on top</span></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.rings([8, 4], [0.4, 0.75]);<span class="Apple-tab-span"> </span><span class="s5">// low chan numbers inside</span></p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.rings([12, 8, 4], <span class="s3">nil</span>, -0.5pi); <span class="s5">// 3 rings</span></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// roughly the angle offsets for IEM CUBE</p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.rings([12, 8, 4], <span class="s3">nil</span>, (-0.5 + [0, 0.125, 0.25]) * pi);<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// roughly the Animax Dome setup in Bonn</p>
-<p class="p3">z = <span class="s3">SpatioScope</span>.rings([16, 12, 8, 4], <span class="s3">nil</span>, (-0.5 + [0.0625, 0.083, 0.125, 0.25]) * pi);<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s2"><span class="Apple-tab-span"> </span></span>// test with several sources</p>
-<p class="p5"><span class="s2">{ </span>{ Ringz.ar(Dust2.ar(5), exprand(300, 10000), exprand(0.03, 0.1)) }.dup(12)<span class="s2"> }.play;</span></p>
-<p class="p2"><br></p>
-<p class="p1"><b><span class="Apple-tab-span"> </span>internals:</b></p>
-<p class="p2"><br></p>
-<p class="p3">z.locations<span class="Apple-tab-span"> </span>// knows its locations</p>
-<p class="p3">z.server<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// and its server</p>
-<p class="p3">z.numChannels<span class="Apple-tab-span"> </span>// inferred from number of locations</p>
-<p class="p3">z.offset<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// zero by default, can be set so that outputs to watch begin at higher channels</p>
-<p class="p3">z.proxy<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// a proxy does the amp watching</p>
-<p class="p3">z.resp<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// a respondernode listen for the incoming amp values</p>
-<p class="p3">z.skipjack<span class="Apple-tab-span"> </span>// a skipjack restarts the spatioscope after thisProcess.stop</p>
-<p class="p3">z.parent<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// its view</p>
-<p class="p2"><br></p>
-<p class="p3">z.offset_(8);</p>
-<p class="p3">z.offset_(0);</p>
-<p class="p2"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span>// closing the gui and reopening does not work yet. hmmm.</p>
-<p class="p3">z.parent.close;</p>
-<p class="p3">z.gui;</p>
-</body>
-</html>
Deleted: SpeakersCorner/SpatioScope.sc
===================================================================
--- SpeakersCorner/SpatioScope.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/SpatioScope.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,212 +0,0 @@
-SpatioScope {
-
- var <locations, <server, <bounds, <>background, <>foreground;
- var <numChannels, <offset = 0;
- var <proxy, <resp, <skipjack;
- var <parent, <startBtn, <stopBtn, <ampViews, <magSlider, <>redLevel=0.95, <>magnify=1;
-
- var <rate;
-
- *new { arg locations, server, parent, bounds;
- locations = locations ?? { [(-0.5 @ -0.5), (0.5 @ -0.5), (0.5@0.5), (-0.5@0.5) ] };
- server = server ? Server.default;
-
- ^super.newCopyArgs(locations, server)
- .init(bounds)
- .gui(parent)
- // .start
- }
-
- init { |argBounds|
- bounds = argBounds ?? { Rect(0,0,410,410) };
- numChannels = locations.size;
-
- proxy = proxy ?? { NodeProxy.control(server, this.numChannels) };
- proxy.source = {
- Amplitude.kr(InFeedback.ar(this.offset, this.numChannels), 0, 0.5)
- };
-
- rate = \audio;
-
- resp.remove;
- resp = OSCresponderNode(server.addr, '/c_set', { arg time, r, msg;
- var amps;
- // check if this reply message is for this spatioscope
- if ( msg[1] == this.proxy.index ){
- amps = msg.copyToEnd(1).clump(2).flop[1];
- { this.amps_(amps * (magnify ? 1)); }.defer;
- };
- });
-
- skipjack = SkipJack(
- { proxy.wakeUp; this.updateViews; },
- 0.2,
- { parent.isClosed; },
- this.class.name,
- autostart: false
- );
- }
-
- maxBusNum {
- ^if ( rate == \audio ){
- server.options.numAudioBusChannels
- } {
- server.options.numControlBusChannels
- } - this.numChannels;
- }
-
- offset_ { |inChan=0|
- if (inChan.inclusivelyBetween(0, this.maxBusNum ) ) {
- offset = inChan;
- if (skipjack.task.isPlaying) { this.stop.start };
- }{
- "new offset out of range of valid busnumbers!".warn;
- };
- }
-
- gui { |argParent|
- var butWidth = 38;
- background = background ?? { Color(0, 0, 0.15) }; // dark blue
- foreground = foreground ?? { Color(0.5, 0.5, 1.0) }; // light blue
-
- parent = argParent ?? {
- Window(this.class.name, bounds.moveBy(200, 200).resizeBy(10, 30)).front;
- };
- parent.view.background_(background);
- parent.addFlowLayout;
-
- #startBtn, stopBtn = [ \start, \stop ].collect { |name, i|
- Button(parent, Rect(i * (butWidth + 2) + 2, 2, butWidth, 20))
- .states_([[name, Color.white, Color.clear],
- [name, Color.white, Color(0,0,0.8)]])
- .action_({ this.perform(name); });
- };
-
- magSlider = EZSlider(parent,
- (bounds.width - (butWidth * 2) - 10) @ 20,
- \magnify,
- [1, 10, \exp],
- { |sl| magnify = sl.value }, magnify,
- labelWidth: 45, numberWidth: 30);
- magSlider.labelView.stringColor_(foreground);
- magSlider.numberView.background_(foreground);
-// magSlider.numberView.resize_(3);
-// magSlider.sliderView.resize_(2);
-
- this.showLocs;
- this.stop.start;
- }
-
- showLocs {
- var ampCont = CompositeView(parent, bounds).background_(Color.clear);
- var center = bounds.center;
- var size = bounds.center.x * 0.2;
-
- ampViews = locations.collect { |point, i|
- var left = point.x + 1 - 0.125 * center.x;
- var top = point.y + 1 - 0.125 * center.y;
- StaticText(ampCont, Rect(left, top, size, size))
- .string_((i + 1).asString).align_(\center)
- .stringColor_(foreground)
- .background_(Color.black);
- };
- }
-
- *ringPos { |num=6, radius=0.7, angleOffset=0|
- var angles = { |i| (2pi * (i / num)) + angleOffset }.dup(num);
- ^angles.collect { |angle| Polar(radius, angle).asPoint };
- }
-
- *ring { |num=6, radius=0.7, angleOffset=0, server, parent, bounds|
- var locs = this.ringPos(num, radius, angleOffset);
- ^this.new(locs, server, parent, bounds);
- }
-
-
- *rings { |nums, radii, angleOffsets = 0, server, parent, bounds|
- var locs;
- var numrings = nums.size;
- // earlier circles are outer
- // (assumes dome shape, low channels on bottom, as in IEM CUBE)
- radii = radii ?? { (numrings .. 1) / (numrings + 1) };
- angleOffsets = angleOffsets ?? 0;
- locs = [ nums, radii, angleOffsets ].flop.collect { |list| this.ringPos(*list) }.flat;
-
- ^this.new(locs, server, parent, bounds);
- }
-
- // grid speaker positions
- *gridPos{ |numx = 2, numy = 6|
-
- ^Array.series( numy, 1/(2*numy), 1/numy ).collect{ |y|
- Array.series( numx, 1/(2*numx), 1/numx ).collect{ |x|
- Point(x*2-1,y*2-1);
- }
- }.flatten;
- }
-
- *grid { |numx=2, numy=6, server, parent, bounds|
- var locs = this.gridPos(numx, numy);
- ^this.new(locs, server, parent, bounds);
- }
-
-
- // listen to control buses
- krListen{
- rate = \control;
- proxy.source = {
- Amplitude.kr(In.kr(this.offset, this.numChannels), 0, 0.5)
- };
- }
-
- // listen to audio rate buses
- arListen{
- rate = \audio;
- proxy.source = {
- Amplitude.kr(InFeedback.ar(this.offset, this.numChannels), 0, 0.5)
- };
- }
-
- start {
- if(server.serverRunning.not) {
- "SpatioScope: server not running.".warn;
- skipjack.stop;
- this.updateViews;
- ^this
- };
- proxy.rebuild;
- fork { 0.4.wait; proxy.send };
- skipjack.start;
- resp.remove.add;
- this.updateViews;
- }
-
- updateViews {
- var isOn = skipjack.task.isPlaying.binaryValue;
- if (parent.isClosed.not) {
- startBtn.value_(isOn);
- stopBtn.value_(1 - isOn);
- server.listSendMsg(["/c_get"] ++ ((_ + proxy.index) ! proxy.numChannels));
- };
- }
-
- stop {
- skipjack.stop;
- proxy.free;
- resp.remove;
- this.updateViews;
- this.amps_([]);
- }
-
- amps_ { arg vals;
- var amp, col;
- // "amps coming in: %\n".postf(vals);
- if (parent.isClosed.not) {
- ampViews.do { |el, i|
- amp = (vals[i] ? 0).sqrt;
- col = if (amp > redLevel, { Color.red }, { Color.yellow( amp ) });
- el.background_(col)
- }
- };
- }
-}
\ No newline at end of file
Deleted: SpeakersCorner/SpeakerAdjust.html
===================================================================
--- SpeakersCorner/SpeakerAdjust.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/SpeakerAdjust.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,154 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0014bc}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #307109}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #622c2c}
-p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #622c2c; min-height: 12.0px}
-span.s1 {font: 9.0px Monaco}
-span.s2 {color: #000000}
-span.s3 {color: #307109}
-span.s4 {color: #0014bc}
-span.s5 {color: #5e691f}
-span.s6 {color: #622c2c}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>SpeakerAdjust</b><span class="s1"><span class="Apple-converted-space"> </span></span></p>
-<p class="p2"><br></p>
-<p class="p3"><b>adjusts levels, arrival times, and optional eqalisation bands for multichannel signals.</b></p>
-<p class="p3"><b>Typical use is for multichannel speaker setups.<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><b>See also Spectralyzer.help for a related tool.<span class="Apple-converted-space"> </span></b></p>
-<p class="p2"><br></p>
-<p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*ar(ins, specs, vol) <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>// static settings</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>ins <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>an array of audio channels to be processed/adjusted</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>specs <span class="Apple-tab-span"> </span></b>the adjustment specifications:</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>one list for each channel consisting of<span class="Apple-converted-space"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>[ amp, <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>a multiply factor for this channel,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span>delaytime,<span class="Apple-tab-span"> </span></b>(optional) delay time for this channel (in secs)</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span>eqspec1:<span class="Apple-tab-span"> </span></b>(optional) spec for one eq band to use, with values for:</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>[freq,</b><span class="Apple-tab-span"> </span>frequency,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>db</b>, <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>gain in db,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>rq]</b>, <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>reciprocal of Q: bandwidth / cutoffFreq.<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>(1 is wide, 0.1 is narrow).</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>eqspec2,<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>...</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>eqspecN</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>],</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>vol<span class="Apple-tab-span"> </span></b>master volume for all chans, can be used for muting</p>
-<p class="p4"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>// Caution:</b> not working yet, because default values with Control.names are not correct yet.</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// for the time being, use ar (fix).</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*arDyn ( ins, specs, vol)<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>same as above, but with adjustable delay times, level and EQ; to be used for tweaking<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>the setup is final.</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>This is slightly more efficient than creating control inputs on all parameters.</p>
-<p class="p4"><br></p>
-<p class="p4"><b><span class="Apple-tab-span"> </span></b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>Recommended use: put a function for speaker adjustment in a MasterFX chain,<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>where it is guaranteed to run post all other sounds, and wake up after Cmd-period.</b></p>
-<p class="p4"><b><span class="Apple-tab-span"> </span></b></p>
-<p class="p5">s.boot;<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p5"><span class="Apple-tab-span"> </span>// ... full short example here, e.g. 6 chans, amp, delay, 2 bands eq each.</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p6"><span class="s2"><span class="Apple-tab-span"> </span></span>// step by step examples</p>
-<p class="p5">(</p>
-<p class="p7">ProxyChain<span class="s2">.add(</span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">\testSnd</span>, <span class="s3">\mix</span> -> { <span class="s4">Dust</span>.ar(20) + <span class="s4">PinkNoise</span>.ar([0.1, 0.1]) },<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="s3">\spkAdj</span>, <span class="s3">\filter</span> -> { <span class="s4">|in, spkVol=1|</span> <span class="s4">SpeakerAdjust</span>.ar(in, [ [0.25], [0.5] ], spkVol) }</p>
-<p class="p5">);</p>
-<p class="p2"><br></p>
-<p class="p8"><span class="s4">Spec</span><span class="s2">.add(</span>\spkVol<span class="s2">, </span>\amp<span class="s2">);<span class="Apple-converted-space"> </span></span></p>
-<p class="p2"><br></p>
-<p class="p6"><span class="s2"><span class="Apple-tab-span"> </span></span>// can be used in a proxy chain</p>
-<p class="p8"><span class="s2">c = </span><span class="s4">ProxyChain</span><span class="s2">(2, [</span>\testSnd<span class="s2">, </span>\spkAdj<span class="s2">]);</span></p>
-<p class="p5">c.gui;</p>
-<p class="p5">c.play;</p>
-<p class="p5">)</p>
-<p class="p6"><span class="s2">c.add(</span><span class="s3">\spkAdj</span><span class="s2">, 1);<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// kick in compensation</p>
-<p class="p2"><br></p>
-<p class="p5">c.end;<span class="Apple-converted-space"> </span></p>
-<p class="p2"><br></p>
-<p class="p5"><span class="Apple-tab-span"> </span>// make some sound that just plays</p>
-<p class="p5">{ <span class="s4">Dust</span>.ar(20) + <span class="s4">PinkNoise</span>.ar([0.1, 0.1]) }.play;</p>
-<p class="p2"><br></p>
-<p class="p5"><span class="Apple-tab-span"> </span>// make a MasterFX - this filters everything on its buses,<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>// and wakes up after cmd-period.<span class="Apple-converted-space"> </span></p>
-<p class="p5">z = MasterFX(s, 2, [\spkAdj]);</p>
-<p class="p5">z.gui;</p>
-<p class="p5">z.pxChain.add(\spkAdj);</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p5">(</p>
-<p class="p7">ProxyChain<span class="s2">.add(</span></p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>\spkAdj<span class="s2">, </span>\filter<span class="s2"> -> { </span><span class="s4">|in, spkVol=1|</span><span class="s2"><span class="Apple-converted-space"> </span></span></p>
-<p class="p7"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>SpeakerAdjust<span class="s2">.ar(in, [<span class="Apple-converted-space"> </span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>[1, 0],<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>[1, 0.02] <span class="Apple-tab-span"> </span>// right channel slightly late</p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>], spkVol) }</p>
-<p class="p5">);</p>
-<p class="p5">z.pxChain.add(<span class="s5">\spkAdj, 1);</span></p>
-<p class="p5">)</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p5"><span class="Apple-tab-span"> </span>// one eq band on each channel, add gain at different freqs</p>
-<p class="p5">(</p>
-<p class="p7">ProxyChain<span class="s2">.add(</span></p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>\spkAdj<span class="s2">, </span>\filter<span class="s2"> -> { </span><span class="s4">|in, spkVol=1|</span><span class="s2"><span class="Apple-converted-space"> </span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">SpeakerAdjust</span>.arDyn(in, [<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>//<span class="Apple-converted-space"> </span>amp, dt,<span class="Apple-converted-space"> </span>[freq1, gain1, bw1]<span class="Apple-tab-span"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>[1, 0, <span class="Apple-converted-space"> </span>[300, <span class="Apple-converted-space"> </span>8,<span class="Apple-converted-space"> </span>2]],<span class="Apple-converted-space"> </span></p>
-<p class="p9"><span class="s2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>[1, 0.02,</span>/* [2800, <span class="Apple-converted-space"> </span>8,<span class="Apple-converted-space"> </span>2]*/<span class="s2">]<span class="Apple-converted-space"> <span class="Apple-tab-span"> </span></span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>], spkVol) }</p>
-<p class="p5">);</p>
-<p class="p5">z.pxChain.add(<span class="s5">\spkAdj, 1);</span></p>
-<p class="p5">)</p>
-<p class="p2"><br></p>
-<p class="p6"><span class="s2"><span class="Apple-tab-span"> </span></span>// load test for 24 chans: a MasterFX<span class="Apple-converted-space"> </span></p>
-<p class="p5">(<span class="Apple-tab-span"> </span></p>
-<p class="p5"><span class="s4">MasterFX</span>.clear(s.name);</p>
-<p class="p5">z = <span class="s4">MasterFX</span>(s, 24, [<span class="s3">\spkAdj</span>]);</p>
-<p class="p5">z.gui;</p>
-<p class="p5">)</p>
-<p class="p2"><br></p>
-<p class="p5">(</p>
-<p class="p10">//<span class="Apple-tab-span"> </span>generate random data for 24 chans, 3 bands each, to test load:</p>
-<p class="p5">var data = { [<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>rrand(0.5, 1.0), <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// amp<span class="Apple-converted-space"> </span></span></p>
-<p class="p10"><span class="s2"><span class="Apple-tab-span"> </span>0.01.rand ]<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// dt, max 10msec => 3.4m<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>++<span class="Apple-converted-space"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>({ [<span class="Apple-tab-span"> </span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>exprand(100, 10000),<span class="Apple-tab-span"> </span><span class="s6">// freq</span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>rrand(12.0, -12.0),<span class="Apple-tab-span"> </span><span class="s6">// gain in db</span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>rrand(0.2, 1.0) ]<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s6">// rq</span></p>
-<p class="p5"><span class="Apple-tab-span"> </span>} ! 3);<span class="Apple-tab-span"> </span></p>
-<p class="p2"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></p>
-<p class="p5">} ! z.numChannels;<span class="Apple-tab-span"> </span><span class="s6">// for 24 chans</span></p>
-<p class="p11"><br></p>
-<p class="p7">ProxyChain<span class="s2">.add(</span></p>
-<p class="p8"><span class="s2"><span class="Apple-tab-span"> </span></span>\spkAdj<span class="s2">, </span>\filter<span class="s2"> -> { </span><span class="s4">|in, spkVol=1|</span><span class="s2"><span class="Apple-converted-space"> </span></span></p>
-<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s4">SpeakerAdjust</span>.arDyn(in, data, spkVol) }</p>
-<p class="p5">);</p>
-<p class="p5">z.pxChain.add(<span class="s5">\spkAdj, 1);</span></p>
-<p class="p5">)</p>
-<p class="p2"><br></p>
-</body>
-</html>
Deleted: SpeakersCorner/SpeakerAdjust.sc
===================================================================
--- SpeakersCorner/SpeakerAdjust.sc 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/SpeakerAdjust.sc 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,100 +0,0 @@
-SpeakerAdjust {
-
- classvar <>freqName = \eqFr, <>gainName= \eqGn, <>bwName= \eqBw;
- var <server, <specs, <vol, <synth, <group;
-
- *addSpecs { |numChans = 8, numBands = 3, dict|
- var freqSpec, gainSpec, bwSpec, threeSpecs;
-
- freqSpec = \freq.asSpec;
- gainSpec = [-24, 24].asSpec;
- bwSpec = [0.01, 2, \exp].asSpec;
- threeSpecs = [freqSpec, gainSpec, bwSpec];
-
- dict = dict ? Spec.specs;
- dict.put(freqName, freqSpec);
- dict.put(gainName, gainSpec);
- dict.put(bwName, bwSpec);
-
- numChans.do { |i|
- numBands.do { |j|
- this.makeNames(i, j).do { |name, i|
- dict.put(name, threeSpecs[i]);
- }
- }
- };
- }
-
- *makeNames { |i, j|
- var ext = "_c" ++ (j+1) ++ "_" ++ (i+1);
- ^[freqName, gainName, bwName].collect { |nm| (nm ++ ext).asSymbol };
- }
- // more efficient, but fixed values for everything
- *ar { |ins, specs, vol=1|
-
- vol = vol.lag(0.2);
-
- if (ins.size != specs.size) {
- "SpeakerAdjust: number of ins: % and specs: % dont match."
- .format(ins.size, specs.size).warn;
- ^nil
- };
-
- ^specs.collect { |spec, i|
- var out, amp, dt, eqSpecs;
-
- out = ins[i];
- #amp, dt ... eqSpecs = spec;
-
- out = if (amp.notNil, { out * amp }, { out });
-
- if (dt ? 0 > 0, { out = DelayN.ar(out, dt, dt) });
-
- eqSpecs.do { |spec|
- var freq, db, rq;
- #freq, db, rq = spec;
- out = MidEQ.ar(out, freq, rq, db);
- };
- out * vol;
- };
- }
- // create controls for everything
- *arDyn { |ins, specs, vol=1|
-
- vol = vol.lag(0.2);
-
- if (ins.size != specs.size) {
- "SpeakerAdjust: number of ins: % and specs: % dont match."
- .format(ins.size, specs.size).warn;
- ^nil
- };
-
- ^specs.collect { |specList, i|
- var out, amp, dt, eqSpecs;
- var ampCtl, delayCtl;
-
- out = ins[i];
- #amp, dt ... eqSpecs = specList;
-
- delayCtl = NamedControl.kr(("eqDt_c" ++ (i+1)).asSymbol, dt ? 0, 0.2);
- out = DelayN.ar(out, 0.1, delayCtl);
-
- ampCtl = NamedControl.kr(("eqAmp_c" ++ (i+1)).asSymbol, amp ? 1, 0.2);
- out * (ampCtl * vol);
-
- eqSpecs.do { |specBand, j|
- var freq, db, rq;
- var freqCtl, gainCtl, rqCtl;
- var ctlNames = this.makeNames(i, j);
- #freq, db, rq = specBand.postcs;
-
- freqCtl = NamedControl.kr(ctlNames[0], freq, 0.2);
- gainCtl = NamedControl.kr(ctlNames[1], db, 0.2);
- rqCtl = NamedControl.kr(ctlNames[2], rq, 0.2);
-
- out = MidEQ.ar(out, freqCtl, gainCtl, rqCtl);
- };
- out
- };
- }
-}
\ No newline at end of file
Deleted: SpeakersCorner/SpeakersCorner.html
===================================================================
--- SpeakersCorner/SpeakersCorner.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/SpeakersCorner.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,50 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>SpeakersCorner</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>A set of classes for Multi-Speaker setups.</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>SpatioScope<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>- display speaker layout in 2D, show audio levels on the speakers</p>
-<p class="p4"><br></p>
-<p class="p3"><b>Latency<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>- measure audio latencies for each channel, to compensate distances<span class="Apple-converted-space"> </span></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span>to a given listening/microphone location</p>
-<p class="p4"><br></p>
-<p class="p3"><b>Spectralyzer<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>- display frequency response of a signal, e.g. a loudspeaker by microphone</p>
-<p class="p4"><br></p>
-<p class="p3"><b>SpeakerAdjust<span class="Apple-tab-span"> </span></b>- adjust delaytime, level and EQ for individual speaker channels</p>
-<p class="p4"><br></p>
-<p class="p3"><b>MasterFX<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>- add switchable master effects on the main outputs,<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-converted-space"> </span>e.g. using SpeakerAdjust, limiters, etc.</p>
-<p class="p4"><br></p>
-<p class="p4"><br></p>
-<p class="p3"><b>Panning Classes:</b></p>
-<p class="p4"><br></p>
-<p class="p3"><b>TorusPanAz<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>for concentric rings of speakers</p>
-<p class="p3"><b>PanRingTop<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></b>for ring + a top speaker</p>
-<p class="p3"><b>PanRingTopBot<span class="Apple-tab-span"> </span></b>for a ring, top and bottom speaker</p>
-<p class="p4"><br></p>
-<p class="p4"><br></p>
-<p class="p4"><br></p>
-<p class="p3">ToDo:</p>
-<p class="p3">* SpatioScope - close and reopen gui is not working yet.</p>
-<p class="p3">* SpeakerAdjust: dynamic eq controls not working yet, so use static EQ for now.</p>
-<p class="p4"><br></p>
-<p class="p4"><br></p>
-<p class="p3">Written by Alberto de Campo, based on work done within the SonEnvir project.</p>
-</body>
-</html>
Deleted: SpeakersCorner/Spectralyzer.html
===================================================================
--- SpeakersCorner/Spectralyzer.html 2013-12-26 11:50:33 UTC (rev 2669)
+++ SpeakersCorner/Spectralyzer.html 2013-12-26 11:52:50 UTC (rev 2670)
@@ -1,120 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<title></title>
-<meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="949.43">
-<style type="text/css">
-p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
-p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0014bc; min-height: 12.0px}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a91616}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0014bc}
-span.s1 {color: #000000}
-span.s2 {color: #0000bf}
-span.s3 {color: #bf0000}
-span.s4 {color: #0014bc}
-span.s5 {color: #307109}
-span.s6 {color: #a91616}
-span.Apple-tab-span {white-space:pre}
-</style>
-</head>
-<body>
-<p class="p1"><b>Spectralyzer</b></p>
-<p class="p2"><br></p>
-<p class="p3"><b>listens to an input and displays its spectrum in equal relative bandwidth steps.<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><b>This is useful for tuning multichannel speaker setups, e.g. with Latency and SpeakerAdjust.</b></p>
-<p class="p2"><br></p>
-<p class="p4"><span class="s1"><span class="Apple-tab-span"> </span></span>// quick first example:</p>
-<p class="p5">(</p>
-<p class="p4"><span class="s1">x = </span><span class="s2">Spectralyzer</span><span class="s1">.new(61); <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// make a spectralyzer,<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="s1">x.makeWindow;<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// make a gui for it</p>
-<p class="p5">x.listenTo({ <span class="s2">PinkNoise</span>.ar });<span class="Apple-tab-span"> </span><span class="s3">// listen to a sound</span></p>
-<p class="p4"><span class="s1">x.start; <span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// start displaying<span class="Apple-tab-span"> </span></p>
-<p class="p5">)</p>
-<p class="p2"><br></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span>*new (nBands, minFreq, maxFreq, server)</b></p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>nBands: </b>number of equal relative width bands to analyse.</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Default is 60 bands, which creates 1/6th octave bands for 20-20000 Hz.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>minFreq:</b> lowest band center freq, default 20Hz.</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>maxFreq: </b>highest band center freq, default 20000Hz</p>
-<p class="p3"><b><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>server: </b>the server to run on, default: Server.default.</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p7">x = <span class="s4">Spectralyzer</span>.new(20, 100, 8000); // ca. 3rd octaves, 100, 125, 160, 200</p>
-<p class="p7">x.makeWindow;</p>
-<p class="p7">x.freqs.round(0.1);</p>
-<p class="p2"><br></p>
-<p class="p7">x = <span class="s4">Spectralyzer</span>.new(61, 20, 20000);<span class="Apple-tab-span"> </span>// default ca 1/6 octaves</p>
-<p class="p7">x.freqs.round(0.1);</p>
-<p class="p6"><br></p>
-<p class="p7">x = <span class="s4">Spectralyzer</span>.new(31, 20, 20 * 1024);<span class="Apple-tab-span"> </span>// precise 3rd octaves</p>
-<p class="p7">x.freqs.round(0.1);</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p3"><span class="Apple-tab-span"> </span><b>listenTo(src)<span class="Apple-converted-space"> </span></b></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><b>src:</b> set the source to listen to. This can be anything a NodeProxy accepts as a source;<span class="Apple-converted-space"> </span></p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>usually it will be an audio function or maybe an existing proxy.</p>
-<p class="p3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>multichannel sources will be converted to mono.</p>
-<p class="p8"><span class="Apple-tab-span"> </span></p>
-<p class="p7">x.listenTo({ <span class="s4">SinOsc</span>.ar });</p>
-<p class="p7">x.listenTo({ <span class="s4">SoundIn</span>.ar(0) });</p>
-<p class="p7">x.listenTo({ <span class="s4">SinOsc</span>.ar([300, 500, 1200]) * 0.1 });</p>
-<p class="p2"><br></p>
-<p class="p9"><span class="s1"><span class="Apple-tab-span"> </span></span>// set middle db value to display</p>
-<p class="p7">x.midDb = -20;</p>
-<p class="p7">x.midDb = -30;</p>
-<p class="p2"><br></p>
-<p class="p9"><span class="s1"><span class="Apple-tab-span"> </span></span>// set range to display (midDb +- rangeDb)</p>
-<p class="p7">x.rangeDb = 15;</p>
-<p class="p7">x.rangeDb = 30;<span class="Apple-tab-span"> </span></p>
-<p class="p7">x.rangeDb = 10;<span class="Apple-tab-span"> </span>// higher resolution</p>
-<p class="p2"><br></p>
-<p class="p7"><span class="Apple-tab-span"> </span>// average over the last n measured amplitudes</p>
-<p class="p7">x.avgN = 5;</p>
-<p class="p7">x.avgN = 20;</p>
-<p class="p7">x.avgN = 2;</p>
-<p class="p7">x.avgN = 1;</p>
-<p class="p7">x.avgN = 5;</p>
-<p class="p2"><br></p>
-<p class="p7"><span class="Apple-tab-span"> </span>// change time interval</p>
-<p class="p7">x.dt = 0.03;</p>
-<p class="p7">x.dt = 0.1;</p>
-<p class="p7">x.dt = 0.3;</p>
-<p class="p7">x.dt = 1;</p>
-<p class="p7">x.dt = 0.1;</p>
-<p class="p2"><br></p>
-<p class="p2"><br></p>
-<p class="p7"><span class="Apple-tab-span"> </span>// usage example: adjust frequency response for a speaker.</p>
-<p class="p7"><span class="Apple-tab-span"> </span>// results could then be used e.g. in SpeakerAdjust.</p>
-<p class="p2"><br></p>
-<p class="p7">p = <span class="s4">ProxySpace</span>.push;</p>
-<p class="p2"><br></p>
-<p class="p7">~noyz = { <span class="s4">PinkNoise</span>.ar(1) ! 2 };</p>
-<p class="p7">~noyz.play(vol: 0.5);</p>
-<p class="p2"><br></p>
-<p class="p7"><span class="Apple-tab-span"> </span>// listen to noise from microphone<span class="Apple-converted-space"> </span></p>
-<p class="p7">x.listenTo({ <span class="s4">SoundIn</span>.ar(0) });</p>
-<p class="p2"><br></p>
-<p class="p9"><span class="s1">(<span class="Apple-tab-span"> </span></span>// make two bands of parametric eq filter</p>
-<p class="p10"><span class="s1">~noyz.filter(5, { </span>|in, f1=100,rq1=1,db1=0,f2=5000,rq2=1,db2=0|<span class="s1"><span class="Apple-converted-space"> </span></span></p>
-<p class="p7"><span class="Apple-tab-span"> </span><span class="s4">MidEQ</span>.ar(<span class="s4">MidEQ</span>.ar(in, f1, rq1, db1), f2, rq2, db2);</p>
-<p class="p7">});</p>
-<p class="p7">)</p>
-<p class="p9"><span class="s1"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// eq for powerbook G4/1.25 speakers:</p>
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
_______________________________________________
sc-dev mailing list
info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/