見出し画像

5,000円の格安左手キーボードをStream Deckに近付けたい【XPPen ACK05】

はじめに

YouTubeを見ていると左手用キーボードの「ACK05」というものを発見いたしまして、なんと値段が5,000円代とかなり安かったので購入しました。

こちら、10個のカスタム可能キーと、カチカチと小気味よく回るダイヤルがついています。
接続方式は付属レシーバ、Bluetooth、有線の3つです。

さて、左手デバイスではないですが、Stream Deckという画面付き多機能マクロキーが売られています。非常に快適そうで僕も欲しいのですが、
スタンダードな「STREAM DECK MK.2」は18,000円前後とかなり高価なので手が出せません。


というわけで、5,000円代で購入したACK05をなんとかStream Deckに近づけてより便利に使おうという記事になります。

※Mac用の記事です。動作環境:macOS 13.4

公式ドライバ

公式ドライバをインストールしてみると、以下のようにキー設定を行える画面が表示されます。

公式ドライバ

現状、FCPやPixelmator Proみたいなショートカットキーをいくつも使用するアプリでは便利に使えています。また、メディアプレイヤーではダイヤルでコマ送りができます。ダイヤル中央のスイッチで通常のシークとも切り替えることが可能です。

メディアプレイヤー「IINA」の設定。ローラーホイールをカスタムしてある

肝心のキーに設定できる項目ですが、以下のようにキーコンビネーション(しかも1つのキーに複数設定して一括実行可能)はもちろんのこと、マウスコントロール、公式が用意しているマクロから選択できます。

登録できる設定一覧

なのでスクリーンショットや画面収録については、特に難しい設定をする必要はなく「キーボードから入力」を選んで「⇧ + ⌘ + 4」や「⇧ + ⌘ + 5」を設定するだけです。

さて、Stream Deckに近付けるために最も重要な項目が
「アプリケーションの実行」です。

実はこれ、「.app」に限らずどんなファイルでも指定できます。
つまりシェルスクリプトを実行することもできるし、Apple Scriptを実行することもできます。ただ「.sh」だと実行されないので、「.command」に拡張子を変更しておくことをオススメします。

Apple ScirptやAutomatorはスクリプトを「.app」にバンドルすることが可能で、且つ起動してもフォアグラウンドに切り替わることがないので後ろで何か動作させるのに向いています。

Stream Deckに近づけたい

①音声出力デバイスの切り替え

まずは音声出力デバイスの切り替えです。
僕が今使っているMac Studioには、AG03というYAMAHAのオーディオI/Fが接続されています。ただ、ご飯を食べるときにヘッドホンを外すことがよくあり、またオーディオI/Fはスピーカーには繋がっていないので、逐一Mac Studio本体のスピーカーに切り替えています。

これを毎回メニューバーから設定するのは面倒なので、スクリプト化した後にACK05に設定していきます。

とりあえずmacOS本体の設定についてはApple Scriptのお膝元だろうと思い調べてみたところ、どうやらmacOS Venturaからシステム環境設定が刷新されたのに伴い、過去のシステム設定関連のスクリプトは動作しないというPython 3もびっくりの破壊的変更が加えられたため断念しました。まぁmacOS 13に対応した書き方があるのでしょうが、調べるのが面倒なので。

代替手段を探してみた結果、シェルから実行できる「switchaudio-osx」というリポジトリを発見したのでこちらを使います。

使用可能な出力デバイスを一覧で取得するには以下のコマンド。

$ SwitchAudioSource -t output -a
LG HDR 4K
LG Ultra HD
AG06/AG03
Mac Studioのスピーカー

現在設定されている出力デバイスを取得するのは以下のコマンド。

$ SwitchAudioSource -t output -c
Mac Studioのスピーカー

そして出力デバイスを切り替えるコマンドは以下です。

$ SwitchAudioSource -t output -s "AG06/AG03"
output audio device set to "AG06/AG03"

これらを組み合わせて簡単なApple Scriptを記述します。

set currentDevice to do shell script "/opt/homebrew/bin/SwitchAudioSource -t output -c"

if currentDevice = "AG06/AG03" then
	do shell script "/opt/homebrew/bin/SwitchAudioSource -t output -s 'Mac Studioのスピーカー'"
else
	do shell script "/opt/homebrew/bin/SwitchAudioSource -t output -s 'AG06/AG03'"
end if

そしたらアプリケーションとして保存して、ドライバからキーに割り当てます。

ファイルフォーマットを「アプリケーション」にして保存
「アプリケーションの実行」を選び先程app化したスクリプトを指定

こうすることで、キーを押すだけで出力デバイスを切り替えることが可能になりました。

ただ一瞬とはいえDockにアプリのアイコンが出てくるのはウザいですが……。

アプリアイコンがDockに…

