譜面データの配布にはmp3ファイルと譜面ファイルのみで良くなりました。そのほか、FXエフェクト・LASER音声エフェクトをユーザー側で定義することができるようになりました。本記事では、このユーザー定義エフェクトの作成方法について説明します。v1.60cより前のバージョンのエディタにはユーザー定義エフェクトの記述が正常に読み込み・保存されないことがある不具合が存在します。ユーザー定義エフェクトを使用する際はv1.60c以降のバージョンのエディタを使用することを強くお勧めします。ユーザー定義エフェクトとは?ユーザー定義エフェクトは、既存のエフェクトのパラメータを変更したものを新しいエフェクトとして定義し、譜面内で指定できるようにするものです。「低い音のFlangerエフェクト」や「2拍おきではなく4拍おきに更新されるRetriggerエフェクト」などに名前をつけて、エディタ上で指定できるようにできます。基本的な定義方法ユーザー定義エフェクトの指定方法は以下の2種類です。kshファイルをテキストエディタで開き、ファイルの一番最後にユーザー定義エフェクト指定を記述します。type=[エフェクトの名称];[パラメータ名]=[値][ユーザー定義エフェクト名]にはエディタ上で表示されるエフェクト名を自由に入力します。既存のFXエフェクト名は「Re」「Flan」といった名称なので、例えばFXエフェクトとして低いFlangerエフェクトを作成した場合は「LoFl」など、4文字以内(頭文字が大文字で他は小文字)で指定することをオススメします。既存のLASER音声エフェクト名は「PEAK」「LPF」「HPF」といった名称なので、例えばLASER音声エフェクトとして16分Retriggerを作成した場合は「RE16」など、すべて大文字の名前で指定することをオススメします。ユーザー定義エフェクト名に日本語は使用できません(たぶん)。[エフェクトの名称]は以下の11種類から1つ選んで入力して下さい。RetriggerGateFlangerPitchShiftBitCrusherPhaserWobbleTapeStopEchoSideChainSwitchAudio「[パラメータ名]=[値]」の部分では各エフェクトのパラメータを変更できます。指定できるパラメータの種類は各エフェクトの種類ごとに異なります。「[パラメータ名]=[値]」は「;」(半角セミコロン)で区切ることで、いくつでも記述することができます。以下のように記述できます。type=Flanger;delay=80samples;depth=60samples各エフェクトの種類に対して指定できるパラメータは何種類かありますが、ここで記述されなかったパラメータに関しては標準値が使用されます。type=Flanger」とだけ書けば、通常のFlangerと全く同じエフェクトとなります。パラメータの値の型(単位)エフェクトの各パラメータにはそれぞれ型(単位)が決まっており、それ以外の型で値を指定することはできません。時間の長さを指定する場合には「1/16」「150ms」といった値は許されても、「50%」といった値は単位が合わないため使用できません。パラメータの値の型は以下の10種類です。なります)指定方法は「*samples」のみで、*には整数が入ります(例)「40samples」[LENGTH]...時間の長さを指定します指定方法は「1/*」「0.*」「*ms」「*s」の4種類で、はじめの2つは1小節の倍数で指定します。この場合はBPMに依存します。1.0以上の小数を指定することもできます。最後の2つはそれぞれミリ秒、秒の単位で指定します(この指定方法ができないものもあります)。[FREQ]...周波数を指定します指定方法は「*Hz」「*kHz」の2種類があります。音の大きさの倍率を指定します指定方法は「*dB」のみです。*には小数が入ります。12で1オクターブです。パラメータの値の変化について各パラメータの値は、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(無効の状態)となっています)。エフェクト&各パラメータの種類とその標準値ここでは各パラメータの名前とその値の型を「パラメータ名[型](=標準値)」の形式で紹介します。音を繰り返すエフェクトです。updatePeriodごと、あるいはupdateTriggerがonになる度に繰り返し元を更新します。音の長さを指定します。100%にすると完全に繰り返し、下げていくと音が細切れになります。定期的に音量を100%⇔0%で行き来させることで、音が細切れになるエフェクトです。音の長さを指定します。100%にすると元音源のままで、下げていくと音が細切れになります。元音源と同じ音を遅らせて重ねます。ディレイタイムをLFOで揺らすことで、音にうねりを与えます。ディレイタイムの最小値を指定します(~44100samples)。大きくするほど低い音になります。ディレイタイムの変化の深さを指定します(~44100samples)。大きくするほど音の高低差が大きくなります。フィードバック率を指定します。ディレイ先へエフェクト済の音を渡してエフェクトを強くします。L/Rチャンネル間のLFOのずらし具合を指定します。干渉により音量が大きくなるため、標準では少し下げています。音の高さを変更します。chunkSizeごとに波形を区切り、その区間内で波形を伸縮させます。音程を指定します(-48~48)。レーザーの推移では、両方の値を整数で指定すると値が整数のみを経由して推移、小数で指定すると値がなめらかに推移するようになります(すなわち「0-12」ではピロロロ↑、「0.0-12.0」ではヒューン↑のような感じ)。区間の幅を指定します。大きくするほど音質は上がりますが、音が遅れます。区間の拡縮後にクロスフェードによってサンプルをなめらかにつなげる割合を指定します(0%~50%)。大きくするとなめらかな音になりますが、波形の干渉により音が変化する可能性があります。波形を階段状にして音質を落とします。値を変化させるとバリバリという音がします。無視サンプル数を指定します。上げるほど音質が下がります。Filterをかけた音と元の音を重ねて干渉させます。Filterの数を指定します(0~12)。原理上、偶数のみ指定できます。大きくすると処理が重くなります。FilterのQ値を指定します(0.1~50.0)。ここでは小さくするほど鋭い音になります。フィードバック率を指定します。Filterの手前へエフェクト済の音を渡してエフェクトを強くします。L/Rチャンネル間のLFOのずらし具合を指定します。loFreqとhiFreqの中央より高い周波数の音をカットする量を指定します(~0.0dB)。元音源とエフェクト音源の混ぜ具合を指定します。一般的なPhaserエフェクトはMix値50%で最も干渉するというものが多いですが、ここでは利便性から100%で最もよく干渉する(エフェクトが強くかかる)ようにしています。Filterのカットオフ周波数をLFOで揺らすことでヒュワヒュワという音にします。FilterのQ値を指定します(0.1~50.0)。ここでは大きくするほどカットオフ周波数周辺が強調され鋭い音になります。音を減速させることでターンテーブルで音を止めたように聞こえさせるエフェクトです。減速の速さを指定します。trigger[SWITCH](=off>on):onになった瞬間から減速をはじめ、offになると再生速度を元に戻します。Retriggerにフェードアウトを追加したエフェクトです。音がこだましたような効果を生みます。音量の保持率を指定します。小さくするとはやくフェードアウトします。一般にはほかのトラックの信号を元にエフェクトを作用させることを指しますが、ここでのSideChainエフェクトはサイドチェインコンプレッサーとしての使用法の再現で、周期的に音を圧縮するものです。圧縮の周期を指定します(s/ms単位不可)。0にすると無効にします。音の圧縮率を指定します(1~100)。1を指定すると1/1倍(すなわち原音)、5を指定すると1/5倍まで圧縮します。再生音源を別の音声ファイルに切り替えます。切り替え先音声は元音声と同じ長さであることが推奨されます。実際にやってみようまずはテキストエディタでkshファイルを開きます。ユーザー定義エフェクトはファイルの終端に記述します。最初に挙げた例の低い音のFlangerエフェクト(LoFl)を指定してみます。Editorで開きます。すると、他の既存のエフェクトと同じようにCtrl+クリックでユーザー定義エフェクトも選ぶことができるようになっています。type=Flanger;delay=80samples-140samples;depth=0samplesこれを例によってテキストエディタで追記すると、エディタで再度譜面ファイルを開き直せば、他の既存のLASER音声エフェクトの種類と同様にCtrl+クリックで変更できるようになっています。「譜面に関する設定」で旧バージョンのように音声ファイルを2つ以上指定している場合、内部エラー7が出るようです(v1.60b現在)。次のバージョンで修正します。何言ってるかさっぱりわからん!どうでもいいから例をくれ例を!という方のために、エフェクト例を挙げておきます。type=Retrigger;updatePeriod=2.0;rate=100%これをロングFXに指定した上でShift+クリックを押し、間隔を1/1に指定すれば奇数小節を丸々1小節繰り返すことができます。高度な使い方kshファイル内の任意の場所に「fx:[ユーザー定義エフェクト名]:[パラメータ名]=[値]」または「filter:[ユーザー定義エフェクト名]:[パラメータ名]=[値]」という行を追加すると、その位置でユーザー定義エフェクトのパラメータの値を変更することができます。Retriggerエフェクトで任意の位置から音を持って来たいときなどに応用できます。type=Retrigger;updatePeriod=0繰り返し元にしたい箇所にfx:SR:updateTrigger=onという行を追加すれば、自由な位置から波形を引っ張ってくることができます。判定が入っていないときにはByPass(エフェクトオフ)となることから、既存のレーザー音声エフェクト(例えばHPF)と同時にGateエフェクトを鳴らしたい、といった場合にも使うことができます。type=Gate;waveLength=1/16通常のLASER音声エフェクトと同時にGateをかけたい場所にfilter:GA16:mix=90%という行を追加し、やめたいところでfilter:GA16:mix=0%と記述して下さい(mixを0%にしないとずっとかかったままになります)。ゲーム本体では「譜面内で一度もロングFXの種類あるいはレーザー音声エフェクトの種類に指定されていない」かつ「譜面内で一度もエフェクト変更の記述がない」エフェクトを無視しています。これはパフォーマンスの低下を防ぐ目的です。そのため、例えばmixがずっと100%のエフェクトを定義しただけではずっとかかってくれません(エディタ上ではかかります)。一部エフェクト例の誤りを修正しました。v1.61で搭載されたPitchShiftエフェクトについての記述を追加しました。一部エフェクト例の誤りを修正しました。一部エフェクト例を修正しました。EchoエフェクトのupdateTriggerの標準値の誤りを修正しました。Retriggerエフェクトのrateの標準値の誤りを修正しました。EchoエフェクトのfeedbackLevelの標準値の誤りを修正しました。>>コメントC:\Users\<※ユーザー名>\Pictures\ksh\kshootmania本体を↑の場所に置いていますが、まだ譜面を参照できません。]まだ譜面を参照できません。kcoファイルのあるディレクトリと同じディレクトリも探知してくれません。Echoエフェクトをかけたいのですが、現在の仕様では可能でしょうか。]PitchshiftエフェクトをLASERエフェクトとして使用する事は、可能でしょうか。可能でしたら、その表記の方法を教えていただけると幸いです。さんご指摘ありがとうございます。PitchShiftエフェクトについての記述を追加いたしました。]さらに高度な使い方の任意の位置から音を持ってくるエフェクトについてですが、説明通りにやっているつもりなのですが、fx:SR:updateTrigger=onを挿入したところではなく再生開始地点から波形を参照しているようで、再生開始地点を変えると毎回エフェクトが変わります。さんリアルタイムエフェクトである都合上、プレイバック時に含まれない波形を参照できないので、エディタ上ではリピート元より前から再生を始めないと正常に再生されません。ゲーム本体では曲の先頭からプレイバックされるため、問題なくエフェクトがかかるはずです。さん指定可能なエフェクト・パラメータはここに記載しているもののみです。]FXエフェクト例の「めっちゃ鋭いWobbleエフェクト」のユーザー定義エフェクト名が指定されていないので修正をお願いします。さんご指摘ありがとうございます。]「8.さらに高度な使い方」に関連した質問です。途中にfilter:SiCh:ratio=5とfilter:SiCh:ratio=1でLASERがある間にSideChainエフェクトがかかるようにしたのですが、その後、LASERがあるのにSiChエフェクトが(かかってほしいところで)かからなくなりました。そこでfilter:SiCh:ratio=5を再度記述したのですが、SiChエフェクトをかけたくないところでもSiChエフェクトが(LASERがある間中)かかりっぱなしになってしまいました。手動でfilter:SiCh:ratio=1など記述していくしかないのでしょうか。さん質問の意図がよくわかりませんが、それは正常な挙動です。そもそも曲中でのパラメータ変更は、【複数のLASERエフェクトを同時に鳴らすこと】を目的とした機能ですので、同時に鳴らす箇所・鳴らさない箇所の指定は言うまでもなく必要です。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に関しては現状ユーザー定義エフェクト内で指定することができません(実装の予定はあります)。レーザーを出した状態でロングFXの箇所だけエフェクトの種類をHPF/LPFにするなどすれば、擬似的にFXでそれらのエフェクトをかけたようにすることは一応可能ではあります。FX単体でかけることはできないです。「8.さらに高度な使い方」にて、mix=90%等と記述することでレーザーオブジェクト単体でレーザー音声エフェクトとFXエフェクトを同時にかける方法が記載されていますが、mixが指定出来ないSwitchAudioをレーザーオブジェクト単体でレーザー音声エフェクトと同時にかける方法はございますでしょうか。無ければ今後検討していただけると幸いです。]繰り返し元を指定したリトリガーを使用したところ、以降に配置した普通のリトリガーなどが全て同じ繰り返し元になってしまいました。これはバグでしょうか。名無しさん詳しい状況がわからないので判断できません。ユーザー定義エフェクトの名称を「Retrigger」になどしていませんか?その場合、通常のRetriggerエフェクトの名称と被ることによってユーザー定義エフェクトで上書きされ、そのような現象が生じることは考えられます(これはバグではありません)。]>masakaさん迅速な対応感謝します。定義したエフェクトは四つありますが、それぞれ別々の名称を与えております。リトリガーに限らずエコーや、エフェクトすら指定していない素のFXロングノーツにも定義したエフェクトがかかります。名無しさん状況がわかりました。高度な使い方」の方法でmixの値を100%などに変更されていると思われます。この場合、0%に変更しない限り他のエフェクトが指定されたロングFXオブジェクトであろうともそのエフェクトがかかったままになります。記事中にも「(mixを0%にしないとずっとかかったままになります)」と記載していますが、これがその現象です(仕様通りの正常な動作です)。記事の取り上げ方が分かりにくくて申し訳ないのですが、自由な位置をリピート元にするようなRetriggerを使う場合はあくまでupdateTriggerのみの変更が必要なだけで、mixの変更は必要がありません。mixの変更が必要となるのは、複数のエフェクトを同時に鳴らす必要がある場合(例えば記事中で挙げている「レーザーエフェクトとGateを同時に鳴らしたい」といった場合)のみです。Retriggerのmixにはデフォルト値として「0%>100%」が指定されているので、ロングFXを押すだけで自動的にmixが100%に切り替わります。繰り返し元にしたい地点にfx:SR:updateTrigger=onを書くだけです。それ以外の記述(mixの変更など)は一切不要です。ご参考になれば幸いです。]>masakaさんmixの値は繰り返し元から再生されるボーカルを重ねることでコーラスのように表現できないかという発想からで、そのために「mix=50%」と追記をしていました。「(mixを0%にしないとずっとかかったままになります)」という記載が目に入っていたにも関わず、確認を怠りました。夜分遅くにお手数をかけさせ、申し訳ございません。]Echoを標準値から一切変えずに定義したのですが、何故かFXもFilterもRetriggerと似たようなエフェクトになります。詳しく言うと、Echoから余韻を除いたような音で、普通のRetriggerをそのままフェードアウトさせたみたいな感じです。これは正常な動作なのでしょうか。]>名無しさん記事中のEchoエフェクトのfeedbackLevelの標準値が60%と表記されていましたが、実際には100%だったようでした。feedbackLevelがデフォルトでは100%(音量の減衰なし)になるので、Retriggerとほぼ同じエフェクト(ただし各繰り返しごとにフェードアウトがあるもの)になる模様です。記事の記載が間違っていましたが、挙動としては正常です。音量を減衰させたい場合、LASER音声エフェクトに使用する場合には「feedbackLevel=60%」などを追記、FX音声エフェクトに使用する場合はエディタ上で「鉛筆ツール/ロングFXオブジェクト」の状態でノーツをShift+クリックすることで減衰率(%)を変更してください。]>masakaさんお返事頂きありがとうございます。LASER音声エフェクトとして定義したものにfeedbackLevel=60%の追記を行ったのですが、変わりませんでした。type=Echo;waveLength=1/4;feedbackLevel=60%上記が定義したエフェクトになります。何かミス等があればご指摘頂けると助かります。]>名無しさん申し訳ありません。先程の返信に「feedbackLevel」と書いてしまっていましたが、正しくは「feedback」でした。以下で上手くいくと思われます。]>名無しさんすみません、Flanger・Phaserのfeedbackと見間違えました。feedbackLevelで正しかったようです。お伝えいただいた以下のユーザー定義エフェクトをこちらで動作確認したところ、エディタ・ゲーム本体ともに問題なく再生されるようでした。type=Echo;waveLength=1/4;feedbackLevel=60%もしかすると30%などの低めの値に設定する、あるいは長めのレーザーで確認すると効果がわかりやすいかもしれません。]>masakaさん少し伝え方が悪かったかもしれません。私の方では、既存のRetriggerのrateを70%くらいにしたかのような、細切れの音にEchoのフェードアウトがかかったような状態で、FXで左右にRetriggerとEchoを指定して聴いて頂けるとわかるかと思います。それとほぼ同じ状態です。既存のEchoの減衰率は場合によって変更する使い方をしていたので、減衰率の高い場合、低い場合の挙動というのはある程度わかっていました。今回は明らかに既存のEchoとは異なる挙動になったため、こうして質問させて頂きました。そちらでは同じ定義をしたエフェクトで、問題なく既存のEchoと変わらない挙動をしている。]>名無しさん同様の現象が生じるか検証はできていませんが、昔のバージョンから「lib/regawo.dll」(Rertrigger/Gate/Wobble/Echoエフェクトで使用される内部ファイル)が更新されているので、バージョンアップの際に上書きされていない可能性はないでしょうか。お手数ですが、新しくソフトウェア本体を別でダウンロードし直して症状が解決しないか確かめていただけると幸いです。]>masakaさん新しいソフトウェアを上書きする、または上書きでなくそのまま使うなどしてみましたが、いずれも変わりませんでした。]>名無しさん申し訳ありませんが、ソフトウェアの問題なのか譜面側の問題なのか、状況がわかりません。新しい譜面ファイルにそのユーザー定義エフェクトのみを記述して、上手く動作するか確認してみてください。それで上手くいく場合は、譜面ファイルに追加した他のユーザー定義エフェクトが原因である可能性があります(他に定義したRetriggerのmixの値が100%のままになっているなど)。上手く行かない場合は、別の音声ファイルでも試してみてください。音声ファイルのサンプリングレートが44.1kHzでない場合は正常に動作しません。それでも治らない場合は大変申し訳ありませんがこちらでは原因がわかりません。]>masakaさん前者は、そもそもそのユーザー定義エフェクトを記述したのが新しく作り始めたばかりの譜面データのため、他のユーザー定義エフェクトが原因である可能性はないと思います。一度、別の譜面ファイルに追加してみましたが、変わりませんでした。後者ですが、サンプリングレートの確認ができなかったため、44.1kHzに変換する、また幾つかの他の音声ファイル(そのうちの幾つかは44.1kHzであることを確認済み)での使用も試みましたが、いずれも同様の結果に終わりました。このままでは原因が検討もつかないので、とりあえずは一旦は諦めようかと存じます。通常の環境で正常であるなら、何かしら環境の変化で変わることもあるかもしれません。近いうちに環境を一新する予定なので、解決したか否かはまたその際にご報告させて頂きます。対応して頂きありがとうございます。