eki_docomokiraiの音楽制作ブログ

作編曲家のえきです。DTM/音楽制作で役立つTIPSを書いています。

LuaMacrosで通常のUSBテンキーをプログラマブル化する

LuaMacrosで通常のUSBテンキーをプログラマブル化する。

USBテンキーを「Alt+Ctrl+数字」「強制終了」にします。

自動起動します。

f:id:eki_docomokirai:20210617105243p:plain

(2022年2月25日更新。ファイル共有を修正。すぐにDLできるようにしました。)

(2022年4月20日更新)

 

■概要

USBテンキーのキーアサインを変更します。

 

この記事では最小限の解説のみです。

ツール導入方法等、各種情報はネット検索でお願いします。

 

Cubaseでの使用を最大の目的としているので、ちょっと変則的な実装です。

 

Luaのコード

クソ丁寧なコメント付き。

1行目の80A13CEはデバイスIDです。

あなたが使用するデバイスのIDに置き換えてください。

バイス番号の特定方法は、

lmc_print_devices()

を実行。

f:id:eki_docomokirai:20210908161738p:plain

■■■■■■■■&の部分が接続されているキーボードのデバイス番号です。

ここで表示されているのはPCに接続されているメインのキーボード。

 

USBテンキーを差し込み、認識するまでちょっと待ちます。

で、もう一度同じ

lmc_print_devices()

を実行。

f:id:eki_docomokirai:20210908162618p:plain

メインキーボードと異なるキーボードIDが表示されました。

これが新しく接続したUSBキーボードのIDです。

このIDを使ってスクリプトを書いていきます。

 

非常に無様なチェック方法ですが、Luamacrosのデバイス確認方法はこれしかありません

--------------------

USBを差し替える等をするとデバイス割当て場所は変わります。USBを差し替えた時はやりなおし。

--------------------

スクリプト例(1)

有線USBテンキーBuffalo BSTK01での例です。画像右は対応するキーコードです。

 

f:id:eki_docomokirai:20210911143229p:plain

別のモデルの場合にはソースを改造、各数値を変更して活用してください。

--------------------

USBテンキーの入力を「Alt+Ctrl+テンキー」に変更します。

BSは「Alt+F4」にします。

lmc_device_set_name("SubKeys","8A51F16")
lmc_set_handler("SubKeys",function(button,direction)
if (direction == 1) then return end

if (button == 97) then lmc_send_keys("%^{Num1}",50) end
if (button == 98) then lmc_send_keys("%^{Num2}",50) end
if (button == 99) then lmc_send_keys("%^{Num3}",50) end
if (button == 100) then lmc_send_keys("%^{Num4}",50) end
if (button == 101) then lmc_send_keys("%^{Num5}",50) end
if (button == 102) then lmc_send_keys("%^{Num6}",50) end
if (button == 103) then lmc_send_keys("%^{Num7}",50) end
if (button == 104) then lmc_send_keys("%^{NUM8}",50) end
if (button == 105) then lmc_send_keys("%^{NUM9}",50) end
if (button == 96) then lmc_send_keys("%^{NUM0}",50) end

if (button == 107) then lmc_send_keys("%^{NUMPLUS}",50) end
if (button == 109) then lmc_send_keys("%^{NUMMINUS}",50) end
if (button == 106) then lmc_send_keys("%^{NumMultiply}",50) end
if (button == 111) then lmc_send_keys("%^{NumDivide}",50)end

if (button == 13) then lmc_send_keys("%^{Enter}",50)end
if (button == 110) then lmc_send_keys("%^{NumDecimal}",50)end
if (button == 8) then lmc_send_keys("%{F4}",50)end
if (button == 144) then lmc_send_keys("{F24}")end

end
)

上の三角を押して実行。

他のアイコンは左から順に「読み込み、セーブ」。

・上のスクリプトの説明を少し

今回は入れていませんが、「+はShift」です。

"+%^{Num1}"

にすれば「Shift+Alt+Ctrl+テンキー1」になります。

 

Backspaceは「Alt+F4」にしてあります。

if (button == 8) then lmc_send_keys("%{F4}",50)end

%はAlt、{F4}はFと4になってしまわないための囲みです。

・変えたい人

ググってがんばれ

・上のスクリプト例のダウンロード

ダウンロード版は説明コメント付き。

https://drive.google.com/file/d/1r-yPJc6UEORgHXdKqEvgJsfXnc9ln_Le/view?usp=sharing

 

■今回のスクリプトの理由

さまざまな理由によりこのようなスクリプトが最適だと判断した。

Cubaseの都合

Cubaseでの使用を目的としているので、「Alt+Ctrl+テンキー」という変則的な操作が多めです。

f:id:eki_docomokirai:20210617105352p:plain

これらに専用のCubaseショートカットを割り当てることを主目的にしています。

--------------------

Cubase9.5が追加テンキーをF13~Fが19までしか認識しない

Cubase9.5がテンキーの3モディファイアを受け付けない

なのでAlt+CtrlL+テンキーにした。

もしかしたら後発のCubaseではF24もしくはそれ以降も認識するかもしれません。可能であればもっとシンプルにすべてF13以降の追加キーにすれば良いです。

・USBテンキーのモデル都合

NumLock(キーコード144、8)は定義できません。

定義できるものもあるかもしれません。

