csTimerと両手タイマーの接続について

※本記事は根拠に乏しい妄想です。超適当な数字も乱発しますので気分が悪くなった方はすぐにページを閉じることをおすすめします。

この記事はSpeedcubing Advent Calendar 2020 10日目の記事です。9日目の記事はひらけんさんの「超多分割FMCやってみた」でした。11日目の記事はLeonさんの「<中々速くなれずに苦しんでいるおじさんスピードキューバー達へ贈ります>目指せ!4x4 Sub 60秒への道!」です。

みんな大好きcsTimer、PCで計測する方の多くが使っている印象です。私も大変お世話になっています。基本的にはキーボードを使って操作しますが、SpeedStacks Pro Timer G4やYuXin Timer等の両手タイマー(以下 タイマー)とPCをケーブルで接続することでタイマーでの計測結果を記録できる機能が備わっています。

本記事ではcsTimerとタイマーを接続する個人的なおすすめの構成、SpeedStacks Pro Timer G4で起こり得る問題とその原因、回避方法、調べていく中で分かったことなどを記載しています。

接続方法

まず、具体的な接続方法は既にuesyuuさんの記事Chris OlsonさんのYouTube動画かわむさんの記事など様々なリソースがありますので参照下さい…で終わってしまうのですが、簡単そうなのに上手くいかないケースが結構ありますので、まずおすすめの構成を(無保証です)。

おすすめの構成

まずPCでトライしましょう。Windows/MacOS問いません。iPhoneやAndroidは一旦脇に置きましょう。

SpeedStacks Pro Timer G4(以下 G4タイマー)をつなぐのは現状お勧めしません。YuXin TimerYJ Timer(以下 互換タイマー)を使いましょう。

3.5mmのステレオオーディオケーブルと、2.5mm変換アダプタを買いましょう。

幸運にもPCに「マイク専用の差込口」がある場合はケーブルをそのまま差し込みましょう。
PCにそれっぽい差込口が一つしか無い場合、おそらくそれはマイク専用ではなく「ヘッドセット用の差込口」で、そこにケーブルを差しても動作しません。この場合はマイク専用の差込口がついているUSBオーディオアダプタを買いましょう(USB Type-Cだとこのあたり ※Amazonのマイナーメーカー商品は価格の変動が激しいので適正価格を探ってください…)。3極-4極変換アダプタではうまく行かないケースがあります。USBオーディオアダプタをPCに接続、OSの設定でサウンド入力をUSBオーディオに指定しましょう。

後はタイマーの電源を入れて、csTimerのオプション > タイマー > タイム入力方法 を「スタックマット」に設定、ブラウザがマイクの使用許可を求めてきたら許可してあげてください。これで完了です。お疲れさまでした。

スクリーンショット 2020-12-09 10.29.50

スクリーンショット 2020-12-09 11.06.58

やっぱりG4タイマーをつなぎたい

できれば公式大会で使用されるG4タイマーをつなぎたいですよね。しかし、G4タイマーにはcsTimerとつなぐ上で2つの問題があります。

1つ目は「タイマースタートとほぼ同時にストップしてしまう問題」、2つ目は「勝手にインスペクションスタート問題」です。

タイマースタートとほぼ同時にストップしてしまう問題

まず1つ目の問題を再現した動画です。主に充電中のノートPCと接続した場合に頻発します。

0.002秒でストップしてしまいました。

この問題、互換タイマーではほぼ発生しません。タイマーがストップする時(計測中に両手を置いた時)の処理が少し違うためです。何が違うかを示すため、次の動画を用意しました。

互換タイマーは「両手を置いているにも関わらず計測が続く」場合があります。これはG4タイマーと異なる動作です。

実は互換タイマーは「ガッ!バシッ!」と手を置かないと止まらない仕様になっているので、そーっと手を置けば計測を続けてしまいます。互換タイマー持っている人は試してみてくださいね。

「今私は触れられているのか」タイマーの気持ちになってみる。

私達はタイマーのタッチセンサーを「触れる」「離す」の2つの状態しか無いと考えがちです。しかしタイマー側からすると「どのくらい手が近づいている感じがするか」でしかありません。電源スイッチのような単純ON/OFFでは無く、それぞれのタイマーが判断基準を持っています。

