phonetic-languages-rhythmicity-0.11.0.2: Allows to estimate the rhythmicity properties for the text
Copyright(c) Oleksandr Zhabenko 2021-2023
LicenseMIT
Maintaineroleksandr.zhabenko@yahoo.com
StabilityExperimental
Safe HaskellSafe-Inferred
LanguageHaskell2010
Extensions
  • BangPatterns
  • MultiWayIf

Phladiprelio.Rhythmicity.PolyRhythm

Description

The module is highly experimental approach to estimate further the rhythmicity (using some extent of the music concept of polyrhythm) of the not very long lists (well, not longer than e. g. 30 elements). Is rather computationally expensive, so must be used with caution. If the period of rhythm is less than 5 or even 6 it is not effective.

Synopsis

Documentation

data Marker4s Source #

The data type that is used to mark the syllables accordingly to their importance in general rhythm constituting. More important syllables are marked with the less data constuctors (since the data type has an instance of the Ord type class). Contrary to PolyMarkers and Marker3s, can be used in case of three levels of importance for rhythm constituting with the last, fourth G level of the syllables which position is thought as not significant (though it actually, is not, but for simplicity).

Constructors

D 
E 
F 
G 

newtype PolyMarkers Source #

The data type that is used to mark the syllables accordingly to their importance in general rhythm constituting. More important syllables are marked with the less data constuctors (since the data type has an instance of the Ord type class). A generalization of the Marker4s and Marker3s for the cases of multiple (may be 4, or 3, or more) levels of importance in general rhythm constituting.

Constructors

PolyMs Char 

data PolyMrks Source #

A data type is used to allow usage of the Marker4s and PolyMarkers data types in the functions as just one single (unified) data type.

Constructors

R4 Marker4s 
RP PolyMarkers 

data PolyRhythmBasis Source #

Data to specify some quantitative information of the structure of rhythmicity.

Constructors

PolyRhythm [Int] 

data PolyChoices Source #

Data to specify (mostly) the qualitative information of the structure of rhythmicity.

Constructors

PolyCh 

Fields

Instances

Instances details
Eq PolyChoices Source # 
Instance details

Defined in Phladiprelio.Rhythmicity.PolyRhythm

validPolyChRhPair Source #

Arguments

:: PolyChoices 
-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> Bool 

The predicate to check whether the two given arguments can be used together to get meaningful results. The pqty of the first argument must be equal to the sum of the PolyRhythmBasis Int values inside the list. There are also other logical constraints that the function takes into account.

data Intermediate a Source #

Auxiliary data type that is used internally in the getPolyChRhData function in the module.

Constructors

J a 
I PolyMarkers 

getPolyChRhData Source #

Arguments

:: Ord a 
=> Char

The start of the RP PolyMarkers count in case of PolyMrks with Chars. The usual one can be 'a' or 'h'.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> [[PolyMrks]] 

similarityF1 Source #

Arguments

:: Char

The start of the counting.

-> PolyMrks 
-> PolyMrks 
-> Double

The initial value.

-> Double 

similarityF0 Source #

Arguments

:: Char

The start of the counting.

-> PolyMrks 
-> PolyMrks 
-> Double

The initial value.

-> Double 

The more straightforward variant of the similarityF1 function.

similarityLogics Source #

Arguments

:: Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

The function that uses a simple arithmetic logics to calculate the similarity of the two equal by length (if not they are truncated to the least one) lists of PolyMrks. Uses both increasing and decreasing functions.

similarityLogics0 Source #

Arguments

:: Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

The more straightforward variant of the similarityLogics function.

similarityLogicsGE Source #

Arguments

:: Double 
-> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 
 

similarityLogicsG1 Source #

Arguments

