パッチ4.15で実装された吟遊詩人専用アクションであるところの「楽器演奏」ですが、ロジクールのGシリーズに備わっている「ハードウェアマクロ」が使えないか試したところ、使えるという結果になりました。
ドレミで表現したテキストファイルを読み込ませると、ロジクールのデバイスに対応したLuaスクリプトを出力するツールも適当に作ってみました。
↓こんなの。
ツール最新版及び演奏サンプル動画
※ツール用固定ページを作りました。こちらに最新版とマニュアルがまとまっています。
FF14側の準備
現在演奏で使える音階は37音となっています。
まず、他のアクションと重複していないキーを37個、空いているホットバーに割り当て、そこに演奏アクションを全てアサインする必要があります。
他のアクションに既に割り当てられているキーを演奏に使ってしまうとその音を鳴らそうとした瞬間にアクションが実行されてしまいますので、これは必須事項です。
このキーの工面が最大の難関かと思います。
手としては、Ctrl +Shift+キーを使うのが良いと思います。
私は以下のキーを使いました。
RightControl + RightShift +
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | F1 |
F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
q | w | e | t | y | u | i | o | p | a |
s | d | g | h | k | l | x |
これで37個です。
0(ゼロ)、R、F、Jを使っていないのは、これらが既に別アクションに割り当てられていたからです。
この37個のキーは、順番に演奏アクションのド(-1)~ド(+2)までにキーバインディングします。
まず4本のホットバー(48スロット)に対し、演奏アクションを順番にアサインしていきます。
こんな感じ。
ちなみにこれは「HUDレイアウト2」に切り替えています。演奏専用のHUDというわけですね。
自分で演奏するわけではないので、鍵盤の配置とか意識せず頭から順番に詰めていきます。
自分の場合、1,2,3,6,7のホットバーを既に別アクションで使っているので、空いている4,5,8,9の4本を演奏アクション用にしました。
そして、システム>キーバインディングから、演奏アクションをアサインしたホットバーに対してキー入力を割り当てていきます。
RightControl + RightShift を押しながら1、という風に設定する事を忘れずに。
このアサインは、後にツールに対して入力させるマッピングファイルとして必要になりますので、メモしておきましょう。
配布しているツールでは、上のような私の環境でのマッピングファイルがサンプルとして同梱されています。
ちゃんと音が鳴るか確認
ホットバーに演奏アクションを割り当て、それにキーバインディングまで済んだら、全ての音が問題なく再生されるか確認しましょう。
RightControl + RightShift + 37個のキーを順番に押していき、全ての音が意図通りに再生されればOKです。
意外と既に使われているキーがあるもので、音を鳴らすつもりがいきなり走り出したり、ジャーナルが開いたりするんですよね。
もしこういう現象が発生したら、そのキーバインドは使えませんので、他の空いているキーにするといった修正が必要です。
ロジクールGシリーズのLuaスクリプトについて
スクリプトについて最低限の仕様を理解しておく必要があるので、ここでチョロっと説明しておきます。
ロジクールG13のスクリプトエディタを起動する
まずは、ロジクールGシリーズのハードウェアマクロをスクリプトで書く手順について。
「Logicoolゲームソフトウェア」を起動します。
Gキーのアイコンを押す>FF14のプロファイルを右クリック>スクリプト
するとこんなウィンドウが開きます。
これがスクリプトエディタです。要はただのテキストエディタですな。
スクショでは既に説明用のスクリプトが記述されている状態です。
以下のソースをコピペして、スクショと同じ状態にしてください。
function OnEvent(event, arg) if(event == "G_PRESSED") then if(GetMKeyState("lhc") == 3) then if(arg == 1) then PressKey("rshift"); PressKey("rctrl"); PressAndReleaseKey("1"); Sleep(300); ReleaseKey("rshift"); ReleaseKey("rctrl"); elseif(arg == 2) then PressKey("rshift"); PressKey("rctrl"); PressAndReleaseKey("F4"); Sleep(300); ReleaseKey("rshift"); ReleaseKey("rctrl"); end end end end
スクリプトについて説明します。
==3の3が[M3]を意味しています。
G13はGボタンの動作モードを[M1][M2][M3]の3つに切り替える事ができます。
要はFF14のホットバーで言うと3セットあるという事ですね。
ここでは、演奏用のモードとして[M3]を使いたいので、このように記述しています。
[M1]や[M2]を使う場合はそれぞれ、 == 1 、 == 2 と記述して下さい。
G1が押された時の処理が書かれています。
この例では
rshift(右シフト)とrctrl(右コントロール)を押しっぱなしにして、1のキーを押してすぐに離し、300msec待ってから、右シフトと右コントロールを離す
と書かれています。
要するに 右シフト+右コントロール+1 を押して放す、という事です。
なんでこんな回りくどい書き方をしているか、理由はありますが説明が長くなるので、こういうものだと思って下さい。
このスクリプトを[スクリプト]>[保存]した状態でFF14を起動し、G13の[M3]ボタンを押してモード3に切り替え、FF14側もHUD2の演奏モードに切り替えて、G1ボタンを押すと「レー1」の音が鳴ります。
つまりそういう事です。
Sleep(300); という記述は300msec待つという意味ですので、上の例では実は無意味です。
ですが、譜面を演奏する場合、
PressAndReleaseKey(“1”);
Sleep(300);
PressAndReleaseKey(“0”);
このように書きます。これは、レー1、300msec待つ、ドー1という再生になります。
もうお分かりですね。Sleepは次の鍵盤を叩くまでの間(ま)です。
rshift(右シフト)とrctrl(右コントロール)の押しっぱなしについて
PressAndReleaseKeyで鍵盤を叩き、Sleepで間を置く、ので、譜面があれば単純にこの2つの命令を羅列すれば良いです。
原理としては簡単ですね。
ただまぁ、FF14はネトゲですし、キー入力をサーバーにいちいち送って周りのプレイヤーにも結果を伝播させてますので、極端に短い間隔で打鍵しても処理されなくなるかも知れませんね。
私の感覚では、Sleep(100);でドレミファソラシド~と鳴らすと異常なくらい早弾きに聴こえます。
さて、大切な事として
PressKey(“rshift”);
PressKey(“rctrl”);
この間に打鍵用スクリプトを書く
ReleaseKey(“rshift”);
ReleaseKey(“rctrl”);
というルールがあります。
これは、繰り返しになりますがこういうものだと思って下さい。
ちょっと説明すると、もともとロジクールのこのハードウェアマクロ機能は「同時押しが面倒くさい、しかも挙動が怪しい」という傾向があります。
また、キー入力を処理するクライアント(この場合FF14)によってもキーの判定基準が変わってきます。
上のスクリプトは
最初に右シフトと右コントロールを押しっぱなしにした状態で、1や2やF1といったキーを連続して押し、演奏が全て終わった後に右シフトと右コントロールを離す、という手順で書かれています。
このようにして「シフト+コントロール+1」「シフト+コントロール+2」「シフト+コントロール+F1」といった入力をでっちあげています。
演奏用スクリプトを作ろう
ここまでの説明で、何をするべきか分かったかと思います。
- 演奏したい曲のドレミの譜面を作る(手に入れる)
- PressAndReleaseKey(音階); Sleep(間); の羅列を書く
単純に言うとこれだけです。
とは言え、ドレミの音階をそのままスクリプトに書くわけではありません。
最初にFF14で設定したキーバインドに直さなければなりません。
という事でツールの出番です。
ツールのダウンロードはこちらから
FF14PlayMusicScripterについて
動作環境とか
Windows7 / 64bitでテストしました。他は知りません。
.NET Framework 4.6以降が必要です。
(※MIDI再生機能を追加してしまったせいで、サウンドデバイスが認識されていないPCだと動かないかも?かも)
何するツール?
簡単に言うと、↑の緑の部分をファイルに書き出すツールです。
ドレミで書かれたcsvファイル(カンマ区切りのテキスト)を読み込んで変換します。
ついでに読み込んだテキストを再生したりするオマケ機能があります(確認用です)。
使い方
起動方法
.zipを解凍したフォルダのFF14PlayMusicScripter.exeを起動して下さい。
インストール、アンインストール共に不要です。
終了方法
右上の×ボタンを押して下さい。
操作説明
起動すると、実行ファイルと同じフォルダにあるmapping.csvを最初に読み込みます。
上のスクショでは、37個のマッピング読み込みに成功したとログに出力されています。
37音階必要ですので、これが正常起動です。
mapping.csvが存在しないとか、記述に問題があるとスクリプトの出力ができません。
mapping.csvとは?
ツール同梱の mapping.csv をテキストエディタで開いて見てもらうと一目瞭然ですが、ド-1~ド+2までの37音階について、それぞれがどのキーにバインドされているかを羅列してあるだけのテキストファイルです。
必要に応じて、自分がFF14でアサインしたキーに合わせて書き換えて上書き保存して下さい。
注意点
- 同時押しキー(ここでの例ではシフト+コントロール)は書かない
- ファイルを保存するときの形式は(UTF-8 BOM付き)、改行はCRLF。
PlayDataファイルを読み込む
PlayDataファイルとはドレミの音階と鍵盤を叩いた後の待ち時間(msec)で書かれたcsvファイルです。
フォーマットについて説明します。
ツール同梱の sample_playdata_doremi.csv を開いて見てください。
こちらも見てもらえば一目瞭然なんですが、
ド-1, 200
とか1行ごとに書かれている羅列です。
これつまり、ド-1の鍵盤を叩いて、200msec待つ、という意味です。
以上説明終了です。
このcsvファイルはツールにドラッグ&ドロップできます。
こんな感じになります。
PlayボタンとSaveAsボタンが有効になります。
Playボタンを押すと読み込んだPlayDataを再生します。
SaveAsボタンを押すと、Luaスクリプトを保存するダイアログが開きます。
ここで注意ですが、保存の際には、同時押しキーに相当するチェックボックスをチェックしておく必要があります。
ここです。
このチェックが一切無いと、出力されるスクリプトにも同時押しキーの処理が記述されませんので。
同時押しキーなぞ不要で、37個の空いているキーがあるぜ、という方は別にチェックなしでも構いませんが。
sample_playdata_doremi.csv から出力されたLuaファイルも.zipに同梱されています。
PressKey("rshift") PressKey("rctrl") PressAndReleaseKey("1"); Sleep(200); PressAndReleaseKey("3"); Sleep(200); PressAndReleaseKey("5"); Sleep(200); PressAndReleaseKey("F4"); Sleep(200); PressAndReleaseKey("F6"); Sleep(200); PressAndReleaseKey("F8"); Sleep(200); PressAndReleaseKey("y"); Sleep(200); PressAndReleaseKey("i"); Sleep(200); PressAndReleaseKey("p"); Sleep(200); PressAndReleaseKey("2"); Sleep(200); PressAndReleaseKey("F7"); Sleep(200); ReleaseKey("rshift") ReleaseKey("rctrl")
doremi.lua はこのように出力されています。
これをコピーして、先ほど説明した「Logicoolゲームソフトウェア」のスクリプトエディタで割り当てたいGボタンの処理を行う箇所に上書きします。
この緑の箇所を差し替える形ですね。
上のスクショではG1,G2のみしか書かれていませんが、ロジクールG13だとG22まで使えます。
G3以降は
elseif(arg == 3) then
・・・・
elseif(arg == 4) then
・・・・
という感じで増やして下さい。
とまぁ、これで一通りの説明は終了です。
他の機能について
Waitvalue Offset
PlayDataのウェイト値に加算します。PlayDataファイル内で
ド, 300
と書かれていて、Waitvalue Offset が -100 だった場合、
ド, 200
で再生されます。スクリプトの出力も計算後の値になります。
全体のテンポを調整するための補助機能です。
Loop
ループ再生用のチェックボックスです。
チェックONの状態でPlayボタンを押すと、ループ再生します。
Notes Offset
再生時、及び、鍵盤ボタンを押した際の音階のオフセット(オクターブ)に相当します。
この数字x12のノート番号が、ド-1になるようになっています。
つまり、ツールの初期値4では、ノート番号48がド-1ですので、ドがノート番号60になります(まんなかのド)。
出力されるスクリプトには全く影響しません。
Stroke
鍵盤を叩く強さ?
ここを小さくすると音量が小さくなります。
出力されるスクリプトには全く影響しません。
補足事項
ドレミはCDEに置き換え可能
非Shift-JIS環境の人にひょっとすると需要があるかもしれないので、mapping.csv, プレイデータ.csvについて、音階の指定に以下の互換性があります。
ド | レ | ミ | ファ | ソ | ラ | シ |
C | D | E | F | G | A | B |
ド#-1 = C#-1
ミb+1 = Eb+1
半角・全角文字は厳密に
csvファイルに記述する内容について、カタカナは全角文字、それ以外は必ず半角文字で書いて下さい。
○ド-1
×ド-1
○ソ#
×ソ#
ファイルを保存する場合はUTF-8, BOM有りで
くどいようですが。
何でかって言うと、”ドレミ”といった全角文字を許容している且つ、非Shift-JIS環境を気にしているからです。
免責事項とか
ツール同梱のreadme.txtにも書いてありますが、ご使用は自己責任でお願いします。配布とかはご自由に。