This thread is open for code review, improvements, ideas, or general discussion regarding the nature of the topic.
With classes Tuning & Scale working in tandem with each other, it seems natural that one would search for a way to achieve all possible combinations.
With rudimentary knowledge of how scales and temperaments work in theory, and while browsing the class sources, I noticed the only active restriction for Tuning & Scale combinations is a compatibility check ensuring .pitchesPerOctave
for scale matches the .size
of it’s tuning argument.
This amounts to a total of one-thousand and ninety-nine possible combinations, using only the core library.
Requests for feedback are mostly aimed towards improving & extending the code, discussion of best practices…or, anything regarding the process or experience of tuning SC.
((
this.d_
(
Dictionary.fill
(
Tuning.names.size,
{
|index|
Tuning.names[index] ->
Scale.names.select
{
|scale|
Tuning.perform
(
Tuning.names[index]
)
.size === pitchesPerOctave
(
Scale.perform(scale)
)
}
.as(IdentitySet)
.add(\chromatic)
.as(SortedList)
}
)
)
.d
.pairsDo
{
|t s|
Post << Char.vtab <<< t
<< $\n << $\n <<<* s
<< $\n << $\n
}
.flatSize
.postln
))