・テンキー「000」は連打キーである

USBテンキーによくある「000」はデバイス内部の回路で強制的に3回押しているだけで、「0」と同じです。連打しても問題の無いCubase機能をアサインしましょう。

■OS起動時に自動で起動する

(フォルダ名、ファイル名は適時置き換えで。)

  1. Luamacrosのショートカットを作る。
  2. プロパティを開く。
    引数にスクリプト読み込みと実行(-r)をつける。(半角スペースを使う)
    C:\キーボードカスタマイズ\USBテンキー変更\luamacros\LuaMacros.exe -m -r "Luamacros20210908_AltCtrl_TEN_BS_AltF4.lua"
  3. ショートカットをstartupに入れる。(app~は隠しフォルダ)
    C:\Users\kousuke\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

f:id:eki_docomokirai:20210908183641p:plain

f:id:eki_docomokirai:20210908183650p:plain

なお、Luamacrosでは最小化のオプションは使えない。(強引にやる方法は存在するかもしれません。)

・別の自動起動の方法

バッチファイルを作る方法もあります。

試しましたが普通にスタートアップの方がスマートなのでやめた。

■与太話

ハードオフで実験用に買ってきたジャンクのUSBテンキー(buffalo BSTK01)が何も問題なく動作したので、せっかくだから作った。

https://img1.kakaku.k-img.com/Images/news_icv/640/2009021/20090216155527_300_.jpg

キーピッチが16mm。極薄なのでキーピッチ15mmのFKB1420キーボードと相性が良い。せっかくだから物理改造もほどこしつつ使ってみようと思う。

 

eki-docomokirai.hatenablog.com

 

■LuaMacroの利点

Autohotkeyではできない(できるかもしれない)特定デバイスのみキー変更ができる。

すでにAutohotkeyは常用しているので、可能であれば一本化したいが、Autohotkeyでのデバイス指定方法がわからん!

--------------------

Autohotkeyで通常のキーボードのPause|BreakキーをAlt+F4化するのは非常に便利。 (後日追記。不安定だったので使用を停止しました。)

eki-docomokirai.hatenablog.com

 

■2022年4月現在のLuamacros使用方法例

こうなっています。

複数キーの上に薄い板を貼り、実質「4キー」しか無い状態になっています。

気が向いたらあとで写真貼ります、かも。

 

こういう追加デバイスを使う際には、全ての入力キーを有効活用しようとするより、限定的な機能を最小限に割り当てるのがコツです。まじで。

Windows OSへの適用

USBテンキーに「Alt+F4」を組み込んでいます。

複数のキーのいずれかを押すと「閉じ」になります。

Cubaseへの適用例

モニター、リファレンスチェック関連の操作を組み込んでいます。

「モニター1」「モニター2」「切り替え」「リセット」の4種です。

通常は「切り替え」だけで運用します。

Cubaseを直接操作した後、なにかの拍子に「モニター切り替え」が正しく挙動しないので、「強制的にモニター1、2」「リセット」を組み込んでいます。

スクリプト例(2)改造版20200420版

その後の改造例。

パクりたい人は上の例(1)をベースにした方が扱いやすいはずです。

lmc_device_set_name("SubKeys","8A51F16")
lmc_set_handler("SubKeys",function(button,direction)
if (direction == 1) then return end

--NUMBERS
if (button == 97) then lmc_send_keys("%^{Num1}",50) end
if (button == 98) then lmc_send_keys("%^{Num2}",50) end
if (button == 99) then lmc_send_keys("%^{Num3}",50) end
if (button == 100) then lmc_send_keys("%^{Num4}",50) end
if (button == 101) then lmc_send_keys("%^{Num5}",50) end
if (button == 102) then lmc_send_keys("%^{Num6}",50) end
if (button == 103) then lmc_send_keys("%^{Num7}",50) end
if (button == 104) then lmc_send_keys("%^{NUM8}",50) end
if (button == 105) then lmc_send_keys("%^{NUM9}",50) end
if (button == 96) then lmc_send_keys("%^{NUM0}",50) end


--OTHER KEYS
--Enter(13) to ALT+F4
if (button == 13) then lmc_send_keys("%{F4}",50)end

--BackSpace(8)to ALT+F4
if (button == 8) then lmc_send_keys("%{F4}",50)end
--DOT.(110)NumDecimal
if (button == 110) then lmc_send_keys("%^{NumDecimal}",50)end

--NumLock(144)to F24
if (button == 144) then lmc_send_keys("{F24}")end

--PLUS+(107)NUMPLUS
if (button == 107) then lmc_send_keys("%^{NUMPLUS}",50) end
--MINUS-(109)NUMMINUS
if (button == 109) then lmc_send_keys("%^{NUMMINUS}",50) end
--ASTERISK*(106)NUMMULTIPLY
if (button == 106) then lmc_send_keys("%^{NumMultiply}",50) end
--SLASH/(111)NUMDIVIDE
if (button == 111) then lmc_send_keys("%^{NumDivide}",50)end


--

end
)

例(2)の配布URL

(あとでGoogleドライブのリンク入れる)

 

--------------------

 

© docomokirai 2017 無断転載、商用利用ならびに「音響DTM系のアフィリエイト広告を主目的としたウェブ活動」での利用を禁ず
レッスン案内はこちら。  寄付はこちら