この記事は Wano Group Advent Calendar 2022の24日目の記事となります。
4日目Product-Led Growthまとめと25日目Notionとtandemで作る相談しやすいリモートワーク開発のすすめにも記事を書いているので、そちらもどうぞ。
また、グループ会社のEDOCODE(メインで仕事してます)のAdvent Calendar もありますので、よろしければそちらもどうぞ。
この記事に書いていること
個人的に開発しているSTREAM DECK互換の仮想ボタンデバイスのMyDeckについて書きます。
MyDeck とは?
STREAM DECKと互換性のある仮想ボタンデバイスです。実物のSTREAM DECKデバイスをLinuxから使うのが不便だったので作り始めたのですが、実物がなくても開発したいとか、ブラウザでエミュレートできれば、色々面白いんじゃないか?
というところで、もともと、MyStreamDeck
という名前で作っていましたが、MyDeck
と変更しました。
デバイスを操作するライブラリはすでにあるpython-elgato-streamdeckを使っているので、それをラッピングするような形で作っています。
なお、まだまだ荒削りなところが多いです。というのと、Pythonはそんなにわかっていません。
MyDeckの特徴
- STREAM DECKのデバイス制御を行うPython実装にラッピングする形で、仮想Deck及び物理STREAM DECKにアクセスできる
- 言語はPython。仮想Deckの実装はVue.js
- Python のスレッドでアプリケーションやゲームを動かすことが可能
ブラウザ上で動くものなので、スマートフォンのブラウザ上に表示しておけば、STREAME DECKを買わなくてもそれっぽく使えなくはないです。PC上のデスクトップの端っこに置いて便利ショートカットとして使うのもありかもしれません(Electronアプリでも作れば良いのかも)。
MyDeckの仮想Deckでできること
- ボタンのPush(クリック)
- ボタンへの画像表示
- 右クリックでボタン設定
課題
- メモリリークしてるっぽい...
- 色々やってるうちにキーの反応が悪くなった...(↑が原因かも)
というのは、調査中です。
MyDeckのデモ
どんな感じで動くのデモです。
MyDeckの動作フロー
ざっくりなデバイスを動かすまでのフロー。
仮想デバイスについて
仮想デバイスは、python-elgato-streamdeck の StreamDeck
クラスと(だいたい)互換性があるVirutalDeck
のインスタンスです。
MyDeckのアプリの仕組み
MyDeckではボタンに表示するアプリを動かす仕組みがあります。
app_*
から始まるソースコードにアプリのコードがあります。
アプリが動く仕組み
ざっくりとこんな感じで動きます。
簡単なアプリの例
デジタル時計をボタン上に表示するアプリの例です。
from PIL import Image, ImageDraw, ImageFont
from mydeck import ThreadAppBase, ImageOrFile
import datetime
# whole image size
X: int = 100
Y: int = 100
class AppClockDigital(ThreadAppBase):
def set_image_to_key(self, key: int, page: str):
now = datetime.datetime.now()
im = Image.new('RGB', (X, Y), (0, 0, 0))
font = ImageFont.truetype(self.mydeck.font_path, 25)
draw = ImageDraw.Draw(im)
time_text = "{0:02d}:{1:02d}:{2:02d}".format(now.hour, now.minute, now.second)
draw.text((2, 33), font=font, text=time_text, fill="white")
self.mydeck.update_key_image(
key,
self.mydeck.render_key_image(
ImageOrFile(im),
"",
'black',
True,
)
)
おしまい
ということで、MyDeckのご紹介でした。実際のスースコードは、GitHubを参照してください。
ちなみに、これを開発するために、STREAM DECKを2台買いました(1台はメルカリですが)。そして、最近、STREAM DECK +が出ましたね。さすがに買わないと思うので、対応はしないかも。
人材募集
現在、Wanoグループでは人材募集をしています。興味のある方は下記を参照してください。
JOBS | Wano Group
EDOCODEについては、以下をご参照ください。
Jobs at EDOCODE