Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support beat-oriented composition and transformation, via 'weighted cycles' #987

Closed
yaxu opened this issue Mar 14, 2024 · 7 comments
Closed

Comments

@yaxu
Copy link
Member

yaxu commented Mar 14, 2024

By an accident of implementation, the mininotation currently adds a __weight property to mininotation, that gives the number of 'steps' at the highest level of the sequence, e.g. a [b c] [email protected] has a weight of 2.5.

The 'guessing-timeCat' branch explores how this could support more beat-oriented functionality. It's named that first of all because timeCat can use this weight instead of having to have it explicitly specified for every pattern.

The branch also has a beatCat function that accepts lists of lists of patterns, cycling between the elements within each sublist.

It also adds a '__pure' property to 'pure' patterns, with a view to maintaining the weight across transformations such as 'fast' when pure values are used (it's not really possible to calculate a weight when patterned factors are passed to fast, unless the weight itself is a pattern)

@yaxu
Copy link
Member Author

yaxu commented Mar 14, 2024

With b1b91fc , "a b c".fast("2") now has the correct weight of 6.

@yaxu
Copy link
Member Author

yaxu commented Mar 15, 2024

Now polymeter("a b", "c d e") works.

@yaxu
Copy link
Member Author

yaxu commented Mar 31, 2024

It would be nice if "x(3,8)" had a weight/tactus of 8.
Perhaps

"x(3,8)".tactus  === 8
"[x(3,8)]".tactus  === 1
"x(3,8) x".tactus  === 2
"x(3,8)@4".tactus  === 4 // already works
"[^x(3,8)]  x".tactus  === 16

@yaxu
Copy link
Member Author

yaxu commented Mar 31, 2024

It doesn't really make sense that x(3,8) has a higher tactus of 8 than x(3,8) x(3,8)'s 2 though.

Alternatively we could accept a breaking change and make "x(3,8) x" have a tactus of 9, with the euclid not in a subcycle, so more like ! than *. Or maybe we should have similar syntax to indicate the level with euclid. For example

"x(3,8)".tactus === 1
"x!(3,8)".tactus === 8
// which implies..
"x*(3,8)".tactus === 1

A bit messy though. :/

Another possibility:

"x(3,^8)".tactus === 8
"x(3,^8) x".tactus === 9

@yaxu
Copy link
Member Author

yaxu commented Apr 18, 2024

Worked a lot of things out in this Tidal PR, needs back-back-porting here !
tidalcycles/Tidal#1072

@yaxu
Copy link
Member Author

yaxu commented May 3, 2024

Rather than using lcm for combining tacti, it might be better to just take the maximum by default, with the possibility to override that by marking where the tactus should come from

@yaxu
Copy link
Member Author

yaxu commented Oct 29, 2024

This is kind-of working now. I'll make a fresh issue for tidying things up.

@yaxu yaxu closed this as completed Oct 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant