UfoSaCtrlTrip Ver2.00

U.F.O. SAの販売が休止されたままという状況でこんなアプリの改修を公開するのもどうなんだかなあ、という気もするのですが、いくつか思うところがありまして、一旦(筆者の)整理も兼ねて、公開させていただきます。

画面に回転方向指定ボタンを追加したのと設定値の書き方を若干仕様変更しましたので、VersionNumberを大きく上げております。

『UfoSaCtrlTrip』とは、U.F.O. SA、A10サイクロンSAA10サイクロンSA +PLUS(プラス)バッハスマートROCKET+1Dのいずれか同時に3つまでをBluetoothLowEnergy(BLE)通信を用いてランダム制御したり任意パターンで動作させることができるAndroid向けの野良アプリです。

筆者は最近、U.F.O. SAのコントローラーに接続する乳首ローターを自作し始めてまして(過去記事『マイクロローターで振動系チクニーグッズを自作する(その2)(乳首責めグッズ)』をご参照ください)、U.F.O. SAのコントローラーに接続する機器が必ずしもU.F.O. SAのモーターカップとは限らない、という状況になって従来のUfoSaCtrlTripでは仕様的に不足に感じる部分が生じてきました。

一度、なるべく大きな仕様変更をしない(新たな仕様を理解するのも面倒臭いと思いますので)という考えの下、『UfoSaCtrlTrip Ver1.10』を公開したのですが、それでも物足りない状況となってしまいました。
というのも、U.F.O. SAのコントローラーに接続する機器の種類がさらに増えそう(増えた)な状況にVer1.10では対応しきれていないからでした。

また、どうやって仕様をまとめようかと考えていたところ、回転方向の限定について今まで余計なお節介をしていたかもしれない、と反省するに至りまして、回転方向の指定について改めて仕様を精査することにしました。

事の発端は筆者がROCKET+1Dを購入してUfoSaCtrlで制御した際にU.F.O. SAとは異なり正回転の方向にしか動かない(逆回転を指示しても反応しない)という事象に遭遇したことにありました。
そこで同じローター系であるバッハスマートも恐らく正回転方向にしか反応しないであろうと決め付けて、そういう前提で動くようにプログラミングしてしまったわけですが、本体を持っていて実際に確認できたわけでもないのに決め付けたのはちょっと横暴に過ぎたのではないかという反省を今頃になってしました。

ただ、逆回転指定に反応しない機器に逆回転指定をし続けていると著しくランダム感が損なわれる動きになってしまうという問題もあったので、回転方向を限定するという考え自体はいずれにしろ必要なものではありました。

そこで、ふと思い付いたのが、そういえば、正回転も逆回転もできるU.F.O. SAやA10サイクロンSA +PLUS(プラス)は逆回転もさせることを当然としていたけれども、正回転だけに固定、あるいは逆回転だけに固定したいといったニーズがあったりはしないだろうか、ということでした。

筆者はU.F.O. SAのコントローラーにU.F.O. SAではない別の機器を接続することがあるようになってきたので、そもそもU.F.O. SAの制御でも回転方向を限定したいというケースが発生する可能性が十分にあります。
あるいは、筆者はまだ作成したことがありませんが、一方向にしか回転しない前提のアタッチメント形状みたいなものが存在していても良いわけで、そうなると、回転方向は接続した機器により決定してしまうのではなくて、ユーザーが任意に切り替えられるようにした方が良いな、とそういう考えに至りました。

お待たせしました。こちらが新しい画面です。

Screenshot_20210722-145811.png

最大3台接続可能な各1)2)3)のPtn(パターンの略です)の右側のところに回転方向指示のボタンを追加しています。
このボタンはタップするごとに、
「⇄±」「→+」「←-」
の順に切り替わるようになっていて、
「⇄±」は正回転も逆回転もする
「→+」は正回転だけする
「←-」は逆回転だけする
ように制御します。

これはランダム制御だけでなく、設定テキストに記述できる任意固定パターンにも適用されまして、もし、固定パターンでは「-50」とか逆回転方向が指定されているが画面上では正回転のみに限定されている、といった場合に回転方向を反転させて正回転の「50」として制御を行うようにしています。逆回転限定もしかりです。

これにより、接続した機器に関わらず回転方向の限定ができるようになります。
ただし、例えばROCKET+1Dみたいに正回転しかしない機器を逆回転限定で動かそうとしても動きませんので、その辺りはユーザーさんの正しい操作に期待し、委ねることになります。

すっかり忘れてた。一応デモ動画を作成していたのでした。
ここをクリックorタップするとYoutubeに遷移します。


もう一つ、U.F.O. SAのコントローラーにU.F.O. SAではない別の機器を接続するようになってランダムパターンの種類数が限定されている点を改善したくなりました。
今まではUfoSaCtrlTripが対応している4機器分の設定をしていたわけですが、U.F.O. SAだけでも複数種類のランダムパターンを持ちたい。
その一方で使うことのない設定が残ってるのもどうなの?
任意固定パターンは幾つでも自由に設定できるようにしているのに、なぜ、ランダムパターンは4種類固定なの?
ということで、ランダムパターンの設定についても自由に増やしたり減らしたりできるように改修しました。

そこで設定テキストとして新たに必要となったのが、各ランダムパターンの名称です。
今まではプログラムで自動命名していました。
今回、ランダムパターンの個数も自由化されましたし、接続した機器との関係もフリーになりましたので、プログラム側で勝手な命名をするわけにもいかなくなりました。
というわけで、従来の設定テキストに対して各ランダムパターンの先頭行にそのパターンの名称を追加記載するようにしました。

そして、ランダムパターンの数が不定になりましたので、ランダムパターンの終わりを示す行として、

[RandomEnd]

と記載する行が必要になりました。

また、各ランダムパターンと接続機器との関係が明確に紐付けられなくなったため、各機器の[Start,Stop,Displacement Threshold: int(0~100): 3要素必須 Gradual動作開始時,減速時,似たようなPowerを続けないための最低変化量]を一意に判断することができなくなってしまいました。
従って、任意固定パターンの方にも逐一この[Start,Stop,Displacement Threshold]の値を記載する行が必要となりました。
ランダムパターンと同様に名称の次の行に追加記載するようにしてください。

例えば、ランダムパターンは1つだけ、任意固定パターンも1つで良いや、となった場合、

[■Random Name]
Random(U.F.O. SA)
[Start,Stop,Displacement Threshold: int(0~100): 3要素必須 Gradual動作開始時,減速時,似たようなPowerを続けないための最低変化量]
12,5,5
[Vol.1 PowerPattern: int(0, StartThreshold~100): 要素数は自由(ランダムに選ばれる)]
0,12,12,17,17,22,25
[Vol.2 PowerPattern: int(0, StartThreshold~100): 要素数はVol.1と合わせる(ランダムに選ばれる)]
0,12,17,17,22,27,35
[Vol.3 PowerPattern: int(0, StartThreshold~100): 要素数はVol.1と合わせる(ランダムに選ばれる)]
32,32,37,37,42,42,50
[TimePattern: int(1~): 要素数は自由(ランダムに選ばれる) 単位100msec]
10,16,22,28,34,40,46,52
[TimeIndexLimit: int(1~): 要素数はPowerPatternと合わせる 各数値はTimePattern要素数以内とする]
5,8,6,8,8,6,4
[GradualPattern: int(0,1〜){/int(1〜)}: 要素数は自由。Power変化値/時間(単位100msec)の分数型で記載。時間が1のときは分子のみ記載可能。約分せず。0はGradualさせない(確率を変えるために複数使用)。]
0,0,0,0,1,3/2,2,3,1/2,3/4,1/3,2/3
[PWMPattern: int(0,2〜){/int(2〜)/int(0〜)}: 要素数は自由。On時間(単位100msec)/Off時間(単位100msec)/OnのときPowerを何%に増(減)速するか。約分せず。0はPWMさせない(確率を変えるために複数使用)]
0,0,0,0,0,2/2/175,4/2/150,2/4/200,4/4/125,4/8/175
[RandomEnd]
[■MinimumInterval: int(1〜): 最小通信時間間隔。通信取りこぼしが発生する場合は数値を大きめに取ってみてください。 単位100msec]
2
[RelationChangePhases: int(1~): 2要素必須 min,max: 2機目のRel設定でRandomを選択している際に、Sync,Mirror,Unrelatedを切り替えるまでにいくつのパターンを消化するか、の最小値最大値を指定]
3,7
[SwitchHeightWeight:int or float(0~): Volume等下部ボタンの画面高さを指定します]
1.25
[■Customデータ]
DirectionDemo
12,5,5
50,10,2,0
0,10,2,0
-50,10,2,0
0,10,2,0
[Custom2 Vol.2]
0,50,0,0
[Custom2 Vol.3]
0,50,0,0
[DataEnd]

みたいな感じになります。(オレンジ色が追加になった行です。厳密には[■Random Name]はただのコメント行ですので無くても構いません。)
この例でいうと、「DirectionDemo」というパターン名称の次の行が[Start,Stop,Displacement Threshold]の値を記載した行で、任意固定パターンの動作指定はその次の行から始まります。

筆者はU.F.O. SAのコントローラーにU.F.O. SAのモーターカップを接続する以外にもマイクロローターやタブレットローターを接続することがあって、それぞれにスイートスポットが異なるため別々のランダムパターン設定を作っておりまして、

Screenshot_20210722-182855.png

こんな感じにランダムパターンの名称を自分で付けて、自分で使うパターンの分だけ設定記載しています。


