TydalCyclesで乱数を用いた楽曲の制作方法について紹介します。
まず、一般的な乱数を用いる方法として、以下のような例が挙げられます。
d1 $ s "bd" # n (irand 5)
d2 $ s "cp" # pan rand
d3 $ s "arpy" # up (choose[0,4,7])
上記のような方法を取る場合、課題として、1サイクル(1小節)以下の短いスパンでしか、乱数を適用できない、という点があります。
例えば、任意のタイミングで音色をランダムに変えたい、という場合、TydalCyclesで用意された記法では実現不可能です。
参考:https://tidalcycles.org/index.php/Randomness
そこで、別の方法で乱数を生成し、生成した値を変数を経由して楽器(d1,d2等)に適用することにします。
Haskellは副作用を許容しない言語なので、乱数を用いる場合は以下の工夫が必要です。
- System.Randomモジュールをインポートする
- アクション(<-)を用いる
例えば、以下の記述により、変数randnumに0~10のランダムな整数を格納できます。
import System.Random
randnum <- randomRIO (0, 10)
randnum
import文は1度のみ実行してください。
次のアクションの行を実行する度に、取得する値が変わります。
(randnumのみの行を実行することで取得した値を確認できます)
次にrandnumを先ほどのキックの楽器(d1)の音色に適用します。
d1 $ s "808" # n randnum -- エラーとなる
d1 $ s "808" # n (fromIntegral randnum) -- 成功
素直に1行目のように書くと、n関数の引数はDouble型ですが、変数randnumはInteger型であるためエラーとなります。(厳密には、Num型であるべきだがIntegral型のためにエラー)
2行目のようにfromIntegral関数を使うことで、Num型へ型変換が行われ、エラーを解消できます。
これで、キックの音色を好きなタイミングでランダムに変更することができました!
次回は、リストを使ったもう少し複雑な例を紹介します。