どうして必要だったか
生放送向けにLive2Dが操作に連動する仕組みを作っていた時
ペンタブの動きを傾きまで真似るようになれば、より描いている感がでるだろうということで
ペンタブの老舗、Wacomのデベロッパー向けサイトで情報収集
そこでWintabというペンタブなどのデジタイザむけのAPIを知って
当初はこれを使って傾きデータを取得する方法をとっていた
wintabではなにがダメだったか
Wintabというのは基本ペイントソフト向けのAPIである
想定としてペンタブ情報を扱うのはペイントソフトだけ
そこでWTOverlapとWTEnableによるフォーカスが問題となった
ペンタブ情報を取得するにはWintabのフォーカスを取らねばならないが
フォーカスを取るとペイントソフトへの情報が途絶する
お絵かき配信を目的とした場合は本末転倒になる
HIDへのアクセス
Wintab内でアレコレ干渉しないように頑張ってみたものの、どうしても干渉する
そこで方針を転換した
ペンタブはだいたいUSBで接続されるが、USB接続の操作系デバイスはWindowsに
”ヒューマンインタフェースデバイス”として認識される
ワコムのペンタブも例外ではない
USBからデータが来て動いているのだから何かしらのアクセス方法があるだろうと調べると
そのまんまHIDという仕組みでUSBとIOアクセルできるようになっていた
もともとはデバイスドライバを作るためのモノで
USBが出回り始めた頃の技術でhid32.dllのAPIを使ってアクセスする方式だ
こまかい方法はなかなか取れないバグもあって正当な方法を示せないので他を参照してもらいたい
wintabの実態として
ワコムのWindowsFAQにこういう記述がある
VID、UsagePage、UsageはHIDアクセスに必要なデバイス特定コード
VIDはメーカーで固定なのでそのまま使うのだが
hclientでデバイスリストを覗くとワコムのVIDが他にも幾つか出てくる
UP=0xd、U=0x01は正当に見えてフォーカスを持っていないとデータが来ない
つまるところWintabの処理済みデータが入っていると思われる
現在の生データがはいってるのは別のポートで
UP=0xff00、U=0xaである
こちらのデータはフォーカスを持っていなくてもデータが来る。
しかしデータが整形されていないのでこちら側でデータの整形をしなければならない
整形はこんな感じ
総評として
どうしてもWintabに干渉せずにデータを取りたかったので行った今回の方法
問題点としては標準APIではないので最悪デバイスごとにプログラムを用意しないといけないのが最大のデメリット
ワコム以外のペンタブなら確実に必要になります
Wintabに標準でデータを取るAPIが用意されれば一番よいのですけどね……
それでもお絵かきLive2D配信では干渉しないのは必須機能