[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-users] Re: top five sclang pet peeves



Lucas Samaruga wrote
> - Pattern notation is clumsy for the task at hand.
> 
> After learning a bit of Tidal I can confirm this is my long standing pet
> peeve. I think it doesn't has much to do with the library but the needed
> syntax or its interface.

> Pattern notation is clumsy for the task at hand.

It's worth stating why this is. I have a few reasons.

*** Synchronizing the value patterns within Pbind.

Pbind is beautiful when there doesn't need to be tight synchronization
between parameters streams. This is great for a lot of atmospheric,
free-rhythm textures, but it's terrible for metrical organization.

Pdef(\bass, Pbind(
	... instrument, etc.
	\degree, Pseq([0, 7, 4, 3], inf),
	\dur, Pseq([1, 1, 1, 1], inf),
));

Now I want to insert an eighth-note.

Pdef(\bass, Pbind(
	... instrument, etc.
	\degree, Pseq([0, 7, 4, 10, 3], inf),
	\dur, Pseq([1, 1, 0.5, 0.5, 1], inf),
));

Quite a few opportunities to make a mistake there. And if you want to insert
the eighth note into any empty 8th slot? Good luck... pretty much Pn(Plazy {
Pbind() }, inf) is the only way.

In my live-coding system, I can do this:

/bass = "1854";  // 1 is tonic, not 0

/bass = "1|8|5\ins(, "4'", 1, 0.5)|4";  // same as above

/bass = "\ins("1854", "4'", 1, 0.5)";  // any empty 8th

... because my system (as does Tidal) encodes data and rhythm at the same
time. This has other limits, though. I'd wager the following would be hard
in Tidal.

(
p = Pbind(
	\midinote, Ppatlace([
		Pwhite(48.0, 50.0, inf),
		Pn(
			Pwhite(
				54.0,
				Pseries(56.0, Pwhite(0.25, 1.0, inf), { rrand(10, 25) }),
				inf
			),
			inf
		)
	], inf),
	\dur, Pn(
		Pexprand(0.04, 0.1, inf) * Pgeom(1, Pwhite(1.08, 1.2, inf), { rrand(6, 12)
}),
		inf
	)
).play;
)

*** Patterns are incomplete as a pure-functional system

Patterns are supposed to be stateless, but in practice, you have to embed
all kinds of Pfunc, .collect, Prout, Pspawner etc. to do really interesting
things.

*** Event patterns don't have a good way to encode dependencies

In practice, an event pattern playing a musical element needs other "stuff"
-- buses, buffers, data storage etc. but all of these are best handled
outside the pattern system itself. There was an attempt with Pproto, but it
doesn't support everything, and it doesn't sync loading cleanly.

I deal with it using PR/BP from my ddwChucklib library. I don't know if I
would call this a general solution, though.

hjh



--
Sent from: http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/SuperCollider-Users-New-Use-this-f2676391.html

_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/