✍️

SonarPenの動作原理を調べようの巻

2020/12/04に公開

SonarPenの動作中の音声データを録音して、動作原理を見てみるの会

SDKはプロプライエタリで特に公開はされていないようなので、単にiPadと対応アプリ(メディバンペイント)を組み合わせるだけで試している。

SonarPenとは

https://www.amazon.co.jp/dp/B07ZCQ1J6V

SonarPenはタブレット向の筆圧感知機能を持ったスタイラスペンで、通常のスタイラスが電磁誘導やBluetooth無線で筆圧情報を伝達しているのに替えて、タブレットの3.5φイヤホンマイク端子を経由したオーディオフィードバックを使用している。

... まぁ想像通りの動作原理をしている。

https://hackaday.io/project/26225/logs

hackaday.io に 開発者自身が 開発記事を投稿していて、書かれているノウハウが割と面白い。

A good example would be the iOS detects the existent of a 1k ohm resistor between the MIC and Ground line to tell if the earphone has a MIC on it. Similarly, a Samsung Android device needs the resistor to be 1.4k ohm to confirm a MIC on an earphone. So my stylus has a 1.5k ohm resistor on its circuit for broader compatibility.

A little thing worth mention is all iOS devices sold in EU countries have a lower maximum earphone volume than the ones sold outside.

まだ謎なのは、SonarPenにはiOS用(写真左)とAndroid用(右)でディスク径の異なる2種類のペン先が付属してくる点で、Android用の方がディスク径が大きくなっている。Android機ではあまり画面に圧力を掛けない方が良いという見立てがあるのだろうか。

いずれにせよ、ディスク付き導電ゴムのペン先は安価なタブレット用スタイラスでは非常によく見られる構成で、SonarPenもヘッドホン端子に接続しない状態で画面をタッチすると筆圧なしのタッチペンとして使用できる。

動作原理

SonarPenは単なる "オーディオループバックケーブル" であり、出力した音声をマイク入力として折り返してくる。そして、その折り返しの音量が、筆圧やボタン状態に応じて変化するようになっている。

実際、SonarPenを 音声ループバックドングル とみなして、 RTL Utility のようなツールで 音声のラウンドトリップ遅延計測にも使える (何 つまり、画面にペンを付けていないときでも、音量はゼロになるわけではないようだ。

動作原理は非常にアナログなものだが、デバイスが音声の入出力さえできれば機能するためiOSやゲーム機のようなクローズドなプラットフォームでも機能を提供できるというメリットがある。

https://japanese.engadget.com/colorslivewithsonarpen-040026264.html

動作中の音声を録音する

今回は、イヤホンマイク用の分岐ケーブル2種(イヤホンマイクをPC用に分岐するものとその逆)と、Amazon Basicsの分配アダプタ、USBオーディオ入力を使用して音声を録音してみた。

https://www.amazon.co.jp/gp/product/B00SCDV9T8/

https://www.amazon.co.jp/gp/product/B00SA8P5V8/

https://www.amazon.co.jp/gp/product/B071HX9NX6/

https://www.amazon.co.jp/gp/product/B000VDXEV8/

タブレットからの音声出力

センシングには440Hz程度の正弦波を使用しているようだ。また、右チャンネルしか使用していない。

... 例えばボタンの検出をフィルタでやるとか考えると、もっと色々な成分をもった波形でも良いような気もするが。。

安全対策

↑ の波形を見ると、 -1.0 〜 1.0 のフルスケールの振幅になっている。こんなのを長時間聞いてたら頭が破壊されそうだが、 安全対策は特に入ってはいない ようだ。

手元では、適当な音楽用イヤホンを挿入した場合は0.5秒程度で自動的に音声出力がOFFになったが、これがiPadの機能なのかSonarPenのSDKの作用なのかはわからなかった。iPod付属のEarPodsや録音用のライン入力では、普通に正弦波が聴こえ続けた。

(iPadの "大きな音を抑える" はOFFで試している)

いわゆるCTIA端子を採用した通話用のモノラルイヤホンマイクは、左チャンネルとMICが結線され右チャンネルは繋がっていないことが多いため、センシングには右チャンネルのみ使用することで SonarPen ←→ イヤホンマイク の差し替えが行われたときにセンシング用の音声を無視させられるのかもしれない。

タブレットへの音声入力

SonarPenから戻ってくる音声は、筆圧が高いほど音量が大きくなるように設計されているようだ。

↓ このキャプチャでは、だんだんと筆圧を上げてから離している

デバイス側のマイクゲインにも影響されるため、例えばアイビスペイントでは専用のキャリブレーションUIを提供している。

ボタン

ボタンはどのような影響を与えているのか判然としなかった。実際、公式サイトでもボタンを機能させるためにはSiriを切るように案内されていたり、あんまり安定していない印象を受ける。

↓ このキャプチャでは、ボタンの押し離し2回やっている

Wacom等のペンスイッチと異なり、SonarPenのボタンは画面から離した状態で使うことを想定しているようだ。

かんそう

せっかくオーディオ信号という形で電力を得ているのに、アクティブスタイラスにはできなかったのかなという気はする。まぁペン先が安価で交換可能という要件があると厳しいか。。iPod等はどうもインピーダンス等も自動計測しているようなので、電力供給源としてはあまり信頼ができないのかもしれない。

これを調べたのはWebAudio等でブラウザから使えないかなと思ったからだけど、音声部分はともかくとしてパームリジェクションのしようがないので実用的には厳しいか。

安全対策節で書いた、特定のイヤホンで自動的に音声OFFになる挙動は非常に謎と言える。音声出力するアプリを書いて試してみれば良いのかな。。そもそも、筆圧ゼロでもフィードバックは有るんだし、ゲインが一定期間ゼロだったり、ノイズフロアが高かったらSonarPen以外が挿されたと見做して中断で良いんではないだろうか。。

周辺機器I/Fとしての音声入力

多くの人がSonarPenから連想するのは、Squareの磁気カードリーダー( https://web.archive.org/web/20120822034147/http://proteanpayment.org/?p=45 )だろう。イヤホンジャック自体は廃止の方向に突き進んでいるが、SonarPenはデジタル音声アダプタで正常に運用できるし、まだまだ新しい応用が考えられるのかもしれない。

他にもFSKを使ってArduinoから入力する( http://www.creativedistraction.com/demos/sensor-data-to-iphone-through-the-headphone-jack-using-arduino/ )等、ハードウェアのデバイスドライバを書かずに、OSの標準機能だけで周辺機器を成立させるためには有効な手段ではあった。

Discussion