設定の記載方法が変更になっているため、アップデートインストールが成功しないかもしれません。
その場合はお手数ですが、一旦古いバージョンをアンインストールしてからインストールし直していただく必要があります。
また、古い設定では動かなかったり消えたりするかもしれませんので、取っておきたい設定データがありましたら予め退避しておいてください。

その他の部分は従来のUfoSaCtrlTripから変更ありませんので、こちらの記事『UfoSaCtrlTrip Ver1.0』をご参照いただき、使いこなしてください。(かなりスルメの如く噛みごたえのある仕様説明があります)
BLE通信はときと場合により安定しないこともあります。その辺の快適に使うためのコツなども記載しておりますので、情報量が多くて読むのも大変かとは思いますがご使用の際は是非ご一読ください。

なお、今回の改修によりVer1.10の内容は全て無かったことになりましたので、今回のVer2.00を使われる方は『UfoSaCtrlTrip Ver1.10』の記事および内容をすっぱりと記憶から欠落させてくださいまし。


あとは、いつもどおりコンパイル環境をほぼ最新化しています。
(が、相変わらずターゲットAPIは22のまま(Android5.1)です。だって、権限絡みで使い勝手が悪くなるケースが出てくるんだもん。もし、問題がありましたらお手数お掛けして済みませんがお知らせいただけると助かります。こちらで検証した限りではAndroid11でも不都合無く動作させられたのでこんな形になっています。)

今回のバージョンではまだ影響は無いのですが、Android12でまたBluetooth周りの仕様が変更になります。
まだベータ版ですし実機も無いので試せないという状況なので、慌てるような時期ではないのですが、現状では過去のバージョンとの整合性が不完全で色々と動きに障害がある状態です。

ですので、近い将来、Android12への対応をどうするか悩まなくてはいけなくなるかなあと思います。(というか、既に結構悩まされた上で、今回のバージョンを公開するに至っています。)
基本的にはこのアプリは最新のAndroidへの対応を急ぐよりも古い機体で動くという方を重視した方が良いかと思っているのですが(余ったお古で使うイメージなので)、いよいよもって取捨選択を迫られることになってくるかもしれません。(現状でも開発環境上怪しくなってきているところが多々あるので。色々とすっごい切り捨てられてきてるのよAndroidの古いバージョンって。)

なんてことを言うのは、ちょっと画面OFFのまんまでタップしたりスワイプしたりしてON/OFFとかボリューム変更とか出来たら素敵じゃね? とか思って弄り始めたらAndroidバージョン問題で全然それどころじゃなくなってしまったからなのでした。(毎度のことながらAndroidは面倒なことが多い。いやソフトウェア開発全般が面倒の塊だけどもね。)

ダウンロードファイル

勝手な再配布はしないでください。
特に、うちのサイトは弱小なので、検索で上位に表示されるサイトに勝手にコピーされると、盗まれたのとほぼ同じ状況に陥ります。
何かしらの問題が発覚して、こちらのサイトでファイルを差し替えても、それが皆さんの元には反映されなくなることにも繋がります。

諸事情によりアプリの無料配布を終了致しました。
今後は活動を支援してくださる方とのみ細細と共有していければと思います。

今後のUfoCtrlアプリ配布ページはこちらです。
UfoCtrl Ver1.00 (UfoCtrl開発活動支援プラン)

ブログに無理矢理載せている都合上、ちょっと特殊なダウンロード形式にしているので、Androidの標準ブラウザではダウンロードに失敗するかもしれません。Chromeなら大丈夫みたい。ブラウザをある程度選んでしまうようです。ご了承ください。

アップデートインストール後に動作がおかしくなった場合は再起動してみてください。
それでもおかしい場合はキャッシュのクリアや一旦アンインストールしてからインストールし直してみてください。
その際、設定を書き換えている方はその設定が消えてしまいますので、操作をする前に設定の退避(テキストファイルなどに移して保存)をしてください。

最後に

アダルドグッズや同人コンテンツなどをご購入の際にはこのサイトのリンクを踏んでから購入していただけると、いくばくかの紹介料をいただけるので筆者が大変助かります。(製品の種類は問いません。)
このアプリや筆者の作成コンテンツが役に立ったとか面白かったとか、ありましたら応援していただけると幸いです。

2021-09-03

コメント

管理人のみ閲覧できます  [2022-02-02 00:50]

このコメントは管理人のみ閲覧できます

Re: No title 山牧田 湧進 [2022-02-02 01:46]

すみませんがこのサイトへのアクセスをされていないご様子ですが、なぜいきなりコメントできるのでしょうか?
私のサイトのコンテンツが勝手にコピーされていてそちらを見ているという判断で宜しいでしょうか?
申し訳ありませんが、今の状態ですと不正アクセスの疑いがありますので回答は控えさせていただきたく思います。
情報抜き取りのためのコメントはご勘弁ください。

もし私の誤解でしたら申し訳ございません。

この記事のタグ

U.F.O.

SA

アプリ

制御

自作