:: Double 
-> (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 
 

similarityLogicsG12 Source #

Arguments

:: Double 
-> (Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 
 

similarityLogicsGE0 Source #

Arguments

:: Double 
-> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 

The more straightforward variant of the similarityLogicsGE function.

similarityLogicsG0 Source #

Arguments

:: Double 
-> (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 
 

similarityLogicsG02 Source #

Arguments

:: Double 
-> (Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

An initial value.

-> [PolyMrks] 
-> [PolyMrks] 
-> Double 
 

similarityPoly Source #

Arguments

:: Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [[PolyMrks]] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

The function that uses a simple arithmetic logics to calculate the similarity of the two equal by length (if not they are truncated to the least one) lists of PolyMrks. Uses similarityLogics inside.

similarityPoly2 Source #

Arguments

:: [PolyMrks] 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [[PolyMrks]] 
-> Double 
 

similarityPolyGEE Source #

Arguments

:: (Int, [PolyMrks]) 
-> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

similarityPolyGE Source #

Arguments

:: Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 

similarityPolyG1 Source #

Arguments

:: (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

similarityPolyG12 Source #

Arguments

:: (Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

similarityPoly0 Source #

Arguments

:: Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [[PolyMrks]] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

The function that uses a simple arithmetic logics to calculate the similarity of the two equal by length (if not they are truncated to the least one) lists of PolyMrks. Uses similarityLogics0 inside. The more straightforward variant of the similarityPoly function.

similarityPoly20 Source #

Arguments

:: [PolyMrks] 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [[PolyMrks]] 
-> Double 
 

similarityPolyGEE0 Source #

Arguments

:: (Int, [PolyMrks]) 
-> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

similarityPolyGE0 Source #

Arguments

:: Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 

similarityPolyG0 Source #

Arguments

:: (Int -> Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

similarityPolyG02 Source #

Arguments

:: (Double -> Double -> Double) 
-> Char

The start of the counting.

-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> [(Int, [PolyMrks])] 
-> Double 
 

rhythmicityPoly Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

General function to estimate the inner rhythmicity of the Ordered list of values. For many cases its arguments can be guessed or approximated by some reasonable values. Nevertheless, it is a highly experimental one.

rhythmicityPolyGE Source #

Arguments

:: Ord a 
=> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

General function to estimate the inner rhythmicity of the Ordered list of values. For many cases its arguments can be guessed or approximated by some reasonable values. Nevertheless, it is a highly experimental one.

rhythmicityPolyG1 Source #

Arguments

:: Ord a 
=> (Int -> Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyG12 Source #

Arguments

:: Ord a 
=> (Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyGE0 Source #

Arguments

:: Ord a 
=> Either (Double -> Double -> Double) (Int -> Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

General function to estimate the inner rhythmicity of the Ordered list of values. For many cases its arguments can be guessed or approximated by some reasonable values. Nevertheless, it is a highly experimental one.

rhythmicityPolyG01 Source #

Arguments

:: Ord a 
=> (Int -> Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyG02 Source #

Arguments

:: Ord a 
=> (Double -> Double -> Double) 
-> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPoly0 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double

The greater one corresponds to (probably) more rhythmic list.

General function to estimate the inner rhythmicity of the Ordered list of values. For many cases its arguments can be guessed or approximated by some reasonable values. Nevertheless, it is a highly experimental one. The more straightforward variant of the rhythmicityPoly function.

simpleF2 :: Double -> Double -> Double Source #

This function tries to increase the importance of the beginning of the line and decreases the importance of the ending of the line. It is not a linear one.

simpleEndF2 :: Double -> Double -> Double Source #

This function tries to increase the importance of the ending of the line and decreases the importance of the beginning of the line. It is not a linear one.

rhythmicityPolyWeightedF2 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedF3 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedF20 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedF30 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedEF2 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedEF3 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedEF20 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedEF30 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

linearF2 :: Double -> Double -> Double Source #

This function tries to increase the importance of the beginning of the line and decreases the importance of the ending of the line. It is linear.

linearEndF2 :: Double -> Double -> Double Source #

This function tries to increase the importance of the ending of the line and decreases the importance of the beginning of the line. It is linear.

rhythmicityPolyWeightedLF2 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLF3 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLF20 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLF30 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLEF2 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLEF3 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLEF20 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

rhythmicityPolyWeightedLEF30 Source #

Arguments

:: Ord a 
=> Double

The initial value starting from which it counts. Usually, equals to 1.0.

-> Int

If the argument is less or equal to 4, then Marker4s is used, if it is greater than 4, then PolyMarkers is used.

-> PolyChoices

Data specifies the structure of the period of rhythmicity -- whether maximum or minimum elements are considered and how many syllables costitute the period.

-> PolyRhythmBasis

Data specifies the quantities of the syllables on the corresponding levels of importance.

-> [a] 
-> Double 

data ParseChRh Source #

Data type that is used to implement some parameter language to encode in the String argument information that is sufficient to transform the String into Double using the needed additional information provided by some other means.

Constructors

P0 String 
P1 Choices RhythmBasis Int

The number of the one of the functions to convert the phonetic languages elements into Double values (usually, durations).

P2 

Fields

Instances

Instances details
Eq ParseChRh Source # 
Instance details

Defined in Phladiprelio.Rhythmicity.PolyRhythm

readRhythmicity :: String -> Maybe ParseChRh Source #

A parser function to get the ParseChRh data. In case of success returns Just ParseChRh value. Nevertheless, the further checks (e. g. validPolyChRhPair or validChRhPair) is not applied by it, so they must be applied further during the usage. Examples of the usage: "c114+112=2" returns Just P1 (Ch 1 1 4) (Rhythm 1 1 2) 2 "Mtttff7+112111=7*3" returns Just P2 (PolyCh [True,True,True,False,False] 7) (PolyRhythm [1,1,2,1,1,1]) 7 3.