はじめに
ピンポンディレイとは、音が一度鳴ったあとのディレイ音が左右のpanに交互に振れていくようなディレイのことです。
おそらく言葉で説明するよりも音を聴いてもらったほうが早いと思うので、まずはこちらを聴いてみてください。
通常のディレイが同じpanに対して反響音が鳴り続けるのに対し、ピンポンディレイは一度音がなったあとに「右→左→右→左」と音量が減衰しながらpanが卓球(ピンポン)球のように移っていくのがわかるかと思います。
ピンポンディレイの実装
まず、動画で実行しているコードです。
-- BPM:120
setcps (120/60/4)
d2 $ s "click:2*4" # gain 0.9 # lpf 400
-- ディレイなし
d1
$ slow 2
$ s "notes:2 [~ ~ ~ [~ notes:2]] notes:2 ~" # up "0 [0 0 0 -4] -2 0"
# pan 0.5
# gain 1.1
-- 通常のディレイ
d1
$ ((# delay 0.8).(# delayt (3/16)).(# delayfb 0.2).(# lock 1))
$ slow 2
$ s "notes:2 [~ ~ ~ [~ notes:2]] notes:2 ~" # up "0 [0 0 0 -4] -2 0"
# pan 0.5
# gain 1.0
-- ピンポンディレイ
d1
$ stut' 2 (3/16) ((|* gain 0.9).(|> pan (1)))
$ stut' 8 (3/8) ((|* gain 0.8).(|> pan (0)))
$ slow 2
$ s "notes:2 [~ ~ ~ [~ notes:2]] notes:2 ~" # up "0 [0 0 0 -4] -2 0"
# pan 0.5
# gain 1.1
通常TidalCyclesでディレイをかけたかったら、delay, delayt, delayfb, lockあたりを組み合わせて実装すると思います。(参考: 公式ドキュメント)
ただ、この方法だとディレイ音に対してエフェクトをかけたり、panを振ったりなど細かい調整ができず不便です。そこで登場するのがstut'
で、これは
stut’ x z (function) (x:フィードバック回数 z:ディレイタイム)
とすることでディレイ音にfuctionで指定したエフェクトをかけることができます(参考: 公式userbase)
stut
, stut'
の使い方についてはmoistpeaceさんのページでわかりやすく解説されているので是非こちらもみてください。
それではなぜ
$ stut' 2 (3/16) ((|* gain 0.9).(|> pan (1)))
$ stut' 8 (3/8) ((|* gain 0.8).(|> pan (0)))
でピンポンディレイができるのか?ということなんですが、実をいうと自分でもよくわかっていません。(わかる方いらっしゃれば是非コメントください..!)
実装方法としては、
- 1つ目のフィードバック回数を2
- 1つ目のディレイタイムに指定したいディレイタイム、2つ目のディレイタイムはその倍の値にする
- 2つ目のフィードバック回数を増やしたり減らしたりすることで欲しいフィードバック回数をコントロールする
- 1つ目と2つ目のpanを逆にする
- 1つ目の
|* gain
は1以下にして、2つ目の|* gain
は1つ目の2乗くらいの値にする
といった感じです。
ちなみに、
$ stut' 2 (3/16) ((|* gain 0.9).(|> pan (1)).(|> lpf 1000))
$ stut' 8 (3/8) ((|* gain 0.8).(|> pan (0)).(|> lpf 1000))
などのようにすればディレイ音にのみローパスフィルターをかけたりできます。
おわりに
TidalCyclesはライブコーディングができるだけでなく、作曲ソフトとしても使えるので、普段DAWで作曲している方にとっても表現の幅が広がる良いツールです!他にもTidalCycles関連の記事を書いているのでよければみていってください!