2019/4/14 Ver 0.8.0 公開
パッチ4.15で実装された吟遊詩人専用アクションであるところの「楽器演奏」ですが、ロジクールのGシリーズに備わっているスクリプト再生機能(マクロ)で演奏できないか試したところ、可能という結果になりました。
つまり、楽譜をスクリプトで表現すれば自動演奏が可能と言う事になります。
じゃあ後は音を鳴らすキーのアサインに従ってスクリプトを書くだけだね、って話なんですが、いきなり楽曲をスクリプトに起こすのは面倒だし調整もできません。
なので、メロディをテキストでドレミ・・・と表現した「ドレミ譜」を読み込んで、ロジクール用のLuaスクリプトを出力するツールを作りました。
演奏機能はバージョンアップに従って微妙に仕様が変わっており、パッチ4.35時点では鍵盤の長押しもできるようになっていますが、ツールはこれに対応しています。
最新版ダウンロードはこちらから
現在の最新バージョンは0.8.0です(2019/4/14)。
旧バージョンはこちら
ロジクールGシリーズのスクリプトについて
ロジクールGシリーズで使えるのはLuaスクリプトというスクリプト言語なんですが、そもそもスクリプトとはなんぞやという事について簡単に説明しておきます。
まず、テキストファイルにコマンドを書きます。
ロジクールのソフトウェアがこのコマンドを読み込むと、書いてある内容に従ってキーボードのキーをあるタイミングで押したり、離したり、マウスカーソルを指定した座標に動かしたり、マウスを左クリックしたりします。
要はキーボード、マウスという入力デバイスを、思い通りかつ自動的に操作できるという事です。
ロジクールGシリーズを買うとドライバと一緒にアプリがインストールされますが、これがOSに常駐していて、ロジクールデバイスのボタン(Gボタン)を押すと、あらかじめセットしておいたスクリプトを実行してくれるという仕組みですね。
FF14の楽器演奏におけるキーアサインについて
自動演奏というのは、要は内部的にキーボードを特定のタイミング、長さで押したり離したりさせる、という事です。
なので、FF14側の「鍵盤」のキーアサインについて説明をしておきます。
パッチ4.35時点での楽器演奏の仕様は次のようになっています。
アクションにPERFORMという項目が追加され、楽器のアイコンが並んでいます。
このアイコンはそのまま楽器の音色に相当し、これを押すと選んだ音色での「楽器演奏モード」に切り替わります。
このモードの特徴として、演奏に関するキーのアクションしか効きませんし、既に別アクションに割り当てられているキーと鍵盤のキーが被っていても、演奏のみが実行されます。
ホットバーの類も自動的に非表示になり、まさに「演奏専用モード」に移行します。
2つのキーアサインモードがある
1オクターブ分の鍵盤+ShiftとCtrlキーでオクターブの上げ下げを行うモード
楽器演奏モードでは、見ての通りピアノの鍵盤のような専用UIが用意されています。
デフォルトでは1オクターブ分(12音)+次のオクターブの「ド」の鍵盤しか表示されていません。
残りの2オクターブ分は、Shift(1オクターブ上げる)/ Ctrl(1オクターブ下げる)のいずれかを押しながら鍵盤を押す、という操作で再生する事ができます。
つまりこのモードでは、キーアサインは1オクターブ12個+最後のド、Shift、Ctrl、の15個で済むという事になります。
3オクターブ分の鍵盤を使うモード
鍵盤の右上の歯車アイコンを押すと、フルキーアサインモードに切り替える事ができます。
このモードでは、使える37音色を全てキーアサインすることが出来ます。
37個のキーを割り当てる必要がありますが、Shiftキーを押しながら、Ctrlキーを押しながら、という操作をしなくても良いと言うメリットがあります。
自動演奏の流れ
ざっくり説明すると以下のような事をします。
- 演奏したい楽曲をドレミで表現した「ドレミ譜」をツールに読み込ませます。
- ロジクール用のスクリプトにコンバートします。
- ロジクールのスクリプトエディタで、コンバートされたスクリプトをコピー&ペーストします。
- FF14中で楽器演奏モードに入り、スクリプトをアサインしたGボタンを押します。
- スクリプトが再生され、自動演奏します。
ツールの基本情報
動作環境
Windows7以降
要.NET Framework 4.5以上
インストール方法
ダウンロードしたzipを展開します。
特にインストーラーとかはありません。
アンインストール方法
展開したフォルダを削除するだけです。
特にレジストリとか弄っていません。
使用方法
FF14の楽器演奏用キーアサインをマッピングファイルに記述する
ツールを展開したフォルダに、mapping.csvというファイルがありますが、これがFF14で37音階に対してどのキーを割り当ててあるか、の設定ファイルです。
FF14PlayMusicScripterは、exeのあるフォルダに存在するこのmapping.csvを起動時に読み込み、スクリプトを出力する際に、このファイルに記述されたキーアサインに従って出力します。
mapping.csvはデフォルトではこのようになっています。
ド-1, q ド#-1, 2 レ-1, w ミb-1, 3 ミ-1, e ファ-1, r ファ#-1,5 ソ-1, t ソ#-1, 6 ラ-1, y シb-1, 7 シ-1, u ド, q ド#, 2 レ, w ミb, 3 ミ, e ファ, r ファ#, 5 ソ, t ソ#, 6 ラ, y シb, 7 シ, u ド+1, q ド#+1, 2 レ+1, w ミb+1, 3 ミ+1, e ファ+1, r ファ#+1,5 ソ+1, t ソ#+1, 6 ラ+1, y シb+1, 7 シ+1, u ド+2, i
これは、FF14の演奏モードのデフォルト値と同じになっています。
演奏モードのキーアサインを一切変えていない場合は、このファイルはそのままで構いません。
上の内容を見ると、3オクターブ分のドレミファソラシドが、オクターブが変わっても同じキーアサインになっています。
これでなぜ構わないのかというと、ツールがスクリプトにコンバートする際に、オプションをチェックしてあると1オクターブ下(ド-1)は、Ctrl + q 、1オクターブ上(ド+1)は Shift + q という変換を行うからです。
FF14側の演奏モードでキーアサインを変えている場合は、このmapping.csvをご自身の設定に一致させるように改変して下さい。
37音全てに異なるキーを割り当てる場合
先に説明しましたが、FF14の演奏モードにおける上下のオクターブ切り替えに関して、デフォルトの動作ではShiftを押すと1オクターブ上、Ctrlを押すと1オクターブ下という仕様になっています。
しかし、37音階全てのキーを割り当てる事でこの Shift , Ctrl と音階の同時押しが必要なくなります。
mapping.csvには37音階のキーアサインを全て記述するようになっています。
ですので、FF14側で37音全て違うキーアサインにした場合はその通りにmapping.csvを改変して下さい。
記号キーのアサインには注意が必要
Shift , Ctrl でのオクターブの上げ下げを使わない場合は37音分のキーをmapping.csvに重複が無い状態で書かなければいけません。
これがなかなか大変です。
0~9の数字、及びアルファベットでは36キーしかありませんので。
zipを解凍したフォルダには、フルキーアサイン版の mapping_full.csvがサンプルとして置いてあります。
※mapping_full.csvをFF14PlayMusicScripter.exeと同じフォルダに置くと、ツール起動時にこちらが優先してマッピングファイルとして読み込まれます。
内容はこのようになっています。
ド#-1, 1 ミb-1, 2 ファ#-1,3 ソ#-1, 4 シb-1, 5 ド#, 6 ミb, 7 ファ#, 8 ソ#, 9 シb, 0 ド#+1, minus ミb+1, q ファ#+1,w ソ#+1, e シb+1, r ド-1, t レ-1, y ミ-1, u ファ-1, i ソ-1, o ラ-1, p シ-1, a ド, s レ, d ミ, f ファ, g ソ, h ラ, j シ, k ド+1, l レ+1, z ミ+1, x ファ+1, c ソ+1, v ラ+1, b シ+1, n ド+2, m
まず黒鍵を3オクターブ分先にアサインし、そのあと白鍵を3オクターブ分書いています。
なぜこうなっているかと言うと、FF14側のマッピングUIが下のようになっているからです。
黒鍵と白鍵のアサインエリアが分かれており、最下段が低いオクターブで、最上段が高いオクターブですね。
別にマッピングファイル自体の書き方は37音全部揃っていればどうでもいいんですが、アサインはFF14側と完全に一致させる必要があるので、このようにまとまっていた方が確認しやすいという、ただそれだけの理由です。
さて、上の マッピングファイルで注意しなければいけないのは、
ド#+1, minus
ここです。
これは、キーの数が足りないので、「-(マイナス記号)」を使う羽目になったという事です。
では、
ド#+1, –
こう書けばいいじゃんと思われるでしょうが、これだとロジクールのスクリプトは認識できず、そこで再生が停まります。
記号キーに対応した文字列は、
キーボード | スクリプト用文字列 |
– | minus |
ESC | escape |
F1 | f1 |
= | equal |
こんな風に決まっているんですね。
ちなみにこの文字列は、ロジクールゲーミングソフトウェアのスクリプトエディタを開き、ヘルプから一覧を見ることができます。
該当ファイルは G-seriesLuaAPI.pdf です。
FF14側の演奏用キーアサインをmapping.csvと合わせる
繰り返しになりますが、mapping.csv とFF14側の楽器演奏用キーアサインは完全一致させる必要があります。
これはフルキーアサインの例ですが、37音全てについてmapping.csv(またはmapping_full.csv)の記述と相互一致するようにして下さい。でないと正しく自動演奏用のマクロが働きません。
フルキーアサインモードを使用する場合の小技
上にも書きましたが、FF14PlayMusicScripter.exeと同じフォルダに mapping_full.csv という名前でファイルを置いておくと、ツールは起動時にこのファイルを優先的に読み込みます。
この場合、mapping.csvは無視されます。
音名のCDE表記について
サンプルの mapping.csv 及び、 mapping_full.csvにはドレミ~のキーアサインの後にCDE~という表記があります。
これは、MIDIの音名に対応しており、ドレミ譜の代わりにCDE譜を使う場合に必要になってきます。
ScoreConverter や SMFConverter はCDE譜を出力しますので、これらのツールを使う場合はマッピングファイルにCDE表記に対するキーアサインも記述して下さい。
とは言っても特に難しいことはなく、ドレミ~に対するアサインをコピペして、ドレミファソラシをCDEFGABに置換するだけです。
楽曲のドレミ譜を用意する
キーマッピング設定ファイルができたら、次は楽曲のドレミ譜を用意します。
メロディを「ドレミ・・・」でテキストに起こしたものを「ドレミ譜」と勝手に呼んでいますが、正式名称は分かりません。
たまにロドストやブログにFF14内で使われている曲を耳コピしてドレミで書いてくれている方がいますが、アレの事です。
某音ゲー風サイトのデータをコンバートしたり、MIDIファイルをコンバートする補助ツールも用意しました。
ネットに上がっているドレミ譜には、次の音までの間(ま)や鍵盤押しっぱなしの時間は基本書かれていないので、どのようなタイミングでどれぐらいの長さ鍵盤を押すのか分からない状態ですが、FF14PlayMusicScripterではこの2つの要素(待ち時間・押しっぱなし時間)もパラメータとして指定する必要があります。
FF14PlayMusicScripter.exe と同じフォルダにサンプルのドレミ譜が置いてあります。
拡張子は .csv で、以下のファイルが相当します。
- sample_playdata_doremi.csv
- sample_playdata_english_cde.csv
この2ファイルは、どちらもドレミファソラシド、と単純に37音色を特定のタイミングで鳴らすだけのものです。
sample_playdata_doremi.csv を使ってフォーマットを説明します。
ド-1, 400 ド#-1, 400 レ-1, 400 ミb-1, 400 ミ-1, 400 ファ-1, 400 ファ#-1,400 ソ-1, 400 ソ#-1, 400 ラ-1, 400 シb-1, 400 シ-1, 400 ド, 400 ド#, 400 レ, 400 ミb, 400 ミ, 400 ファ, 400 ファ#, 400 ソ, 400 ソ#, 400 ラ, 400 シb, 400 シ, 400 ド+1, 400 ド#+1, 400 レ+1, 400 ミb+1, 400 ミ+1, 400 ファ+1, 400 ファ#+1,400 ソ+1, 400 ソ#+1, 400 ラ+1, 400 シb+1, 400 シ+1, 400 ド+2, 400 ド-1, 200,0 ド#-1, 200,0 レ-1, 200,0 ミb-1, 200,0 ミ-1, 200,0 ファ-1, 200,0 ファ#-1,200,0 ソ-1, 200,0 ソ#-1, 200,0 ラ-1, 200,0 シb-1, 200,0 シ-1, 200,0 ド, 200,0 ド#, 200,0 レ, 200,0 ミb, 200,0 ミ, 200,0 ファ, 200,0 ファ#, 200,0 ソ, 200,0 ソ#, 200,0 ラ, 200,0 シb, 200,0 シ, 200,0 ド+1, 200,0 ド#+1, 200,0 レ+1, 200,0 ミb+1, 200,0 ミ+1, 200,0 ファ+1, 200,0 ファ#+1,200,0 ソ+1, 200,0 ソ#+1, 200,0 ラ+1, 200,0 シb+1, 200,0 シ+1, 200,0 ド+2, 200,0 ド-1, 1000, 500 ド#-1, 1000, 500 レ-1, 1000, 500 ミb-1, 1000, 500 ミ-1, 1000, 500 ファ-1, 1000, 500 ファ#-1,1000, 500 ソ-1, 1000, 500 ソ#-1, 1000, 500 ラ-1, 1000, 500 シb-1, 1000, 500 シ-1, 1000, 500 ド, 1000, 500 ド#, 1000, 500 レ, 1000, 500 ミb, 1000, 500 ミ, 1000, 500 ファ, 1000, 500 ファ#, 1000, 500 ソ, 1000, 500 ソ#, 1000, 500 ラ, 1000, 500 シb, 1000, 500 シ, 1000, 500 ド+1, 1000, 500 ド#+1, 1000, 500 レ+1, 1000, 500 ミb+1, 1000, 500 ミ+1, 1000, 500 ファ+1, 1000, 500 ファ#+1,1000, 500 ソ+1, 1000, 500 ソ#+1, 1000, 500 ラ+1, 1000, 500 シb+1, 1000, 500 シ+1, 1000, 500 ド+2, 1000, 500
書式ですが、
音階 , 次の音までの待ち時間 , 鍵盤押しっぱなし時間
となっています。
- 時間の単位は(msec)ですので、1000と書くと1秒、100で0.1秒です。
- 音階、次の音までの待ち時間は必須ですが、鍵盤押しっぱなし時間は省略可能です。
- 空白行は無視されます。
音階、次の音までの待ち時間、については説明する事が別にありません、見たままです。
鍵盤押しっぱなし時間は省略可能なので、仕様を説明します。
鍵盤押しっぱなし時間の記述について
次の3種類の書き方があります。
- 省略する(押しっぱなし時間を書かない)
- 0を指定する
- 鍵盤を押し続ける時間をmsecで指定する
省略する
ド-1, 400
こう書いた場合、低いオクターブのドの鍵盤を 320msec(0.32秒)の間押しっぱなしにしてから離します。
そして、鍵盤を押してから400msec(0.4秒)後に次の音へ移ります。
このように、押しっぱなし時間を省略した場合、待ち時間x0.8を押しっぱなし時間とみなします。
0を指定する
ソ, 200, 0
こう書いた場合、真ん中オクターブのソの鍵盤を押してすぐ離します。
そして200msec(0.2秒)後に次の音へ移ります。
押しっぱなし時間を明示的に0と書いた場合、キーを叩いてすぐ離し、押しっぱなしをしないという処理になります。
鍵盤を押し続ける時間をmsecで指定する
レ+1, 1000, 500
こう書いた場合、高いオクターブのレを500msec(0.5秒)の間押しっぱなしにしてから離します。
また、キーを押してから1000msec(1秒)後に次の音に移ります。
つまり、レのキーを0.5秒間押し続け、離してから0.5秒待って、次の音を鳴らすという動作になります。
冒頭の無音待ち動作について
MIDIデータ等で複数トラック(例えば別々の楽器パート)が存在する場合、最初の数小節は何も演奏せず待っている、という場合があります。
これを実現するには
Sleep , 待ち時間(ミリ秒)
とドレミ譜に書きます。
例えば
Sleep, 10000
と記述すると、最初に10秒の待ち時間がはさまります。
ドレミ譜の仕様に関しては以上です。
ツールでドレミ譜を再生してみる
FF14PlayMusicScripterを起動します。
exeと同じフォルダにあるsample_playdata_doremi.csvをツールにドラッグします。
DataSourceタブが開き、ログエリアに「Loaded 111 playdata」と表示されています。
これで、111個のノートデータが読み込まれました。
Optionタブを開くと②の「Play」ボタンが押せるようになっているので、押します。
ドレミ譜の記述に従って、111音が再生されます。
読み込んだドレミ譜をスクリプトにコンバートする
ドレミ譜が正しくロードできた場合、①の「Output Script」ボタンが有効になります。
このボタンを押すと、読み込んだ.csvと同じフォルダに、自動的にスクリプトファイル(.lua)が保存されます。
ここまでの過程で、ドレミ譜をロジクールのスクリプトにコンバートできたことになります。
スクリプトをロジクールのデバイス(Gシリーズ)に登録する手順
コンバートした.luaファイルの内容を、ロジクールに登録する必要があります。
ここではその手順を説明します。
この例では「ロジクールG13ゲーミングパッド」のボタンに先ほど作成したスクリプトを割り当てます。
「Logicoolゲームソフトウェア」を起動します。
Gボタンのアイコンを押す>FF14のプロファイルを右クリック>スクリプト
するとこんなウィンドウが開きます。
これがスクリプトエディタです。いわゆるテキストエディタですね。
ここに、以下のソースをコピペして下さい。
function OnEvent(event, arg) if(event == "G_PRESSED") then if(GetMKeyState("lhc") == 3) then if(arg == 1) then PressAndReleaseKey("1"); elseif(arg == 2) then PressAndReleaseKey("F4"); end end end end
このスクリプトはG1を押すとキーボードの「1」を押し、G2を押すとキーボードの「F4」を押すと言うだけの無意味なものですが、これを使ってGボタンに任意のスクリプトを割り当てる方法を説明します。
1行目は無視して2行目の
if(event == “G_PRESSED”) then
が「Gボタンが押された時」という意味です。
次の
if(GetMKeyState(“lhc”) == 3) then
が「M3モード」の時という意味です。
M3というのはG13にあるモード切替ボタン[M1][M2][M3]の事ですね。
つまり、1~3行目で「M3モードのGボタンが押された時の処理」という意味になります。
G13の場合、Gボタンは全部で22個ありますが、どのGボタンが押された時か?というのが4行目です。
if(arg == 1) then
これが「G1ボタンだったら」という条件文になります。
ここまでで、「M3モードのG1ボタンが押されたら」5行目を実行する、という記述です。
5行目には、
PressAndReleaseKey(“1”);
こう書かれているので、キーボードの1を押してすぐ離す、という動作になります。
つまり5行目までで「M3モードのG1ボタンが押されたらキーボードの1を押してすぐ離す」という処理が書かれています。
G1ボタンを押した場合の記述は、ここで終わりです。
6行目は4行目の if(arg == 1) then と対になっています。
elseif(arg == 2) then
これは「arg が1ではなく、2だった場合」という意味なので、これに続く行は「G2が押された場合の処理」という事になります。
8行目の end は6行目の elseif と対になっており、ここまでで処理の記述を終わるという意味です。
G3ボタンからG22ボタンまで使う場合は、この end の代わりに
elseif(arg == 3) then
G3ボタンの処理
elseif(arg == 4) then
G4ボタンの処理
・・・・・・・・・
elseif(arg == 22) then
G22ボタンの処理
end
このように付け足していきます。
ドレミ譜をコンバートしたスクリプトをコピペする
sample_playdata_doremi.csvをFF14PlayMusicScirpterでコンバートしたものを、sample_playdata_doremi.luaとします。
このファイルを開き、Ctrl + aで全選択、Ctrl + cでコピーし、Logicoolスクリプトエディタの5行目に上書きペーストします。
このような状態になります。
これで、「M3モードのG1ボタンが押されたら演奏用の一連のキーボードを押す」という記述になりました。
この状態で[スクリプト]>[保存]を選んで保存します。
Logicoolゲーミングソフトウェアは閉じてしまって構いません。
FF14で自動演奏してみる
いよいよです。
FF14を起動し、G13の[M3]ボタンを押してモード3に切り替えます。
FF14側も演奏モードに切り替えます。
mapping.csvがFF14側のキーアサインと一致しており、Logicoolゲーミングソフトウェアのスクリプトエディタで正しくコピペできていれば、ロジクールのG1ボタンを押すと「ドレミファソラシドを3オクターブx3回異なるテンポで再生」されます。
スクリプトで自動演奏させるまでの基本的な手順は以上となります。
ツールの機能説明
ツール起動時はこのような画面になります。
最初は「Option」タブが開かれているので、このタブの内容を説明します。
②Play
ドレミ譜をツールにドラッグ&ドロップすると、テスト演奏できるようになります。
Playボタンを押すと演奏を開始します。
③Reload And Play
既に読み込んだドレミ譜を再読み込み(リロード)して再生するボタンです。
テスト演奏中にドレミ譜を修正してセーブした後に、ボタン一つでリロードして再生するためのものです。
④Modify Playfile
WaitValue Offsetに入れた値を合算して、ドレミ譜を出力する機能です。
ツールのWaitValue Offsetに値を入れてスクリプトを出力した場合、スクリプトにはオフセットが合算された値でウェイト値が出力されますが、元のドレミ譜の内容は変わらないので、テンポを調整してスクリプトを出力してもドレミ譜自体は元のままです。
これだと後で再度ドレミ譜をツールに読み込ませた場合、調整前の値に戻ってしまいますので、読み込んだドレミ譜の内容にWaitValue Offsetを合算し、ドレミ譜じたいを更新して出力するためのボタンです。
ボタンを押すと、ドレミ譜(.csv)と同じフォルダに、自動で改変したファイルを出力します。
出力するファイル名は「ドレミ譜(.csv)ファイル名 + _Mod」になります。
この出力先ファイルをテキストエディタで開いていたりして書き込みがロックされている状態では出力に失敗するのでご注意下さい。
⑧Notes
テスト再生中のノート情報がここに表示されます。
現在、ドレミ譜のどのあたりを何の音階で発音しているのかが分かります。
MIDIでは最大15音同時発音できるので、和音を再生した場合など、ここには最大15行の音名が表示されます。
※FF14の楽器演奏では和音は使えないので、ここに同時に複数音が表示されるようなデータを「単一のスクリプトにコンバートした場合」FF14中では正しく再生されません。
また、FF14で演奏できない範囲のノートが再生されている場合、ここの表示は文字色が赤色になります。
①Output Script
読み込んだドレミ譜を、ロジクール用のスクリプトにコンバートします。
このボタンを押すと、ロード元のドレミ譜(.csv)があるフォルダに自動的にスクリプト(.lua)を出力します。
出力ファイル名は、ロード元のドレミ譜(.csv)の拡張子を.luaに変えたものです。
⑥Script Options
スクリプト出力に関するオプション群です。
Add Shift or Ctrl for change octave
FF14内で演奏する際に、オクターブ変更を「ShiftキーやCtrlキーとの同時押しで行う=mappinf_full.csvが存在しない」場合にはチェックを入れておきます。
このチェックを外すと、上下オクターブの音階を弾く際に同時押しをせず、mapping.csvに書かれているアサインそのままのキーを押します。
FF14で全部の音階にキーを割り当てている場合は、チェックを外した状態でコンバート(Output Script)して下さい。
※mapping_full.csvが、FF14PlayMusicScripter.exeと同じフォルダに存在する場合、ツールはフルキーアサインモードだと判断してこのチェックが自動的に外れます。
Waitvalue Offset
ドレミ譜のウェイト値に、このボックスの値を加算します。
ドレミ譜内で
ド, 300
と書かれていて、Waitvalue Offset が -100 だった場合、
ド, 200
で再生されます。スクリプトの出力も計算後の値になります。
全体のテンポを調整するための補助機能です。
複数トラックのドレミ譜とWaitvalue Offsetの関係について注意
Ver 0.8.0以降、ツールには複数のドレミ譜(.csv)を読み込むことができ、同時に再生することができます。
つまり複数トラックで構成された楽譜を再生できます。
Waitvalue Offsetは、単純に全てのノートのWait値に加算されますので、複数トラックで構成されている場合、各トラックのノート発音タイミングは、まず間違いなくズレてしまいます。
全トラックに同じオフセット値を加算しているのに何故ずれるのかは、実際にModifyボタンで出力された各トラックのドレミ譜(.csv)を比較してもらえば分かります。
つまりこのWaitValue Offsetは単一トラックのドレミ譜(.csv)でのみ、実用に耐えうるものとお考え下さい。
⑤TestPlay Options
テスト再生用のオプション群です。
Loop
ループ再生用のチェックボックスです。
チェックONの状態でPlayボタンを押すと、テスト演奏をループします。
Begin LineNo ~ End LineNo
ドレミ譜(.csv)のファイルの行番号を指定して、その範囲をテスト演奏する機能です。
ここで言う行番号とは、ドレミ譜の.csvファイルの行番号です。
テキストエディタなどで行番号を表示すると、1~始まる数値が出ますが、あれです。
ドレミ譜に空白行があった場合、その行はデータとしては無視されますが、このツールで指定する行番号は、空白行を含めてテキストエディタが表示している数値そのままの値を入れてください。
データロード時に、ファイルの何行目に書かれていたかという情報も保持していますので、テキストエディタでの行番号表示の見た目で構いません。
このBegin LineNo、End LineNoのそれぞれのボックスに、空白や-1と言った無効な値が入っていると、その値は無視されます。
例えば、ドレミ譜の35行目から最後まで再生したい場合は、Begin LineNoに35、End LineNoには空白か-1と入れておけば良いです。
Ver0.8.0で、ツールが複数のドレミ譜(.csv)を読み込み、チェックが付いているドレミ譜のデータを同時に再生できるようようになりました。
このため、Begin LineNo及びEnd LineNoは「ドレミ譜がツールに1個だけ読み込まれている場合」のみ機能するように仕様変更しました。
※「ドレミ譜の行番号を指定してその範囲をテスト再生する」という機能と「複数ドレミ譜の同時再生」が仕様的に衝突してしまうため、共存させるには大きくプログラムを変更しなければならないからです。
Notes Offset
テスト再生時、及び、鍵盤ボタンを押した際の音階のオクターブに対し、オフセットをかけます。
具体的には、ここで指定した数字 x 12 の値を再生時のノート番号に加算します。
例えば -1 と記述すれば全体が1オクターブ下がり、 1 と記述すれば1オクターブ上がります。
出力されるスクリプトには全く影響しません。
Velocity
鍵盤を叩く強さ。
ここを小さくすると音量が小さくなります。
出力されるスクリプトには全く影響しません。
※FF14の楽器演奏機能には「鍵盤を叩く強さ」に相当するパラメータが存在しませんので。
Ver0.8.0で、ドレミ譜にもVerocityが指定できるようになりました。
テスト再生の際は、ドレミ譜に記述されているVerocityが優先して適用されます。
ドレミ譜にVerocityが指定されていない場合、ここで指定されている値が適用されます。
Timbre
テスト演奏の楽器を選択します。
キー長押しの鳴り方を確認するためには、オルガン系の楽器を選ぶ必要があります。
(ピアノの鍵盤を長押ししても、音は伸びないため)
⑨ログウィンドウ
処理のログが表示されます。
機能説明其の2・DataSourceタブについて
例えば楽器ごとにパートを分けて「合奏」を行いたいという場合、Domino等のツールで複数トラックに分かれたMIDIデータを作ると思います。
それをドレミ譜にコンバートしたものを、このツールにまとめてドラッグすると、上のように「DataSource」タブに複数のデータが登録されます。
①登録ドレミ譜リスト
各ドレミ譜の左にあるチェックを外すと、そのドレミ譜はテスト再生、データコンバートの対象外となります。
③Delete All
登録されているドレミ譜を全て削除します。
曲を変更する際などにリセットするためのボタンです。
補足事項
ドレミ~とCDEの対応表
ドレミ譜ではなく、CDE譜がツールにドラッグされた場合、スクリプト化の際にマッピングファイルに記述が無いとスクリプトへのコンバートに失敗します。
「未来永劫、絶対にドレミ記述のデータしか使用しない」という人以外はmapping.csv あるいは mapping_full.csv には、ドレミをCDEに置換した記述も追加しておくよう推奨します。
ド | レ | ミ | ファ | ソ | ラ | シ |
C | D | E | F | G | A | B |
ド#-1 = C#-1
ミb+1 = Eb+1
半角・全角文字は厳密に
csvファイル(mapping.csvやドレミ譜)に記述する内容について、カタカナは全角文字、それ以外は必ず半角文字で書いて下さい。
○ド-1
×ド-1
○ソ#
×ソ#
くどいようですが必ずこのフォーマットにして下さい。
Shift-JISとかだとFF14PlayMusicScripterは読み込めません。
何故このフォーマットなのかと言うと、”ドレミ”といった全角文字を許容している且つ、非Shift-JIS環境を気にしているからです。
G600用スクリプトの書き方
細かい説明はいいから、とにかくG600にスクリプトを割り当てたいという方はこちらを参考にして下さい。
function OnEvent(event, arg) if(event == "MOUSE_BUTTON_PRESSED") then if(GetMKeyState("mouse") == 3) then if(arg == 9) then PressAndReleaseKey("9"); elseif(arg == 10) then PressAndReleaseKey("a"); elseif(arg == 11) then PressAndReleaseKey("b"); elseif(arg == 12) then PressAndReleaseKey("c"); elseif(arg == 13) then PressAndReleaseKey("d"); elseif(arg == 14) then PressAndReleaseKey("e"); elseif(arg == 15) then PressAndReleaseKey("f"); elseif(arg == 16) then PressAndReleaseKey("g"); elseif(arg == 17) then PressAndReleaseKey("h"); elseif(arg == 18) then PressAndReleaseKey("i"); elseif(arg == 19) then PressAndReleaseKey("j"); elseif(arg == 20) then PressAndReleaseKey("k"); end end end end
G600のモード3の場合に、G9~G20までのGボタンを押すと、それぞれ9、a、b、c、d、e、f、g、h、i、j、kの各キーを押すと言うスクリプトです。
2行目の
if(event == “MOUSE_BUTTON_PRESSED”) then
と、3行目の
if(GetMKeyState(“mouse”) == 3) then
がG13と微妙に異なる記述になります。
2行目はG600、G300といったマウスデバイスのボタンが押された場合、という条件文です。
3行目はマウスデバイスのGモード(1~3までユーザーが切り替えられるアレ)をチェックして、モード3だった場合に成立する、という条件文です。
PressAndReleaseKey(“9”);
と書かれている箇所が、そのボタンが押された際に実行される処理なので、演奏する場合はここに演奏用スクリプトを上書きコピーします。
つまりG600のGボタンに割り当てる場合は1つのGモードに12曲登録できるという事ですね。
G300用スクリプトの書き方
細かい説明はいいから、とにかくG300にスクリプトを割り当てたいという方はこちらを参考にして下さい。
function OnEvent(event, arg) if(event == "MOUSE_BUTTON_PRESSED") then if(GetMKeyState("mouse") == 2) then if(arg == 5) then PressAndReleaseKey("5"); elseif(arg == 4) then PressAndReleaseKey("4"); elseif(arg == 7) then PressAndReleaseKey("7"); elseif(arg == 6) then PressAndReleaseKey("6"); elseif(arg == 9) then PressAndReleaseKey("9"); end elseif(GetMKeyState("mouse") == 3) then if(arg == 5) then PressAndReleaseKey("a"); elseif(arg == 4) then PressAndReleaseKey("b"); elseif(arg == 7) then PressAndReleaseKey("c"); elseif(arg == 6) then PressAndReleaseKey("d"); elseif(arg == 9) then PressAndReleaseKey("e"); end end end end
G300にはボタンがあまり付いていません。
このスクリプトではモード2、あるいはモード3の場合に、G5、G4、G7、G6、G9を押すとそれぞれに割り当てられたキーが押されます。
if(arg == 5) then
がG5が押された時で、
elseif(arg == 9) then
がG9です。
3行目の
if(GetMKeyState(“mouse”) == 2) then
はG600と同じ記述で、モード2の時の分岐になります。
elseif(GetMKeyState(“mouse”) == 3) then
は3行目と対になっており、「モード2ではなくモード3の場合」という条件文です。
スクリプト編集時の注意点
デバイスが使うスクリプトはPCから読み込むモードにする
ロジクールのGシリーズは、スクリプトをデバイス「本体」に保存する事ができます。
このモードだと、マウスを別のPCに接続したとしても、本体にスクリプトが保存されているので今まで使っていたスクリプトがそのまま使えるという利点があります。
但し、このモードではLogicoolゲームソフトウェアでスクリプトを書き換えることができなくなりますので、頻繁にスクリプトを編集する場合は面倒です。
デバイス本体にスクリプトを保存しておき、そのデバイスを別のPCに持って行って接続するなんて状況は、まぁまず「無い」と言っていいですよね。
機能としてはわざわざ本体にフラッシュメモリを搭載しているんでしょうから、コストもかかっている豪華な機能なんですが、そんなところにコストをかけるのははっきり言って無駄でしょう。
需要あるんでしょうか、この機能?
とにかく、最初にスクリプトの読み込みモードを「自動ゲーム検出」に設定しておきましょう。
Gボタンにスクリプトを割り当てる際は、Gボタンへの割り当てを解除しておく
どういう事かというと、例えばG300のGボタンにはデフォルトで「戻る」「進む」「DPI変更」といった機能が割り当てられています。
G600では、恐らく購入した皆さんは全てのGボタンにFF14用のキーアサインをしているかと思います。
このように、既に機能が割り当てられているGボタンに対してスクリプトも割り当てると、意図しない挙動になる可能性があります。
基本的には、スクリプトの処理とアサインされたキーは独立して動作しているようですので、例えばG9に演奏スクリプトを割り当て、キーアサインでは何らかの別のキーを割り当てていた場合、G9を押すとスクリプトの再生と同時にアサインされたキーが押されるようです。
まぁ、ロクな事はおきないでしょうから、スクリプトの起動キーとして使うGボタンについては「割り当てを解除」して何もアサインしない事をおススメします。
複数のGシリーズマウスを接続した状態の挙動について
G600とG300を同時にPCに繋いでいる場合など、複数の「Gシリーズマウス」が存在する場合に、
if(GetMKeyState(“mouse”) == 2) then
これは「どちらのマウスのGモードを判定しているのか」という問題が起きます。
答えは「PCに先に認識されたマウスのGモードの値が使われる」ようです。
G300がモード2、G600がモード3の場合、G300が先に認識されていれば、
if(GetMKeyState(“mouse”) == 2) then
この条件文が成立します。
というのも、前提としてスクリプトはPCに対し、同時に1つしか起動する事ができません。
G13とG600とG300の3台のGシリーズデバイスをPCにつないでいる場合を例にあげます。
この時、スクリプト自体は複数登録する事ができます。
FF14が起動している時と、そうでない場合とでスクリプトを分けることができます。
が、デバイスごとに違うスクリプトを割り当てる事はできません。
ですので、G600とG300といった「同じ種類のデバイス(この場合マウス)」が複数接続されている場合は、スクリプトは同時に1つしか起動しませんので、キーの重複に気をつける必要があります。
例えばG600とG300の場合、Gボタンが重複していますので、どちらのG9ボタンを押してもG9に割り当てられたスクリプトが再生されます。
なので、G13を持っていない、G600は持っているけど全モードの全Gボタンは既に戦闘用に割り振ってある、だけど自動演奏をしたいのでG300も接続した、という場合は注意が必要です。
G300で使えるG4~G9は、スクリプト上はG600のG4~G9と同等ですので、戦闘中にG600のG4~G9を押すと演奏用のキー入力が再生されてしまうと思われます。
まぁ、ですのでG600とG300を同時に使う、なんて事はやめておいた方が無難ですね。
G600を既に使っている場合は、いずれかのモードのいずれかのGボタンをスクリプト用に空けておく必要があります。
G300を使っているがG600は使っていない、と言う場合は簡単で、G600を追加接続して、余っているGボタンにスクリプトを割り当てれば良いです。
スクリプトを任意にOn/Offできればいいんですけどね。
G13では一応LCDメニューでスクリプトを切り替えることができるようですが、G600やG300にはそんな機能はありませんね。
免責事項とか
ツール同梱のreadme.txtにも書いてありますが、ご使用は自己責任でお願いします。配布とかはご自由に。