From: owner-sc-users-digest@lists.io.com (sc-users-digest)
To: sc-users-digest@lists.io.com
Subject: sc-users-digest V1 #54
Reply-To: sc-users
Sender: owner-sc-users-digest@lists.io.com
Errors-To: owner-sc-users-digest@lists.io.com
Precedence: bulk
sc-users-digest Thursday, August 12 1999 Volume 01 : Number 054
----------------------------------------------------------------------
Date: Wed, 4 Aug 1999 03:25:06 -0500
From: Kenneth N Babb <---@---.--->
Subject: Re: Prime Numbers
>>>>
Man that was hard to read...! (tiny font)
<<<<<<<<
Sorry.
>>>>
How many primes do you need? If less that 256 you can generate
them directly :
Routine.new({
256.do({ arg i; i.nthPrime.yield; });
});
nthPrime uses a look up table for the first 256 primes.
<<<<<<<<
Cool...! This will do fine. All sorts of niffty things in SC.
Thanks,
Kenneth
>>>>
If you still need a filter you could add this method to class Integer
:
isPrime {
// this method fails for numbers greater
// than (1619 * 1619) == 2621161
var sqrtThis;
if ( this <<= 2, {
if (this == 2, { ^true }, { ^false });
});
sqrtThis = this.sqrt.asInteger;
256.do({ arg i; var p;
p = i.nthPrime;
if (this % p == 0, { ^false });
if (p >= sqrtThis, { ^true });
});
^nil // failure
}
<<<<<<<<
>>>>
------------------------------
Date: Wed, 04 Aug 1999 12:28:57 +0100
From: "simon" <---@---.--->
Subject: I like supercollider
Hello,JM
Can you tell me my serial No. if it still exists as I can't get 2.1.9 to
work I've been playing with other software for some time but I'm back to
SC!!!
.;-/=oCC&CCo=/-;.
+=&AB@@@@@@@@@@@@@@@@@XA&=+
X@@@@@@X8&=>//"""//>=&%B@@@@@@$
/%@@@@BA= oAB@@@@A+
&$@@@Ao" -=%@@@$&
-%@@@B= >B@@@A-
"CB@@&> >&@@@C"
@@@X- -X@@@C
C@@@& &@@@&
B@@X> >X@@B
B@@8 CB@@@@@@@@@@@@@@@@@@@@@@@@@@X& 0@@B
$@@B; B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B+ ;B@@B
C@@8 &@@@@@@@@@@@@@@@@@B@@@@@@@@@@@@@@@% ;0@@&
"@@X C@@@@@@@@@@@@@@@%: /@@@@@@@@@@@@@@@ X@@"
:X@@= B@@@@@@@@@@@@@& -@@@@@@@@@@@@@@@A o@@A.
C@@B; CC&&&&&&&C> %@@@@@@@@@@@@@@@@= ;@@@C
@@@o :8@@@@@@@@@@@@@@@@@@/ o@@@
@@B: B@@@@@XCC8@@@@@@@@@@B -@@@
o@@X X@@@@@& =@@@@@@@@@@& X@@=
C@@A ;A@@@@@@0 0@@@@@@@@@$ %@@o
&@@8 B@@@@@@@@C C@@@@@@@@@C 8@@o
C@@% $@@@@@@@@@= &@@@@@@@@@ %@@o
o@@X ;%@@@@@@@@B> o@@@@@@@@C X@@=
@@B. B@@@@@Xo o@@@@@@@B- ;@@@
@@@/ A@@@@@C o@@@@@@@A >@@@
A@@A. X@@@@8/ "B@@@@@@0 :$@@0
"@@@+ %@@@@= /@@@@@@@ =@@B;
o@@8 B@@B> >@@@@@@& A@@>
%@@o => -X@@@@@" 0@@0
@@@% -@@@@@B- :$@@B
+@@@o "@@@@@= &@@B
>@@@&- /&%&/ +%@@B
X@@@> o@@@0
%@@@C: ;%@@@C
=A@@$= /CB@@0/
+B@@@8 X@@@B/
>A@@@B&+ >0@@@B%
:oB@@@@AC &$@@@@B=.
0@@@@@@B%o=/";::..:;"+==0B@@@@@@&
=C%$@@@@@@@@@@@@@@@@@@@B%C=
.;">o&0888800&o+";.
>
>
>
------------------------------
Date: Wed, 04 Aug 1999 16:43:29 +0100
From: Martin Robinson <---@---.--->
Subject: Ambisonic manipulations and decoder
(Thanks James for the ZeroCrossing-filter-blowing tip.)
I've just finished the first bit of an Ambisonic decoder and processor that
I've been working on.
Once you've added the following methods to the Array Class you can do send
the 'decodeB' method to the output of PanB.
i.e.
PanB.ar(in, az, el, gain).decodeB
By default this outputs eight channels and assumes that the speakers are
located at the corners of a cube. However, you can supply an array as an
argument to 'decodeB' telling it where your speakers are located (at the
moment they all have to be on the surface of an imaginary sphere - until I
compensate for timing delays between speakers at different distances).
e.g.
PanB.ar(in, az, el, gain).decodeB(
[[pi/2, 0],[pi, 0],[-pi/2, 0],[0, 0],[0, pi/2],[0, -pi/2]])
Would output six channels where speakers are placed directly infront, hard
right, directly behind, hard left, directly above, and directly below(!!)
(in that order).
I've also added methods to perform soundfield manipulations on a B format
signal. rotateB(ang) rotates the image around the vertical axis by the angle
ang, tiltB(ang) rotates the image around the front-back axis and
tumbleB(ang) rotates the image around the left-right axis.
PanB.ar(in, az, el, gain).rotateB(pi/4).decode
Rotates and decodes the b format signal.
manipulateB(rotA, tilA, tumA) does all three of these manipulations.
These processes will probably work best if you have a number of PanB's
mixed.
My maths may be a bit dodgy, any help would be appreciated. It's mostly
taken from a paper by Dave Malham at:
http://www.york.ac.uk/inst/mustech/3d_audio/ambis2.htm
I bodged around with figures until they fit to work out the algorithm to
allow speakers at any position (rather than at the corners of a cube) so
that bit may be sketchy.
The methods.....
// decode B Format
decodeB { arg posArray;
// posArray should be an array or nil (default)
// each element is also an array
// [
// [azimuth, elevation],
// [], ... []
// ]
// azimuth == 0 -> left
// azimuth == pi -> right
// azimuth == pi/2 -> front
// azimuth == -pi/2 -> back etc..
// elevation == 0 -> ear-level front
// elevation == pi -> ear-level back
// elevation == pi/2 -> directly above
// elevation == -pi/2 -> directly below
// NOTE: if elevation is pi/2 or -pi/2
// azimuth is irrelevant so use 0
var aw, ax, ay, az, spkrPos;
if(posArray.isNil,
{
spkrPos = [
[pi/4, pi/4], // left-front-upper
[3pi/4, pi/4], // right-front-upper
[-3pi/4, 3pi/4], // right-rear-upper
[-pi/4, 3pi/4], // left-rear-upper
[pi/4, -pi/4], // left-front-lower
[3pi/4, -pi/4], // right-front-lower
[-3pi/4, -3pi/4],// right-rear-lower
[-pi/4, -3pi/4] // left-rear-lower
];
},
{ spkrPos = posArray }
);
^spkrPos.collect({ arg item, i;
var xc, yc, zc;
xc = (item.at(0).sin*(item.at(1)).cos.abs);
yc = (item.at(0).cos*(item.at(1)).cos.abs);
zc = item.at(1).sin;
Mix.ar([
1,
xc.abs.sqrt*xc.sign,
yc.abs.sqrt*yc.sign,
zc
]*this)
});
}
// Soundfield Manipulations
rotateB { arg ang;
var aw, ax, ay, az;
aw = this.at(0);
ax = this.at(1);
ay = this.at(2);
az = this.at(3);
^[
aw,
(ax*ang.cos)-(ay*ang.sin),
(ax*ang.sin)+(ay*ang.cos),
az
]
}
tiltB { arg ang;
var aw, ax, ay, az;
aw = this.at(0);
ax = this.at(1);
ay = this.at(2);
az = this.at(3);
^[
aw,
ax,
(ay*ang.cos)-(az*ang.sin),
(ay*ang.sin)+(az*ang.cos)
]
}
tumbleB { arg ang;
var aw, ax, ay, az;
aw = this.at(0);
ax = this.at(1);
ay = this.at(2);
az = this.at(3);
^[
aw,
(ax*ang.cos)-(az*ang.sin),
ay,
(ax*ang.sin)+(az*ang.cos)
]
}
manipulateB { arg rotA, tilA, tumA;
^this.rotateB(rotA).tiltB(tilA).tumbleB(tumA)
}
>>>>>>Martin Robinson :: (Ex)tractor :: && ________
>>><<<_sonicArts.at(middlesexUniversity.london.uk); ______
<><><>__this.liveElectronics.interFaces.diffusion ____
>><<>>___Extractor.at(bigChill_(enchantedGarden).6-8.aug.99) ___
||
------------------------------
Date: Fri, 6 Aug 1999 16:19:10 +0100
From: Arie van Schutterhoef <---@---.--->
Subject: Re:Thanks for the help with Tspawn-DelayWr-TapL.
James and Alberto,
On behalve of Pieter and Hans thanks for your responses;
Coming Sunday we'll be scratching our heads again over
this problem and things become clearer...
We'll keep you posted
AvS
>Hi all, dear Pieter,
>I have been working on something similar that may solve
>your problem.
>
>If it does not let me know.
>Best wishes,
>Alberto de Campo
>>Or: is it maybe possible when we force the sub-synths to
>>have the same block sizes?
>
>This is the default case anyway, but it doesn't help here.
>The main problem is that the spawned synth starts at a later
>time than the delaywr and doesn't know its current state.
>Also the spawned synth starts at some sample offset to the
>parent. For the next release I have added a flag to turn the
>sample accurate scheduling off and make the buffers align,
>but that still doesn't help the tap know where the delaywr is.
<<<<<<<<<<<<<<<<<<<<<<<<<-////||\\\\->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Arie van Schutterhoef
artistic director
Schreck Ensemble # -laboratory for live electro-acoustic music- #
The Netherlands
e-mail:arsche@stad.dsl.nl
http://www.xs4all.nl/~schreck/
Tel: 00-31-71-5612287 Fax: 00-31-70-3859268
<<<<<<<<<<<<<<<<<<<<<<<<<-////||\\\\->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
------------------------------
Date: Fri, 6 Aug 1999 22:13:09 -0500
From: Kenneth N Babb <---@---.--->
Subject: In C pattern programing exercise
Hello All,
I'm working on a couple of pattern programing exercises, as in this "In
C" example. Before I move on with it,
are there any suggestions to make coding this any more efficient, or
perhaps offer a better approach. I'm is the intial
stage of this project and I'm focused at the moment on getting the
pattern material programed. I will then turn some attention to other
issues such as instruments, nuance in rhythmic pattern, additional
voices, etc.
Thanks.
(
BBBB,0000,0000/*
In C
Parallel Patterns
*/
var instr1, instr2, instr3;
instr1 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[60, 64
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[60, 64,
65, 64 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
64, 65, 64 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
64, 65, 67 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 64, 65,
67, \rest ], 2))
]);
instr2 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[48, 52
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[48, 52,
53, 52 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
52, 53, 52 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
52, 53, 55 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 52, 53,
55, \rest ], 2))
]);
instr3 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[72, 76
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[72, 76,
77, 76 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
76, 77, 76 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
76, 77, 79 ], 2));
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 76, 77,
79, \rest ], 2))
]);
Ptpar([
0.0, instr1,
4.0, instr2,
8.0, instr3
] ).play(Event.protoEvent);
)
Regards,
Kennth Babb
------------------------------
Date: Fri, 6 Aug 1999 22:44:54 -0500
From: Kenneth N Babb <---@---.--->
Subject: Re: In C pattern corrections
Sorry,
There were a couple of misplaced semicolons in previous example.
(
BBBB,0000,0000/*
In C
Parallel Patterns
*/
var instr1, instr2, instr3;
instr1 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[60, 64
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[60, 64,
65, 64 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
64, 65, 64 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
64, 65, 67 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 64, 65,
67, \rest ], 2))
]);
instr2 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[48, 52
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[48, 52,
53, 52 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
52, 53, 52 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
52, 53, 55 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 52, 53,
55, \rest ], 2))
]);
instr3 = Pseq( [
Pbind(
0000,7777,0000\tempo, 2.7,
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1, 0.1, 0.1 ], 1 ),
0000,7777,0000\midinote, Pseq(#[72, 76
], 3) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.3, 0.5, 0.5, 1.0 ], 2 ),
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[72, 76,
77, 76 ], 2) ),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
76, 77, 76 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5 ], 2 ),
0000,7777,0000\legato, Pseq([\rest, 0.1,
0.1, 0.1 ], 2 ),
0000,7777,0000\midinote, Pseq(#[\rest,
76, 77, 79 ], 2)),
Pbind(
0000,7777,0000\tempo,
2.7, 0000,7777,0000\dur, Pseq([
0.5, 0.5, 0.5, 0.5], 2 ),
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ),
0000,7777,0000\midinote, Pseq(#[ 76, 77,
79, \rest ], 2))
]);
Ptpar([
0.0, instr1,
4.0, instr2,
8.0, instr3
] ).play(Event.protoEvent);
)
------------------------------
Date: Sat, 7 Aug 1999 13:22:23 +1000
From: Garth Paine <---@---.--->
Subject: Addressing OMS ports
I have noticed the following in the start-up routine for SC in the
last couple of versions, but I can't find a variable for OMS port in
any of the MIDI controller objects - am I missing something obvious
or are they not their yet? I had assumed the index number would be a
way of addressing a particular OMS port?
OMS Port ioRefNums:
'A/S3000' index: 0 refnum: 676 uniqueid: 30137
'A/S3000' index: 1 refnum: 52 uniqueid: 21945
'B/Proteus/1 XR' index: 2 refnum: 104 uniqueid: 23289
'B/Proteus/1 XR' index: 3 refnum: 728 uniqueid: 31481
'C/M3R' index: 4 refnum: 156 uniqueid: 19395
'C/M3R' index: 5 refnum: 780 uniqueid: 27587
'D/TX81Z' index: 6 refnum: 208 uniqueid: 16790
'D/TX81Z' index: 7 refnum: 832 uniqueid: 24982
'E/QuadraVerb' index: 8 refnum: 260 uniqueid: 24551
'E/QuadraVerb' index: 9 refnum: 884 uniqueid: 32743
'F/O3D' index: 10 refnum: 936 uniqueid: 26723
'F/O3D' index: 11 refnum: 312 uniqueid: 18531
'G/A-50' index: 12 refnum: 416 uniqueid: 20834
'G/A-50' index: 13 refnum: 1040 uniqueid: 29026
'H/DA38' index: 14 refnum: 364 uniqueid: 24461
'H/DA38' index: 15 refnum: 988 uniqueid: 32653
'MIDI Time Piece-Modem' index: 16 refnum: 0 uniqueid: 19513
'MIDI Time Piece-Modem' index: 17 refnum: 624 uniqueid: 27705
'QuickTime Music' index: 18 refnum: 1248 uniqueid: 24722
'Studio Patches pgm chg' index: 19 refnum: 1196 uniqueid: 29112
'ƒ IAC Bus #1' index: 20 refnum: 1144 uniqueid: 28159
'ƒ IAC Bus #1' index: 21 refnum: 468 uniqueid: 19967
OMS init
Cheers,
Garth
Check out some of the tracks off my new CD at http://www.activatedspace.com.au
,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.
Activated Space
. Composer, Sound Designer, Installation Artist
.. Interactives Designer, Exhibition Consultant
........ph. 61 3 95720133
garth@activatedspace.com.au
.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.
------------------------------
Date: Sat, 07 Aug 1999 09:09:58 -0600
From: "David Cottle" <---@---.--->
Subject: SCPlay
Hi,
This might be a small detail, but every time I download the most recent
version, which includes SCPlay, the OS always wants to open files as SCPlay
rather than SC.
According to Mac Secrets (page 594) the solutions include moving SCPlay to
another partition of the hard drive, or opening SC first, then the document,
or installing SC again either by duplicating it or moving to one drive then
back (so that the desktop-file entry for SC is newer than Player, though I
can't get this to work). Is there a better way around this? Is there a way
you can put together the .sea file so that it installs SC last?
Just wondering.
- --
><><><><><><><><><><><>
David Cottle
composition, notation, contra
lime@uiuc.edu
------------------------------
Date: Sat, 7 Aug 1999 10:34:12 -0600
From: James McCartney <---@---.--->
Subject: Re: Addressing OMS ports
At 9:22 PM -0600 8/6/99, Garth Paine wrote:
>I have noticed the following in the start-up routine for SC in the
>last couple of versions, but I can't find a variable for OMS port in
>any of the MIDI controller objects - am I missing something obvious
>or are they not their yet? I had assumed the index number would be a
>way of addressing a particular OMS port?
No there is not currently. The reason is that SC has to store an entire
set of data for any port it is listening to because you could
create a listener on any control on any channel of any port at any time
and SC has to know the most recent value that was received for that control.
This would be a lot of space.
I have not decided on the best plan yet, but there may be a small limit
on the number of input ports listened to.
--- james mccartney james@audiosynth.com http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth program:
------------------------------
Date: Sat, 7 Aug 1999 10:49:13 -0600
From: James McCartney <---@---.--->
Subject: [none]
>I'm working on a couple of pattern programing exercises, as in this
"In C" example. Before I move on with it,
>are there any suggestions to make coding this any more efficient, or
perhaps offer a better approach. I'm is the intial
>stage of this project and I'm focused at the moment on getting the
pattern material programed. I will then turn some attention to other
>issues such as instruments, nuance in rhythmic pattern, additional
voices, etc.
>
If something is going to remain the same for the entire piece then
you can put it in the protoEvent. Then it doesn't have to get copied
into each new event in a Pbind.
For example you could write:
...
).play(Event.protoEvent.make({ ~tempo = 2.7; }) );
The 'make' method allows you to make the event the currentEnvironment
and change variables. It then returns the event.
The following is another way to do the same thing:
...
).play(Event.protoEvent.put(\tempo, 2.7));
- ----
The following:
0000,7777,0000\legato, Pseq([0.1, 0.1,
0.1, 0.1 ], 2 ),
can be replaced simply by:
\legato, 0.1,
Because a constant is a infinite pattern of itself.
- ---
Another thing you could do if all of your patterns are similar is
to define a function to help define the patterns like I did in the
Slonimsky and Cope examples
motif = { arg midinote, dur, legato = 0.1;
Pbind(\midinote, midinote, \dur, dur, \legato, legato);
};
Then instead of this:
Pbind(
0000,7777,0000\dur, Pseq([ 0.3, 1.0,
0.3, 1.0, 0.3, 1.0 ], 1 ),
0000,7777,0000\legato, 0.1,
0000,7777,0000\midinote, Pseq(#[60, 64
], 3)
),
You could write:
motif.value(
Pseq(#[60, 64 ], 3),
Pseq([ 0.3, 1.0, 0.3, 1.0, 0.3, 1.0 ], 1 )
),
- ----
\rest is only a legal value for pitch arguments, not duration.
0000,7777,0000\legato, Pseq([ 0.1, 0.1,
0.1, \rest ], 2 ) // this is wrong.
- ----
--- james mccartney james@audiosynth.com
http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth
program:
<
------------------------------
Date: Sat, 7 Aug 1999 11:01:52 -0600
From: James McCartney <---@---.--->
Subject: Re: In C pattern corrections
It looks to me like the only difference between your instruments
is the octave. Rather than writing the whole thing out each time,
you should use transformation to get what you want. That is sort of
the point of patterns: that you can instantiate multiple copies from
a single pattern and that you can alter a pattern by applying filters
to it.
If you use \note instead of \midinote then you have more control.
\note is a gamut tuning system with any number of notes per octave,
but the default is 12. Another difference is that \note is relative
to the value of \octave and \root, whereas \midinote is absolute.
The default value for \octave is 5 and \root is 0.
So rather than write
Pbind(\midinote, Pseq(#[60, 64 ], 3), ...
You can write:
Pbind(\note, Pseq(#[0, 4], 3), ...
Then you can write:
instr1 = Pseq([
....
]);
instr2 = Padd(\octave, -1, instr1);
instr3 = Padd(\octave, 1, instr1);
Or if you want to leave it in \midinote's you can write:
instr1 = Pseq([
....
]);
instr2 = Padd(\ctranspose, -12, instr1);
instr3 = Padd(\ctranspose, 12, instr1);
--- james mccartney james@audiosynth.com http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth program:
------------------------------
Date: Sat, 7 Aug 1999 11:04:04 -0600
From: James McCartney <---@---.--->
Subject: should have been "In C pattern..."
Oops.
The previous message should have been "In C pattern..."
--- james mccartney james@audiosynth.com http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth program:
------------------------------
Date: Mon, 09 Aug 1999 10:51:25 -0600
From: "David Cottle" <---@---.--->
Subject: Array doc
Hi,
In Array.help there is no documentation for
lace, permute, wrapExtend, or foldExtend
------------------------------
Date: Mon, 9 Aug 1999 11:09:10 -0700
From: csz@wco.com (Carter Scholz)
Subject: Re: SCPlay
David Cottle wrote:
>This might be a small detail, but every time I download the most recent
>version, which includes SCPlay, the OS always wants to open files as SCPlay
>rather than SC.
>
This happens because SCPlay (2.1.8) has a more recent creation
date than SC. Use Norton or a similar utility to change SCPlay's
creation date, then rebuild the desktop.
------------------------------
Date: Mon, 09 Aug 1999 14:12:07 -0600
From: "David Cottle" <---@---.--->
Subject: Re: SCPlay
Hi,
>>This might be a small detail, but every time I download the most recent
>>version, which includes SCPlay, the OS always wants to open files as SCPlay
>>rather than SC.
>>
>
> This happens because SCPlay (2.1.8) has a more recent creation
> date than SC. Use Norton or a similar utility to change SCPlay's
> creation date, then rebuild the desktop.
>
Right. But isn't it also the installation date? For example, can't I install
SC regular after Play and it should select the regular? Or are they seen as
two different versions of the same program?
Either way, my suggestion stands. Maybe James can compile the Play version
before the regular version.
------------------------------
Date: Mon, 09 Aug 1999 15:25:03 -0600
From: "David Cottle" <---@---.--->
Subject: SCPlayer
Hi,
I've been working on compiling some examples to distribute and I have two
questions:
Where would I put a message that would only come up once, at the end of the
compile? I want the user to stop and start the run several times to see that
different pitches are being chosen each time. Every time they start the
process they get the message, since it is in the run function. I would like
them to just see it once.
The Library menu apparently has some restrictions on what you can and can't
put in there. I tried one of my markov chains (and the BYU demo) and it gave
an error and every time I tried to close the Mix window I got an error. (Had
to quit and relaunch.) What are the limitations? Is there a way to work
around it? Or is this a bug?
------------------------------
Date: Mon, 09 Aug 1999 17:40:27 -0400
From: "N. Kent" <---@---.--->
Subject: Re: SCPlay
David Cottle wrote:
>
> Hi,
>
> >>This might be a small detail, but every time I download the most recent
> >>version, which includes SCPlay, the OS always wants to open files as SCPlay
> >>rather than SC.
> >>
> >
> > This happens because SCPlay (2.1.8) has a more recent creation
> > date than SC. Use Norton or a similar utility to change SCPlay's
> > creation date, then rebuild the desktop.
> >
>
> Right. But isn't it also the installation date? For example, can't I install
> SC regular after Play and it should select the regular? Or are they seen as
> two different versions of the same program?
>
> Either way, my suggestion stands. Maybe James can compile the Play version
> before the regular version.
I've found a simple workaround. Since I don't need SCPlay on a day to
day basis, I just stuffed it and left it there until I need it.
nick kent
------------------------------
Date: Tue, 10 Aug 1999 02:19:34 +0200
From: Martin Stepanek <---@---.--->
Subject: GUI-Dialog to Load Samples & Save Audio
tried to figure out how to implement this but wasnt able to find any hints
in the examples, tutorials, etc....
how is it possible to let the user decide which Sample is loaded into RAM
for processing in a supercollider-patch?
and:
how is it possible to let the user decide when he wants to record audio
into a file, how he wants to name that file and in which folder to put that
file?
thanx in advance,
martin
------------------------------
Date: Mon, 09 Aug 1999 19:44:37 -0600
From: "David Cottle" <---@---.--->
Subject: Re: SCPlay
Hi,
> I've found a simple workaround. Since I don't need SCPlay on a day to
> day basis, I just stuffed it and left it there until I need it.
I put it on another partition.
------------------------------
Date: Thu, 12 Aug 1999 00:51:51 -0600
From: "David Cottle" <---@---.--->
Subject: File read and write
Hi,
I've been trying to get file read and write to work. The help doesn't make
sense:
"r" - read only text
"w" - read and write text
"a" - read and append text
"rb" - read only binary
"wb" - read and write binary
"ab" - read and append binary
"r+" - read only text
"w+" - read and write text
"a+" - read and append text
"rb+" - read only binary
"wb+" - read and write binary
"ab+" - read and append binary
What is the difference between r and r+?
I could get the "r" to work, but not the "w". Could you show me a simple
example? There are no examples in the help file.
------------------------------
Date: Thu, 12 Aug 1999 03:06:42 -0600
From: James McCartney <---@---.--->
Subject: Re: File read and write
At 12:51 AM -0600 8/12/99, David Cottle wrote:
I could get the "r" to work, but not the "w". Could you show me a
simple
>example? There are no examples in the help file.
f = File("test","w");
f.write("Does this work?\nuh huh\n");
f.close;
g = File("test","r");
g.readAllString.postln;
g.close;
h = File("test2", "wb");
h.write( FloatArray[1.1, 2.2, 3.3, pi, 3.sqrt] );
h.close;
k = File("test2", "rb");
(k.length div: 4).do({ k.getFloat.postln; });
k.close;
--- james mccartney james@audiosynth.com
http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth
program:
<
------------------------------
Date: Thu, 12 Aug 1999 03:12:23 -0600
From: James McCartney <---@---.--->
Subject: Re: File read and write
At 12:51 AM -0600 8/12/99, David Cottle wrote:
>What is the difference between r and r+?
Well for now since there is no fflush equivalent, don't use the
"+" versions.
The codes parallel the codes for fopen which can be found explained
better here:
http://www.unix-systems.org/onlinepubs/7908799/xsh/fopen.html
--- james mccartney james@audiosynth.com http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth program:
------------------------------
Date: Thu, 12 Aug 1999 09:01:55 -0600
From: James McCartney <---@---.--->
Subject: Re: GUI-Dialog to Load Samples & Save Audio
At 6:19 PM -0600 8/9/99, Martin Stepanek wrote:
>tried to figure out how to implement this but wasnt able to find any
hints
>in the examples, tutorials, etc....
>
>how is it possible to let the user decide which Sample is loaded into
RAM
>for processing in a supercollider-patch?
>
>and:
>how is it possible to let the user decide when he wants to record
audio
>into a file, how he wants to name that file and in which folder to put
that
>file?
>
>thanx in advance,
>martin
The calls to XXXDialog.new return immediately, *before* the dialog has
been dismissed.
Because the dialog calls are asynchronous, any reaction to the dialog
must be in the action function.
(
// get a file
var filename, sound, signal;
GetFileDialog.new({ arg ok, path;
if (ok, {
sound = SoundFile.new;
if (sound.read(path), {
signal = sound.data.at(0);
Synth.play({ PlayBuf.ar(signal, sound.sampleRate,
1, 0, 0, signal.size-2) });
},{ (path ++ " not found.\n").post });
});
});
)
(
// put a file
var filename, sound, signal;
PutFileDialog.new("Record:", "PinkNoise.aiff", { arg ok, path;
if (ok, {
Synth.record({ PinkNoise.ar(0.2) }, 4, path);
});
});
)
(
// get and put a file
var filename, sound, signal;
GetFileDialog.new({ arg ok, getpath;
if (ok, {
sound = SoundFile.new;
if (sound.read(getpath), {
PutFileDialog.new("Record:", "Test_99.aiff", { arg ok,
putpath;
if (ok, {
signal = sound.data.at(0);
Synth.record({
PlayBuf.ar(signal, sound.sampleRate,
1, 0, 0, signal.size-2)
}, 4, putpath);
})
});
},{ (getpath ++ " not found.\n").post });
});
});
)
--- james mccartney james@audiosynth.com
http://www.audiosynth.com
If you have a PowerMac check out SuperCollider2, a real time synth
program:
<
------------------------------
Date: Thu, 12 Aug 1999 08:31:37 -0600
From: "David Cottle" <---@---.--->
Subject: Re: File read and write
Hi,
>>example? There are no examples in the help file.
>
> f = File("test","w");
> f.write("Does this work?\nuh huh\n");
> f.close;
>
> g = File("test","r");
> g.readAllString.postln;
> g.close;
I thought I had tried it this way but I guess not. How about putChar. I've
tried
g.putChar("w");
and
g.putChar('w');
------------------------------
End of sc-users-digest V1 #54
*****************************