【ℹ️ この記事は K-Shoot Mania 譜面制作チーム TapeStop100 のアドベントカレンダー企画,TapeStop100 Advent Calendar 2019 の 11 日目の記事です。】
おはようございます,TapeStop100 の Мороже です🛰️ この記事は昨日の記事の続編になっていますので,まだご覧になっていない方はそちらを先にお願いします。
nitrone7.hatenablog.com
さて,今日も K-Shoot Mania のエフェクトのうち,Retrigger のパラメータについて話そうと思います。特に今日は updateTrigger
について具体例を使いながら説明をします。
updatePeriod について詳しく
前回けっこう雑に流してしまったので,もう少し厳密な説明をします。
Retrigger によって繰り返されるために使う音の区間のことをサンプルと呼ぶことにします。サンプルの開始地点を updateTrigger
,開始地点が更新される間隔のことを updatePeriod
と呼びます*1。デフォルトの Retrigger はまず updateTrigger
が譜面の最初のところにあり,そこから updatePeriod
で指定された周期で updateTrigger
を更新し直すという流れになっています。
たとえばある 8 分の Retrigger があったとして,この Retrigger が繰り返すものは,今まで見てきた中で*2最も近い updateTrigger
から始まるサンプルの最初の 8 分ぶんの区間を取り出したものになります。
言葉だけではすこし説明しづらいので,感覚的な理解のために画像を用意しました*3。(左上にスペースが余って寂しかったのでボム兵を描きました)
右側 2 行のエフェクトを実際にかけてみるとこうなります:
任意位置の updateTrigger
ところで,この updateTrigger
は手動で変更することができます(変更方法は後述します)。これを利用すると,updateTrigger
がある場所から音を取り出して好きな場所でリピートできます。
たとえば free
という名前のエフェクトの updateTrigger
を変更することによってどんな挙動になるか確認してみましょう。黄緑色の線が updateTrigger
の更新線です。
サンプリングボイスを連発したりするとネタ色の強い感じのエフェクトになります。
なお巷では「押した瞬間を updateTrigger の更新線とする」というエフェクト *R
が流行っていますが激しく非推奨です。一見便利そうですが,本当に押した瞬間に更新されるのでプレイヤーがいつ押したかに音が左右され,少しでもズレると意図していない音が鳴ることがよくあります。公式ブログにも書いてある上やたら広まっていますが,このような欠点から撤廃すべきものです。絶対に使わないようにしましょう。
updateTrigger を実際に置いてみる
ここから実際に updateTrigger
を手動変更するための方法について説明します。
free
という名前の定義エフェクトの updateTrigger
を変更するためには,まず free
の updatePeriod
を 0
にしておき,テキストエディタ内で updateTrigger
を置きたい位置に fx:free:updateTrigger=on
と書けば良いです。
#define_fx free type=Retrigger;updatePeriod=0;rate=100%
しかし,テキストエディタ内で置きたい場所を探すのは不可能に近いので,テキストエディタの置換機能を利用します。次のようにしましょう: 追記: K-shoot Mania のバージョンアップによって,ツールバーの「ツール」→「注釈による譜面ファイルの直接編集を有効にする」で簡単に書き込めるようになりました(反映は再読み込みすることで可能)。以下は古い記述となります。
- エディタ内で「注釈の挿入」(Ctrl+Shift+右クリック)を用いて,updateTrigger を変更したい場所でfx:free:updateTrigger=on と書き込む。エディタで上書き保存する。
- テキストエディタで譜面を読み込み,
//
を空文字列に一斉置換した*4のち,テキストエディタで上書き保存する。 - エディタで譜面を開き,注釈を挿入していた場所を見ると入力した文字列が緑色になっていれば成功。
以上の手順を実際にキャプチャしてみました。慣れればすぐに出来る作業なので,みなさんもじゃんじゃん updateTrigger
を編集していきましょう。
まとめ
これは僕の譜面ではないのですが,今までの知識を用いてこんなエフェクトをかけることができます。拡張した Retrigger は強いので大抵のことはできます:
Effectors Challenge 2 の『もぺもぺ[peace]』という差分譜面です。拡張エフェクトをふんだんに使用した面白い譜面となっているので,是非ご覧になってください。
さて,2 日間の間 Retrigger について熱く語ってきました。紹介したユーザー定義エフェクトを使うことでかなり自由度の高いリトリガーをかけることができます。(紹介しきれていないこと(ディスコンのドゥルルドゥルルッっぽいエフェクトとか,両FX押したときの挙動とか)もけっこうあるのですが,それはまたの機会に……)
それでは,みなさんも良いエフェクトライフを!
(追記) 2 年越しの続編が出ました。こっちもぜひ見てください。
vorh: Мороже のエフェ講座① ~ rate と updatePeriod の話~ - Ein Heftiges Heft
näch: https://note.com/k_e_d_2525/n/n98d1196b4106
*1:実はこれは区間の長さではなくて,「updatePeriod = x として小節の初めからスタートして x 小節ごとに updateTrigger を置き直す」という仕様になっています。つまり小節の始まりから 1/4 経過したところで updateTrigger を置き,そこから 1/2 小節周期で updateTrigger を更新するために updatePeriod = 1/2 としても期待した動作にはならず,小節の始まりから 1/2 経過したところで updateTrigger が置かれます
*2:今まで見てきた中でというより実際に見る必要があります。つまり,曲の最初から最後まで再生する過程でサンプルをリアルタイムで取り出しています。なので updateTrigger よりも後の部分で再生すると,取り出し元の区間が存在しないために別の音が流れます
*3:けっこうわかりやすい画像だと思うので説明するとき是非勝手に貼ったりして使ってください
*4:注釈は内部では // で始まる文字列として扱われています