タッチセンサーに手を近づけたり離したりすると「センサー指数(仮)」が上がったり下がったりします。

これ以上ないくらいタイマーに手を押し付けている状態をセンサー指数10、誰がどう見ても100%手を離している状態をセンサー指数0とします。タイマーは常時変化するセンサー指数から「今はセンサー指数7、多分触れられてる、赤ランプ点灯します」「今はセンサー指数2、おそらく離されている、赤ランプ消灯します」という具合に判断・処理をしています。

G4タイマーは素直です。指数6を超えれば触れられている、指数5を下回れば離されているというような判断をしているようです。(遊びがあると思いますので、5から6の間の場合は変化していないと判断されるでしょう)

互換タイマーは少し別の方法で判断しています。離されたかどうかはセンサー指数のみで判断しているようですが、触れられたかどうかの判断をする際に、「センサー指数が急激に上がったか」を見ています。内部のプログラムを覗くことは出来ませんので「多分」ですが、「0.01秒以内に最低センサー指数6、上昇が4以上だったら触られたと思う」と言った具合です。

センサー指数は手の近づけ具合で変化するのですが、他にもこれを変化させる要因があります。今回の場合は「PCからケーブルを伝わってくるノイズ」と考えられます。特に充電中のノートPCが発するノイズは強力なようで、タイマーと手の距離を変えていないにもかかわらずセンサー指数2程度の影響があります。

次の動画はPCからのノイズがセンサー指数に影響を与えていると考えられるものです。充電中のノートPCとG4タイマーをケーブルで接続しています。赤いランプが付けば触れられている、消えれば離されているとタイマーが判断したことになりますが、この動画では手の近づけ具合をほとんど変えていないにも関わらず、G4タイマーの赤ランプが高速点滅します。ノイズの影響でセンサー指数6以上(触れられている判断)と5以下(離されている判断)が繰り返されている状態です。互換タイマーでは発生しません。ノイズが影響を与える範囲では赤ランプを点灯する(触れられている)判断をしないようにプログラムされているからです。

先の0.002秒でG4タイマーが止まった動画は、スタートする際、つまりG4タイマーに手を置いた状態から離していく…センサー指数は徐々に減り、8...7...6...5...
 G4タイマー「ハイこれは離れたでしょう!計測スタート!」
次の瞬間(0.002秒後)ノイズの影響で指数が6に上昇
 G4タイマー「触れられたよ!計測ストップ!」
…というような流れだと考えられます。

この現象を「G4タイマーのバグ」と言う人がいますが、バグとは言えないかな、と思います。これは仕方がない、そもそもPCと接続することは想定していないし保証外でしょうから。互換タイマーはPCとの接続も想定して作られていると思います。互換タイマーのほうが優れているかと思われるかもしれませんが、ミリ秒を計測するタイマーとしてどちらが優れていると言えるか判断に迷うところです。

勝手にインスペクションスタート問題

2つ目の問題「何もしていないのにcsTimerのインスペクションが勝手に始まる怪奇現象」を再現した動画です。

怖いですね。初めて出くわしたときには「なになに?なんで?」となりました。

これはcsTimerに搭載された「Stackmat G3(以下 G3タイマー)のタッチ操作でインスペクションを開始できる」機能とG4タイマーの相性が悪く起きてしまっています。

G3タイマーでタッチセンサーをタッチするとインスペクションが開始されるのですが、前提としてG3タイマーが「今タッチセンサーに触れられました」という情報をPCに送らなければ実現しません。実際G3タイマーは「現在の状態」を表すヘッダー情報を送出しています。csTimerの「ツール」の「stackmat」機能で確認できます。

リセットされた状態が"I"、右タッチセンサーを触ると"R"、左が"L"、両手が"C"、離せばスタートできる状態が"A"、計測終了状態が"S"です。

G4タイマーでこれらの状態を表すヘッダー情報の仕様が変わり、計測中以外は基本的に"I"のみを送出するようになりました(タッチ操作で能動的にインスペクションを開始する手段は失われました)。さらに理由が分からないのですがG4タイマーは定期的に(およそ1分間隔くらい)"A"ヘッダー情報を送出しています。なんで?…なんですが、まぁ何か理由があるのだと思います(Tournament Displayとのやり取りに必要なのかな…と予想しています)。