ちなみに以後紹介する項目についてもワークフローについては同一となります。
スクリプトをアプリケーション化 → ACK05に登録、という流れです。

②Discordのミュート

まだ手を付けていません。
といってもやるべきことは殆どわかっています。

こちらの記事を参考にしてmacにWebサーバを建て、そこにリクエストを送る部分をアプリケーション化してACK05のキーに登録するだけです。

記事の内容をそのまま使えば直ぐに実装できますが、僕はNord.jsを使うと蕁麻疹が出るため、RustかPythonでWebサーバ+DiscordRPCを動かす最適な方法を模索中です。

実装できたら、もしくは諦めてNord.jsを使うことにしたら、詳細を追記します。

ちなみにこれはDiscordを前面に出していないときでも関係なくミュートを切り替えるためのものなので、普通にDiscordをフォアグラウンドで使用する際であればキーボードショートカットを割り当てるだけで良いです。

③ショートカットを実行

macOS、iOSには「ショートカット」という対応アプリのAPIを簡略的に呼び出す便利なワークフロー作成アプリが存在します(まぁ①で紹介した音声出力デバイスの切り替えができないのには大きく失望しましたが)。

ちなみに「ショートカット」に関する記事は以前にも書いているので、良ければ一読ください。

ショートカットはアプリではないので直接ACK05に登録することはできませんが、コマンドラインから呼び出すための「shortcuts」コマンドが用意されているので、そちらを使ったスクリプトをアプリケーション化します。

とはいっても、イキってショートカットの記事を上げた割に僕自身ほぼ全く「ショートカット」を使っていないのと、
何か作ろうかと思いアプリを開いてもめぼしい機能が何一つ存在しないので、以下の適当な処理を割り当てます。

画像をリサイズして背景除去するだけの適当なショートカット

話が逸れますが、Appleはなぜアプリの名前を「ショートカット」なんていう普通名詞にしたのでしょうか。
このせいでショートカット.appについて調べようとしてもキーボードショートカットの記事が大量にヒットしてしまいます。

Appleの公式サイトすらもが埋もれており、ダブルクォーテーションで完全一致検索しないと「shortcuts」コマンドの存在に到達できません。

「ショートカット.app」に関連する情報は一つも出ない
完全一致検索でようやく一番上に公式のドキュメントがヒットする

閑話休題、
先程のショートカットでは「イメージ」、つまり画像ファイルをクイックアクションの入力から受け取るのですが、これはコマンドから引数で渡すことも可能です。

しかし、Finderで選択したファイルから直接起動するクイックアクションとは違い、スクリプトをアプリ化したものだと「現在選択されているファイル」がわかりませんので、それを取得する処理も記述しなければなりません。

最終的に書いたApple Scriptはこうです。

tell application "Finder"
	set allowedExt to {"jpg", "jpeg", "png", "tiff"}
	set selectfile to selection
	
	set aFile to selectfile's item 1
	set ext to aFile's name extension
	
	if allowedExt does not contain ext then
		return "not support file"
	end if
	
	set aliasPath to aFile's folder as alias
	set posixPath to POSIX path of aliasPath as string
	set filenameWithPath to posixPath & aFile's name
	
	try
		do shell script "shortcuts run 'ImageResize' -i " & (quoted form of filenameWithPath)
	on error
		return "Cancel"
	end try
	
end tell

なんか動かなかったりエラーが出ても、とにかくDock上から速やかに消えてほしいので、エラーは握り潰しています。

これをアプリケーションとして保存し、キーに設定すると以下の様に動作します。

ちなみにこれ、「ショートカット.app」の「ファイルを保存」アクション内で「保存先を尋ねる」にチェックを入れているので、Enterを押す必要があります。なので、キーボード操作がACK05だけで完結していないです。

本来であれば予めフォーマットを設定しておいて、それに倣ったファイル名を引数で受け取ったファイルが存在するパスに置いてほしいのですが、
(例:「~/Documents/Photo/gazou1.png」を変換したら「~/Documents/Photo/gazou1_%d.png」で保存してほしい」)
そんな気の利いたことは「ショートカット.app」にはできません(笑)。

終わりに

というわけで、買ってまだ2日ほどしか経っていないので現状やりたことはこれくらいです。

Stream Deckの便利なプラグインについて調べたらやはりボタンに付随しているディスプレイを活用したものが多いですが、当然このACK05はどんなに頑張っても本体にディスプレイは無いため再現できません。

ただ、ショートカットとの連携ができたり、そもそもApple Script・Shell Scriptが使えれば何でも出来るといっても過言ではないので、あとはこれまでの内容を適時変更しながら追加していく形になると思います。

とりあえず便利なので、皆さんも1台オススメですよ。

以上。

Twitterフォローお願いします!


この記事が気に入ったらサポートをしてみませんか?