K-Shoot MANIA v1.60以降では外部ソフトウェア(REAPER)によるエフェクト書き出しが不要になったため、
譜面データの配布にはmp3ファイルと譜面ファイルのみで良くなりました。
そのほか、FXエフェクト・LASER音声エフェクトをユーザー側で定義することができるようになりました。
本記事では、このユーザー定義エフェクトの作成方法について説明します。
重要: v1.60cより前のバージョンのエディタにはユーザー定義エフェクトの記述が正常に読み込み・保存されないことがある不具合が存在します。
ユーザー定義エフェクトを使用する際はv1.60c以降のバージョンのエディタを使用することを強くお勧めします。
1. ユーザー定義エフェクトとは?
ユーザー定義エフェクトは、既存のエフェクトのパラメータを変更したものを新しいエフェクトとして定義し、譜面内で指定できるようにするものです。例えば、「低い音のFlangerエフェクト」や「2拍おきではなく4拍おきに更新されるRetriggerエフェクト」などに名前をつけて、エディタ上で指定できるようにできます。
2. 基本的な定義方法
ユーザー定義エフェクトの指定方法は以下の2種類です。
kshファイルをテキストエディタで開き、ファイルの一番最後にユーザー定義エフェクト指定を記述します。
●FXエフェクト:
| | #define_fx [ユーザー定義エフェクト名] type=[エフェクトの名称];[パラメータ名]=[値]
|
●LASER音声エフェクト:
| | #define_filter [ユーザー定義エフェクト名] type=[エフェクトの名称];[パラメータ名]=[値]
|
[ユーザー定義エフェクト名]にはエディタ上で表示されるエフェクト名を自由に入力します。
既存のFXエフェクト名は「Re」「Flan」といった名称なので、例えばFXエフェクトとして低いFlangerエフェクトを作成した場合は「LoFl」など、4文字以内(頭文字が大文字で他は小文字)で指定することをオススメします。
また、既存のLASER音声エフェクト名は「PEAK」「LPF」「HPF」といった名称なので、例えばLASER音声エフェクトとして16分Retriggerを作成した場合は「RE16」など、すべて大文字の名前で指定することをオススメします。
なお、ユーザー定義エフェクト名に日本語は使用できません(たぶん)。
[エフェクトの名称]は以下の11種類から1つ選んで入力して下さい。
- Retrigger
- Gate
- Flanger
- PitchShift
- BitCrusher
- Phaser
- Wobble
- TapeStop
- Echo
- SideChain
- SwitchAudio
「[パラメータ名]=[値]」の部分では各エフェクトのパラメータを変更できます。
指定できるパラメータの種類は各エフェクトの種類ごとに異なります。
なお、「[パラメータ名]=[値]」は「;」(半角セミコロン)で区切ることで、いくつでも記述することができます。
例えば、以下のように記述できます。
●例 (低い音のFlangerエフェクト) :
| | #define_fx LoFl type=Flanger;delay=80samples;depth=60samples
|
各エフェクトの種類に対して指定できるパラメータは何種類かありますが、ここで記述されなかったパラメータに関しては標準値が使用されます。
すなわち「#define_fx LoFl type=Flanger」とだけ書けば、通常のFlangerと全く同じエフェクトとなります。
3. パラメータの値の型(単位)
エフェクトの各パラメータにはそれぞれ型(単位)が決まっており、それ以外の型で値を指定することはできません。
例えば、時間の長さを指定する場合には「1/16」「150ms」といった値は許されても、「50%」といった値は単位が合わないため使用できません。
パラメータの値の型は以下の10種類です。
- [INT] … 整数を指定します (例)「10」
- [RATE] … 率を指定します
「1/*」「*%」「0.*」の3種類の指定方法があります (例) 「1/2」「50%」「0.5」
- [SAMPLE]…人間が認知できないほどの非常に短い時間を指定します
サンプリング周波数44100Hzを基準にしたときのサンプル数を指定します
(つまり 44100samples=1秒 となります)
指定方法は「*samples」のみで、*には整数が入ります
(例)「40samples」
- [LENGTH]…時間の長さを指定します
指定方法は「1/*」「0.*」「*ms」「*s」の4種類で、はじめの2つは1小節の倍数で指定します。
この場合はBPMに依存します。1.0以上の小数を指定することもできます。
最後の2つはそれぞれミリ秒、秒の単位で指定します(この指定方法ができないものもあります)。
(例)「1/4」「0.25」「100ms」「0.1s」
- [SWITCH]…「on」か「off」のいずれかのみを指定します
- [FREQ]…周波数を指定します
指定方法は「*Hz」「*kHz」の2種類があります。
(例)「12500Hz」「12.5kHz」
- [FLOAT]…小数を指定します
(例)「2.5」
- [dB] … 音の大きさの倍率を指定します
指定方法は「*dB」のみです。*には小数が入ります。
(例)「-3.0dB」
- [PITCH] … 音の高さを表します。12で1オクターブです。
(例)「12.0」「-6」
- [FILENAME]…ファイル名を指定します
(例)「hitsuji.mp3」「kaeru.ogg」
4. パラメータの値の変化について
各パラメータの値は、FXエフェクトでは「(その種類のロングFXを)押していないとき」と「押したとき」の2つ、
LASER音声エフェクトでは「判定が外れているとき」「既定位置にあるとき」「最も端の位置にあるとき」の3つを指定してプレイ中に値を変化させることができます。
指定方法は、FXエフェクトの場合は「0%>100%」というように「>」で区切ることで「押していないとき」から「押したとき」への変化が指定できます。
また、LASER音声エフェクトの場合は「0%>50%-100%」というように「>」に加えて「-」で区切ることで変化が表せます。この場合は「判定が外れているとき」が「0%」で、既定位置から逆側にかけて「50%」~「100%」の間をなめらかに値が変化していきます。
なお、単に「0%」と指定すれば「0%>0%」あるいは「0%>0%-0%」と同じ意味になり、LASER音声エフェクトの場合でも「0%>100%」と指定すれば「0%>100%-100%」と指定したことと同じ意味、「0%-100%」と指定すれば「0%>0%-100%」と指定したことと同じ意味になります。
9種類の型のうち、[FILENAME]のみはプレイ中に値を変化させることができません。
なお、多くのエフェクトには元の音声との混ぜ具合(エフェクトをかける強さ)を示す「mix」パラメータが存在し、これを0%にするとエフェクトがかかっていない状態となり、「100%」とすると最も強くエフェクトがかかった状態になります。
標準では「mix=0%>100%」など、押していないときには「0%」となる指定になっており、これによりその種類のロングFXオブジェクトを押していないときにはエフェクトがかからないようになっています。
例えば、これを「mix=100%」としてしまうと、その種類のロングFXオブジェクトを押していないときでもエフェクトがかかってしまいます(ただし、種類にかかわらずロングFXオブジェクトを一つも押していない状態では、すべてのエフェクトはByPass(無効の状態)となっています)。
5. エフェクト&各パラメータの種類とその標準値
ここでは各パラメータの名前とその値の型を「パラメータ名[型](=標準値)」の形式で紹介します。
本体を↑の場所に置いていますが、まだ譜面を参照できません。
kcoファイルのあるディレクトリと同じディレクトリも探知してくれません。
[]前後と--前後の空白削ったらできました!
ありがとうございます!
ご指摘ありがとうございます。PitchShiftエフェクトについての記述を追加いたしました。
お手数ですがもう少し詳しく、または画像で説明して頂けませんか?
リアルタイムエフェクトである都合上、プレイバック時に含まれない波形を参照できないので、エディタ上ではリピート元より前から再生を始めないと正常に再生されません。
ゲーム本体では曲の先頭からプレイバックされるため、問題なくエフェクトがかかるはずです。
可能でしたらそれぞれの表記の方法を教えていただけると嬉しいのですが
指定可能なエフェクト・パラメータはここに記載しているもののみです。
ご指摘ありがとうございます。修正しました。
LASERエフェクトでSideChainエフェクトを定義した(#define_filter SiCh type=SideChain)のですが、
途中にfilter:SiCh:ratio=5とfilter:SiCh:ratio=1で
LASERがある間にSideChainエフェクトがかかるようにしたのですが、
その後、LASERがあるのにSiChエフェクトが(かかってほしいところで)かからなくなりました。
そこでfilter:SiCh:ratio=5を再度記述したのですが、SiChエフェクトをかけたくないところでもSiChエフェクトが(LASERがある間中)かかりっぱなしになってしまいました。
手動でfilter:SiCh:ratio=1など記述していくしかないのでしょうか。
質問の意図がよくわかりませんが、それは正常な挙動です。そもそも曲中でのパラメータ変更は、【複数のLASERエフェクトを同時に鳴らすこと】を目的とした機能ですので、同時に鳴らす箇所・鳴らさない箇所の指定は言うまでもなく必要です。
もし単にSideChain風コンプレッサをLASER音声エフェクトとして使用したい(PEAK/LPF/HPFと同時に鳴らす訳ではない)のであれば、
#define_filter SICH type=SideChain;ratio=1>5
などと記述した上でLASER音声エフェクトの種類としてSICHを指定するのみで問題ありません。
SiChとLPFが同時にかかるようにし、その後、LASERでSiChのみをかけたい箇所があったのですが、やはりその都度パラメータを変更する必要があるようですね。
現在は「他のLASERエフェクトと同時にかけるためのSiCh」を新しく定義して、SiCh単独で使用する場合と使い分けることで解決しました、ありがとうございました。
お返事ありがとうございます。
なるほど。そのような目的であれば、もちろんその方法でも構いませんし、filter:SiCh:ratio=1としている箇所をすべてfilter:SiCh:ratio=1>5に置き換えれば新たにエフェクトを定義する必要なく再利用が効くと思います(定義するエフェクト数が多くなればなるほど重くなるので、特に多数のエフェクトを定義する場面ではこちらの方法をお勧めします)。
デフォルトで入っているつまみの「HPF」や「LPF」「BITC」ですが、「HPF」と「LPF」をFXの音として鳴らすことは出来ないでしょうか?
「BITC」は元から細かく調節出来るので良いのですが・・・
コメントありがとうございます。
HPF、LPFに関しては現状ユーザー定義エフェクト内で指定することができません(実装の予定はあります)。
レーザーを出した状態でロングFXの箇所だけエフェクトの種類をHPF/LPFにするなどすれば、擬似的にFXでそれらのエフェクトをかけたようにすることは一応可能ではあります。ただやはりFX単体でかけることはできないです。
「8.さらに高度な使い方」にて、mix=90%等と記述することでレーザーオブジェクト単体でレーザー音声エフェクトとFXエフェクトを同時にかける方法が記載されていますが、mixが指定出来ないSwitchAudioをレーザーオブジェクト単体でレーザー音声エフェクトと同時にかける方法はございますでしょうか。
もし無ければ今後検討していただけると幸いです。
宜しくお願い致します。
詳しい状況がわからないので判断できません。
ユーザー定義エフェクトの名称を「Retrigger」になどしていませんか?その場合、通常のRetriggerエフェクトの名称と被ることによってユーザー定義エフェクトで上書きされ、そのような現象が生じることは考えられます(これはバグではありません)。
迅速な対応感謝します。定義したエフェクトは四つありますが、それぞれ別々の名称を与えております。また、リトリガーに限らずエコーや、エフェクトすら指定していない素のFXロングノーツにも定義したエフェクトがかかります。
状況がわかりました。恐らくユーザー定義したRetriggerに関して「8. さらに高度な使い方」の方法でmixの値を100%などに変更されていると思われます。この場合、0%に変更しない限り他のエフェクトが指定されたロングFXオブジェクトであろうともそのエフェクトがかかったままになります。記事中にも「(mixを0%にしないとずっとかかったままになります)」と記載していますが、これがその現象です(仕様通りの正常な動作です)。
記事の取り上げ方が分かりにくくて申し訳ないのですが、自由な位置をリピート元にするようなRetriggerを使う場合はあくまでupdateTriggerのみの変更が必要なだけで、mixの変更は必要がありません。mixの変更が必要となるのは、複数のエフェクトを同時に鳴らす必要がある場合(例えば記事中で挙げている「レーザーエフェクトとGateを同時に鳴らしたい」といった場合)のみです。
Retriggerのmixにはデフォルト値として「0%>100%」が指定されているので、ロングFXを押すだけで自動的にmixが100%に切り替わります。
結論としては、
ユーザー定義として
#define_fx SR type=Retrigger;updatePeriod=0
を記述し、
繰り返し元にしたい地点に
fx:SR:updateTrigger=on
を書くだけです。
それ以外の記述(mixの変更など)は一切不要です。
ご参考になれば幸いです。
mixの値は繰り返し元から再生されるボーカルを重ねることでコーラスのように表現できないかという発想からで、そのために「mix=50%」と追記をしていました。
「(mixを0%にしないとずっとかかったままになります)」という記載が目に入っていたにも関わず、確認を怠りました。
夜分遅くにお手数をかけさせ、申し訳ございません。
もう少し詳しく言うと、Echoから余韻を除いたような音で、普通のRetriggerをそのままフェードアウトさせたみたいな感じです。
これは正常な動作なのでしょうか。
記事中のEchoエフェクトのfeedbackLevelの標準値が60%と表記されていましたが、実際には100%だったようでした。
feedbackLevelがデフォルトでは100%(音量の減衰なし)になるので、Retriggerとほぼ同じエフェクト(ただし各繰り返しごとにフェードアウトがあるもの)になる模様です。
記事の記載が間違っていましたが、挙動としては正常です。
音量を減衰させたい場合、LASER音声エフェクトに使用する場合には「feedbackLevel=60%」などを追記、FX音声エフェクトに使用する場合はエディタ上で「鉛筆ツール/ロングFXオブジェクト」の状態でノーツをShift+クリックすることで減衰率(%)を変更してください。
お返事頂きありがとうございます。
LASER音声エフェクトとして定義したものにfeedbackLevel=60%の追記を行ったのですが、変わりませんでした。
#define_filter ECHO4 type=Echo;waveLength=1/4;feedbackLevel=60%
上記が定義したエフェクトになります。もし何かミス等があればご指摘頂けると助かります。
申し訳ありません。先程の返信に「feedbackLevel」と書いてしまっていましたが、正しくは「feedback」でした。
以下で上手くいくと思われます。
#define_filter ECHO4 type=Echo;waveLength=1/4;feedback=60%
すみません、Flanger・Phaserのfeedbackと見間違えました。feedbackLevelで正しかったようです。
お伝えいただいた以下のユーザー定義エフェクトをこちらで動作確認したところ、エディタ・ゲーム本体ともに問題なく再生されるようでした。
#define_filter ECHO4 type=Echo;waveLength=1/4;feedbackLevel=60%
もしかすると30%などの低めの値に設定する、あるいは長めのレーザーで確認すると効果がわかりやすいかもしれません。
少し伝え方が悪かったかもしれません。
私の方では、既存のRetriggerのrateを70%くらいにしたかのような、細切れの音にEchoのフェードアウトがかかったような状態で、FXで左右にRetriggerとEchoを指定して聴いて頂けるとわかるかと思います。それとほぼ同じ状態です。
元々、既存のEchoの減衰率は場合によって変更する使い方をしていたので、減衰率の高い場合、低い場合の挙動というのはある程度わかっていました。
今回は明らかに既存のEchoとは異なる挙動になったため、こうして質問させて頂きました。
そして、そちらでは同じ定義をしたエフェクトで、問題なく既存のEchoと変わらない挙動をしている。ということは、つまりこちらで使っているソフト自体に何らかの異常があるのでしょうか?そういったことはありえますか?
同様の現象が生じるか検証はできていませんが、昔のバージョンから「lib/regawo.dll」(Rertrigger/Gate/Wobble/Echoエフェクトで使用される内部ファイル)が更新されているので、バージョンアップの際に上書きされていない可能性はないでしょうか。
お手数ですが、新しくソフトウェア本体を別でダウンロードし直して症状が解決しないか確かめていただけると幸いです。
新しいソフトウェアを上書きする、または上書きでなくそのまま使うなどしてみましたが、いずれも変わりませんでした。
申し訳ありませんが、ソフトウェアの問題なのか譜面側の問題なのか、状況がわかりません。
まずは、新しい譜面ファイルにそのユーザー定義エフェクトのみを記述して、上手く動作するか確認してみてください。
それで上手くいく場合は、譜面ファイルに追加した他のユーザー定義エフェクトが原因である可能性があります(他に定義したRetriggerのmixの値が100%のままになっているなど)。
上手く行かない場合は、別の音声ファイルでも試してみてください。なお、音声ファイルのサンプリングレートが44.1kHzでない場合は正常に動作しません。
それでも治らない場合は大変申し訳ありませんがこちらでは原因がわかりません。
前者は、そもそもそのユーザー定義エフェクトを記述したのが新しく作り始めたばかりの譜面データのため、他のユーザー定義エフェクトが原因である可能性はないと思います。一度、別の譜面ファイルに追加してみましたが、変わりませんでした。
後者ですが、サンプリングレートの確認ができなかったため、44.1kHzに変換する、また幾つかの他の音声ファイル(そのうちの幾つかは44.1kHzであることを確認済み)での使用も試みましたが、いずれも同様の結果に終わりました。
このままでは原因が検討もつかないので、とりあえずは一旦は諦めようかと存じます。通常の環境で正常であるなら、何かしら環境の変化で変わることもあるかもしれません。
近いうちに環境を一新する予定なので、解決したか否かはまたその際にご報告させて頂きます。
お騒がせしました。対応して頂きありがとうございます。
コメントの投稿