In the docs for HLayout I came across an asterisk in front of an array.
(
w = Window().front;
a = { Button(w) } ! 10;
w.layout = HLayout(*a);
);
Can anybody tell me what the asterisk means in this context?
In the docs for HLayout I came across an asterisk in front of an array.
(
w = Window().front;
a = { Button(w) } ! 10;
w.layout = HLayout(*a);
);
Can anybody tell me what the asterisk means in this context?
It’s mentioned in Symbolic Notations help but not explained very well.
Basically it’s a shorter syntax for performList
– Object | SuperCollider 3.12.2 Help
hjh
I see, thanks! It’s not widely used in the documentation, actually I don’t think I’ve seen it outside of the HLayout documentation. But I guess it makes sense as the layout objects are one of the only objects in SC that takes n arguments instead of an array as argument.
mySynth.set(\freq, 440, \pan, -0.6, \amp, 0.2);
mySynth.set(*[\freq, 440, \pan, -0.6, \amp, 0.2]);
Pbind is another, as is sendBundle
. It may be more common than you think.
hjh
Ah yes, very interesting, never thought of that usage! It looks very convenient!
It may be more common than you think
I noticed the example at the top of Dictionary
for Dictionary.with
… & I’m hooked.
A quick example:
Hardware specifications for “system exclusive” messages (sort of like command codes instilled in the firmware level of the hardware) always involve a specific 8-bit Integer header and footer that is exactly the same for every message you want to send to it… the only changes are made to the varying types of command messages in between the header & footer specs.
I find the cleanest way is to do it like this… where:
| ...msg| // is collected as one msg array & can be as long as you want
~sysex =
{
|...msg|
~send.sysex(Int8Array.with(-16, 4, 6, 13, 21, * msg putLast: -9 )
}
Note that you can’t: , * msg , 9 // comma causes failure
Instead you have to: , * msg ++ 9 // valid
The message must either finish with * etc, or have a method attached to the end.
This looks very useful as well! I didn’t know about .with
either.
.with
creates a Collection via:
Set.with(8, 9, 7, 10, 13, 11)
IdentitySet.with(\etc)
OrderedIdentitySet.with( * (..10) )
It’s a class method, so when
~object.isKindOf(Collection)
then this will always be:
~object.class.respondsTo(\with) // -> true
There’s one offset exception I’m aware of … for Array2D
, 'with'
happens to double as an instance method.
((
~scale =
(
Array2D
(
7 , 7
)
.with
(
(
(
1, (1+7) .. (1+ ( 7.squared -7 ))
)
+.x
(
.. (7-1)
)
)
.collect
{
|x| Scale.ionian.degreeToFreq // choose ( Scale , 7 )
(
degree: x
, rootFreq: 432
, octave: -4
)
}
)
)
))
;
~scale [ 0 , 0 ] // octave , note
;
~scale [ 6 , 6 ] // end frequency
;
~scale.array.printAll.size