1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TidalCycles】ある条件式が成り立つ場合のみにエフェクトをかける

Posted at

はじめに

TidalCyclesは、Haskellライクなコードによってリズムパターンを生成できるソフトウェアです。
個人的にTidalCyclesで作曲していて、記事も書いているのでこちらもぜひみてください!

ある条件のサイクル数のときに処理を実行する

公式のドキュメントにいろいろな方法が紹介されています。

またこれらについて、Qiitaでも詳しく記事を書いているので是非みてください

ある条件を満たしたときに処理を実行する

ただ、この方法だと、サイクル数起点でしか処理・エフェクトを適用できません。
例えば以下のように「d1,d2だけに同時にローパスフィルタをかける」みたいなことがしたいとします。

do
  let
    elem' xs x = elem x xs
    mod' y x = mod x y
  d1
    -- $ (# lpf 400)
    $ ifp ((elem' [0..2]).(mod' 4)) (# up "<0,-5>") (# up "<-1,-3>")
    $ s "house!2 [~ house] ~ house"
    # n 1 # gain 0.5 # room 0.2 # sz 0.8
    # hpf (range 50 300 (slow 4 $ sine)) # pan 0.3
  d2
    -- $ (# lpf 2000)
    $ s "~ ~ ~ tabla" # n (choose [15,3,4,5,10]) # pan rand
  d3
    $ s "click:2*2" # lpf 500 # gain 1.1

2つのコメントアウトを外してローパスフィルターをかけるのは面倒なので、例えば以下のような書き方ができると使い勝手がよさそうです

do
  let
    lpfOn = 0
    elem' xs x = elem x xs
    mod' y x = mod x y
  d1
    $ ifb (lpfOn==1) (# lpf 400)
    $ ifp ((elem' [0..2]).(mod' 4)) (# up "<0,-5>") (# up "<-1,-3>")
    $ s "house!2 [~ house] ~ house"
    # n 1 # gain 0.5 # room 0.2 # sz 0.8
    # hpf (range 50 300 (slow 4 $ sine)) # pan 0.3
  d2
    $ ifb (lpfOn==1) (# lpf 2000)
    $ s "~ ~ ~ tabla" # n (choose [15,3,4,5,10]) # pan rand
  d3
    $ s "click:2*2" # lpf 500 # gain 1.1

letのlpfOnを0から1に変更するだけでd1とd2にローパスフィルターがかかるという仕組みです。

ということで、こういうことができるifb関数をつくってみました。以下のコードをBootTidal.hsに追記してTidalCyclesをrebootすればifb関数が使えます。

:{
ifb :: (Bool) -> (Pattern a -> Pattern a) ->  Pattern a -> Pattern a
ifb test f p = splitQueries $ p {query = apply}
  where apply st | test = query (f p) st
                 | otherwise = query p st
:}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?