まねっこ(リズムの転回)

リズムの転回というブログの記事を読んで(プライベートになっていて読めなくなっちゃってますがキャッシュで残っている)、

例えば、4分音符を1にして2分音符は2にし8分音符は1/2としましょう。2分音符の逆数は8分音符となります、というかします。でも配列だったら一括でどう計算しますか?

なるほどChucKで作ってみた。しかしもう少し綺麗に書きたいなと。

fun float[] rythtenkai(float ryth[])
{
   ryth.cap() => int rythlen;
   float rythrecip[rythlen];
   float rythemlen;
   float rythreciplen;
   for( 0 => int i; i < rythlen; i++)
   {
      ryth[i] +=> rythemlen;
      1.0 / ryth[i] => rythrecip[i];
      rythrecip[i] +=> rythreciplen;
   }
   float rythrecipnormalize[rythlen];
   for( 0 => int i; i < rythlen; i++)
   {
      rythrecip[i] / rythreciplen * rythemlen => rythrecipnormalize[i];
   }
   return rythrecipnormalize;
}
rythtenkai([1, 1.5, 2, 1.25, 0.25]) @=> float tenkai[];
<<<tenkai[0]>>>;

配列[1, 1.5, 2, 1.25, 0.25]のトータル時間をrythemlen、配列の逆数の配列rythrecip、そのトータル時間rythreciplenを導く。配列rythrecipの要素をrythreciplenで割りrythemlenを掛ける。