"A"は「手を離せばスタートできる状態」、つまり「両手がタッチセンサーに触れている」ことを表します。csTimer側ではリセット状態でタッチセンサーに触れればインスペクションが開始されるので、「"C"をすっ飛ばして急に"A"来たからちょっと変だけど、そういう決まりなのでインスペクション開始しますね〜」となるわけです。

ちなみに互換タイマーは計測中以外に"S"を送出しています。Tournament Displayと接続できないのはこのあたりが原因かもしれません(検証してないし、検証しようがない)。”A”の送出はしていないようですので互換タイマーではこの問題は発生しません。

問題を回避できないか

「タイマースタートとほぼ同時にストップしてしまう問題」はPCからのノイズの影響をなるべく小さくするために、ノートPCの電源を抜いて使う方法があります。また、タイマーとPCの間に差し込むことでノイズの影響を受けにくくする小さいアダプタをNyanyanさんと共同で作ったのですが、販売するとなると価格が…で保留中です。需要があれば作ってもらいますのでお知らせ下さい。

実際にはかなり素早い動作で手を離してタイマースタートすれば意外とこの問題にぶつからなかったりします。ただ計測回数を重ねて少し疲れてきた頃、落ち着いてインスペクションを済ませ、かなり先まで読めたからいいタイムが出そうという時に限って遭遇してがっかりしますので、この問題が発生しやすい環境の場合は互換タイマーを使うのが無難です。

「勝手にインスペクションが開始される問題」を回避する方法は
 (1) csTimerのインスペクションを使わない(csTimerの設定でOFFにする)
 (2) G4タイマーがインスペクションを開始してしまうより早く(おそらく1分以内)にスクランブルを終わらせるか、次のスクランブルを済ませてからタイマーをリセットする
 (3) csTimerに"A"ヘッダーでのインスペクションスタートをやめてもらう

(3)が最も良さそうなのでcsTimerの開発者に修正案を提出しましたが、今の所開発者から返答はありません(忙しいのだと思います)。

MoYu Timerについて

MoYu Timerは互換タイマーとしてではなく、別枠の特殊タイマーとしてcsTimer側で一応対応されていますが、あまりうまく動かなそうな印象です。

iPhoneとAndroidについて

iPhone 及び Android はいくつかのパターンを試してうまくいったケースがありましたが、急に接続できなくなったり、一旦スリープと解除を行うと復帰したりと大変不安定です。(iPadとかはどうなんでしょうか。)

OSのバージョンやブラウザにもよると思います。確認するべきパターンが多すぎて辛いので試した結果だけ置いておきます。

iPhoneは物理的なヘッドフォンジャックがついている旧モデルの一部に3極-4極変換アダプタを接続したところうまくつながったケースがありました。Lightning端子のみのモデルにLightning - 3.5 mmヘッドフォンジャックアダプタ + 3極-4極変換アダプタ は試した限りうまくいきませんでした。

AndroidはcsTimerのネイティブアプリ + USB Type-Cオーディオアダプタまたは3極-4極変換アダプタうまくいった端末がありました。ただし急に使えなくなったりとやはり不安定でした。

最後に

元々は「非公式計測会で使う、タイマーからタイムを自動取得するシステム」を作るためにcsTimerの公開プログラムコードを解析したことがきっかけで分かったことです。そのシステムはモチベーションが続かず保留になっていますがせっかくの機会なので分かっていることだけ公開しました。

そもそもタイマーからの信号をオーディオケーブルを通してPCで解析するのは、かなりの力技です。デジタル信号を音声として取得して分析するので色々と難しいケースがあります(そう言った意味でもcsTimerのプログラムコードは非常によくできています)。特にスマートフォンは通話が基本の機械であり音声入力にはかなりの部分でOSの介入が避けられず上手くいかないケースが多いのではとも予想しています。

近々発売される予定のGAN TimerにはBluetoothで接続できる機能があるそうなので、PCやスマートフォンとの接続が、より安定して便利に利用できるようになるかもしれません。GAN Timerの通信仕様が分かれば互換性のある「G4タイマーをBluetooth化するアダプター」がどこかから発売されるかもしれませんね。

以上です。最後まで読んでいただきありがとうございました ^ ^


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