fixToScale
does make so much more sense!
About using predefined scales here, crucially the missing piece for me is being able to extract the scale intervals from a named scale. My original idea posted here was to undo the scale
function (rounding down or something to any values that didn't fit), applying some transformation, then re-applying the scale
. If I could figure out how to get access to the scale intervals, I probably could have done that. But my Haskell skills are worse now than they were a year ago.
The problem with using named scales in fixToScale
is that while it works nicely with diatonic scales (where there is at most a major second between intervals), if there were a minor third between adjacent steps, the function would need to be applied twice; for a major third, three times etc.
I still think undo scale -> apply function -> redo scale is the best way to go for this kind of patterning - if we can figure out how to get the interval list from a scale.