ユークリッドリズム

古代ギリシャの数学者、ユークリッドが発明した最大公約数を求める手順(ユークリッド互除法)から導き出させるリズムで、音楽のリズムパターンを表すことができることから、とても興味深い対象としてざまざまな使われ方がされています。
まずユークリッド互除法による最大公約数をもとめるプログラムをスクラッチで作ってみました。

左側は値の初期化でアルゴリズムとは関係がないのと見やすさから分離しました。英語バージョンなのは余り計算(mod)が日本語だと翻訳の関係で逆になっていたのでこのようにしました。
余り計算の結果を置き換えて次の計算をするところが、ユークリッドリズムの計算にも似ていることからこのように呼ばれるようです。
具体的にどのようなリズムのことなのか理解するのには、このブログでも過去に使っているSonicPiがとても便利です。SonicPiにはspreadという関数が用意されています。
16ビートを例に、1が16分音符(発音)、0が16分休符という意味として下記のリズムを生成します。
発音する1をまず左づめにして右から左にペアを作る要領で均等にばらしていきます。

spread(4,16)
[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
[1,0][1,0][1,0][1,0] [0][0][0][0] [0][0][0][0]
[1,0,0][1,0,0][1,0,0][1,0,0] [0][0][0][0]
[1,0,0,0][1,0,0,0][1,0,0,0][1,0,0,0]

16の中に4つを均等にばらしていくのは、割り切れるため理解しやすいですが、割り切れないときにこの法則が固有のリズムを作ります。

spread(9,16)
[1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0]
[1,0][1,0][1,0] [1,0][1,0][1,0][1,0] [1][1]
[1,0,1] [1,0,1] [1,0][1,0][1,0][1,0][1,0]
[1,0,1,1,0] [1,0,1,1,0] [1,0][1,0][1,0]
[1,0,1,1,0,1,0] [1,0,1,1,0,1,0] [1,0]  ※余りが1つになったら終了
[1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0]

SonicPiで確認もできます。

実際にリズムを作ってみました。
二つのリズムは、変化をつけるためにピッチをランダムにしてみました。

アルゴリズムと音楽の関係に新しい発見の一助となれば幸いです。

参考)
https://miso-soup3.hateblo.jp/entry/2019/06/02/161455
https://fantasysound.net/2019/07/28/euclidean-rhythm/