VRAVを見ながら犯されたい

 三月初頭、留年を回避することができた安堵感から、私は大きな間違いを犯してしまった。

エッチな機械を買った

 進級することができたら、最初は風俗にでも行ってみる予定だった。しかし、実家暮らしから離れ一人きりの空間で歪んだ性欲は、風俗で果たして満足できるのか疑いを持つようになっていた。一回だけの夢を見るのにお金を使うよりも、何回も楽しめるような資産に投資したほうがいいんじゃないか……
 進級を確認した後、注文してしまったのはこれだった。 Hismith ピストンマシーン セックスマシーン 自動 スピード調節可能 ディルド付き KlicLokシステムコネクター ファックマシーン

 進級祝いに何を買うか考えたとき、最初は電動オナホにしようかと思っていた。VORZE社のA10サイクロンSAとA10ピストンSAという電動オナホは、AVや音声に連動してオナホを動かすことができる。この連動機能目当てで、3、4年前に私は同社のU.F.O.SA(ちくびがきもちいいやつ)を買った。
 しかし、調べていくうちに海外にもこういった製品を楽しむコミュニティがあることが分かり、海外製のオナホやバイブが並ぶ中に今回購入したこのHismith社のピストンマシンがあった。どうせならオナホじゃなくておしりを犯されて未知の快感を味わいたい、そう思ってこれにした。

 注文はAmazonではなくHismithの公式サイトから行った。Amazonの販売者が米国企業のHismithを謳っているのに中国の住所で、ちょっと怪しいなと思ったからだ。注文した後に実はHismithの製造は中国で行っていて、そこが商品を別に販売しているかもしれないことが分かった。公式サイトからした注文も実際に香港から発送されてきた。レビューも悪くないし、もしこれから買う人はAmazonからの方が楽だし安いと思う。

 本体のピストンマシンと、その先に着ける専用のディルドを買って、発送費込みで6万超えた。注文してから後悔した。海外からの輸入だから発送費だけで40ドルもした、Amazonで買ってもよかった……
 注文から4日後、商品が家に届いた。隣の国からなので案外早かった。ずしりとくる重さで、今までとは違う機械の重厚感があった。

f:id:mesuikichang:20210311145428j:plain
パッケージと15cm直尺
 簡単な組み立てを済ませて電源を入れ、コントローラーのつまみで出力を上げていくと、ウィンウィンと軽快にシャフトが動いた。音も小さく、部屋の外に漏れることもないだろう。あと少しでこれに犯してもらえる…………そのための準備がまた一つ終わり、胸の高鳴りが強まった。
f:id:mesuikichang:20210311145437j:plain
組み立て後

このままじゃ機械を動かせなかった 

 ここからは技術的にどんなことをしたか説明していく。長いので興味ない人は目次から感想に飛んでください。
 アプリの話の前に、前述した連動機能がどういうものか説明する。連動する対象の動画や音声とは別に、連動して機器が動くような動作を指定したデータファイルと、そのデータファイルを読み取って、連動機器へ信号を送るアプリを用いて行う。

 ここで重要なのは、すべての連動機器が同じデータの形式で動くわけではなく、データを流用したい場合は機器ごとに別の形式へコンバートする必要があることだ。

 例として最初に名前を挙げたA10サイクロンSA、A10ピストンSA、UFOSAをもとに説明する。まず機器の仕様として、サイクロンとUFOは回転運動を行うが、ピストンは前後運動である。そのため、前者は『時間』、『向き』、『速度』の3つのパラメータを必要とするのに対し、後者は『時間』、(前後の)『位置』、『速度』のパラメータを必要とする。『時間』と『速度』はそのまま使えたとしても、2つ目のパラメータである『向き』と『位置』ではおかしくなってしまう。(サイクロンとUFOでは厳密には同じ信号を流用することができるが、サイクロンの信号をUFOに送ると、『速度』の数値が大きすぎて乳首がちぎれ飛んでしまうし、動きの緩急が激しすぎるて実用的ではない。)

 Hismith社のピストンマシンは、『時間』、『速度』の2つのパラメータで動く。図体が大きくて動き自体も単調だからだろうか。データが単純なのにも関わらず機器を操作できるアプリは少なく、現在有効なのはXToysというWeb上で動くアプリと連動には使えないHismith社製の公式アプリだけだ(これらのアプリの安全性は分かりません、注意してください)。

 XToysにも欠点があり、例に挙げた日本製の機器(サイクロンとかUFOとか)に対応した有志のアプリと比較しても、csv形式のファイルを読み込めばよく、0.1秒単位で動きを読み込むアプリに対して、XToysは1秒単位でしか読み込めず、自動でデータを読みこむ機能も実装されておらず、自分でWebページにパラメータを送信しないといけない。

 当初はこのXToysを使う予定だったが、これくらいなら自分でも作れるんじゃね?という甘い考えのもと、改良版アプリの作成を開始した。  

エッチな信号を送るアプリを作った

 初心者なので大目に見てほしい。

はじめに

 作りたいアプリの仕様を決めた。 実現したいことはAVとピストンマシンを連動させることだ。

  1. デスクトップアプリとして動くこと。
  2. データファイルとしてcsv形式のファイルを読み込んで動くこと(csvファイルが一番日本製の機器で使われていて、ツールが豊富だから)
  3. 複数のデータファイルを読み込めること(VRのAVはだいたい分割されてるから)
  4. Hismith社製のピストンマシンに信号を送れること
  5. 0.1秒単位で信号を送れること(日本製の機器がそうなってで、ツールでコンバートしたときに統一しておいたほうが楽だから)
サードパーティー製ツールの利用、改良

 購入したAVに付属しているデータファイルはcsv形式ではないらしく、販売会社が用意したアプリDPlayで再生する専用のものであることが分かった。  PINKちゃんねるを漁っていると、そのファイルからcsvを抽出できるAfestaExtract(GitHub)というアプリを見つけた。使ってみると確かにcsvファイルが抽出できたが、見る限りそれはA10サイクロンSA用のcsvファイルだった。

 ここで欲しいのはA10ピストンSA用のcsvファイルだった。ピストンというだけあって信号の緩急が似通っていて、ピストンマシン用のデータに流用が可能だからだ。私はソースコードを落としていじってみることにした。

 AfestaExtractは最初にAVに付属しているデータファイルである.vcz形式の圧縮ファイルを参照していて、実際に展開してみると対応した機器に応じたデータだと思われるバイナリファイルが存在した。サイクロン用ではなくピストン用のファイルを参照するよう該当コードを修正した。 f:id:mesuikichang:20210311163153p:plain

 もう一回csvを抽出してみると、パラメータの数値がごちゃごちゃになってしまっていた。どうやらサイクロンとピストンではバイナリファイルの解析方法が共通とはいかないようで、バイナリファイルを開いてパターンを読み取り、コードを修正する必要があった。 一つ目のパラメータは『時間』で共通なので、それをヒントに修正し、無事目的のcsvを抽出できるようになった。

f:id:mesuikichang:20210311170206p:plain

1. アプリの枠組みを作った

 アプリなんて作ったことがないので、PCに入っていたVisual Studioで作れるらしいWPFアプリというのを作ることにした。流れでUnityでちょっといじったことあるくらいのC#をつかうことになった。
 とりあえず見た目は気にせず、いいやくらいの気持ちで作っていった。 f:id:mesuikichang:20210311171352p:plain  以下の記事を参考にした。
Windows GUIプログラミング入門1 メッセージボックス表示 - Qiita

2-3. csvを読み込めるようにした

 上の記事にcsvを読み込む記事があったので、それを参考にした。ファイルを開き、csvを読み取って内部のリストに格納できるようになった。
 ドラッグ&ドロップで複数ファイルを読み込むのにも対応した。

 画面上部には、読み込んだファイルに応じてタブを動的に生成し、csvとそれに応じたグラフを表示するようにしたが、.NET触って2日目でこれを実装しようとしたので大変時間がかかり、グラフに関しては何回やっても正常に描画されないのであきらめて放置した。
 動的に追加しようと奮闘したおかげで、ビューと呼ばれる部品たちがどのように動いているかよくわかった。オブジェクト指向ってこんな感じなんだなと思った。
 主に以下の記事を参考にした。

動的にTabControlを作る - まるまるこふこふ

WPFでソフトを作る日記 (3) TabControlに動的にコントロールを追加する - 気楽なソフト工房

4. 信号を送れるようにした

 アプリからピストンマシンにどうやって信号を送ればよいか、最初は全く分からなかった。Bluetoothを使っていることが唯一の手掛かりだった。

AndroidアプリとデバイスとのBluetoothでの通信内容を解析する  最初にこの記事を見つけ、AndroidスマホWiresharkもあったので、先に触れたHismith社製の操作アプリを使ってマシンを動かし、ログを取ってマシンを動かす際にどんな信号が送られているか解析した。数時間にわたる画面とのにらめっこの結果、マシンを動かす信号らしきパケットを発見した。  

f:id:mesuikichang:20210311174745p:plain
Wiresharkで見たそれらしきパケットの一つ

 同時進行で、Bluetoothの通信を行えるようにコードを書いていた。Bluetoothの通信に必要なパッケージがインストールできなくて、Visual Studio自体を2017から2019にアップデートする羽目になった。
 Bluetoothは何もわからなくて信号送信部分以外ほぼコピペになってしまった……

 Bluetoothのデバイスにはサービスとその中にあるキャラクタリスティックというものがあって、(サービスがクラスでキャラクタリスティックが関数みたいな感じ?)それぞれにUUIDが割り振られているそうだ。こちら側はデバイスのサービスとキャラクタリスティックのUUIDを指定して接続し、キャラクタリスティックの値を読み込んだり書き込んだりするらしい。
 つまり、2つのUUIDが分かれば通信ができて、通信内容がちゃんとしていればピストンマシンが動くということだ。
 UUIDについては、記事を参考にしてBLE ScannerというAndroidのアプリとパケットを見比べて求めた。実際にマシンを動かすのに必要なUUIDは、

  • システムUUID:0000ffe5-0000-1000-8000-00805f9b34fb
  • キャラクタリスティックUUID:0000ffe9-0000-1000-8000-00805f9b34fb
    だった。

 無事に接続が行えた所で、通信内容の実装に入った。ドキュメントと先ほど解析したパケットを見比べたところ、WriteValueAsync関数を使ってパケットのvalueの値を変えて送信していけばいつか動くだろうということが分かった。パケットを見比べると先頭バイトの aa は一致しており、2バイト目も大体が 04 だった。

f:id:mesuikichang:20210311181959p:plain
試行錯誤の様子
 パケットの値と同じ値を送信すれば動くが、ちゃんと法則を見つけないと自動化することはできない。一時間近くかけてやっと、3バイト目と4バイト目の値が4違えば有効なvalueとなり、そのバイトの値を10進数に直せばそのまま1~100の値を取ることがわかった。
 valueがaa 04 00 04 なら速度は0となりマシンは動かず、 aa 04 10 14 なら速度は16となりゆっくりと動く。
 アプリ内で自作率が最も高いであろうコードは次のようになった。

 private async void SendSignal(int speed)
 {
     int speed_fixed = speed *  int.Parse(System.Configuration.ConfigurationManager.AppSettings["convertRate"])/100;
     byte[] signal = {0xaa,0x04, BitConverter.GetBytes(speed_fixed)[0], BitConverter.GetBytes(speed_fixed+4)[0] };
     var result = await LatestDataCharacteristic.WriteValueAsync(signal.AsBuffer(),GattWriteOption.WriteWithoutResponse);
}

csvから読み取った速度を引数に受け取り、configで指定した倍率をかけて全体の補正をし、16進数に直してBluetoothバイスに送信する。 asyncが何かはよく分からないが無事にピストンマシンを動かすことができるようになった。

主に以下の記事を参考にした。

[C#/WinRT]Bluetooth v4(BLE)機器と通信する(C#で実装メモ) - Qiita

Omron 環境センサ(2jcie-bl01)の設定をBroadcasterに変更してアドバタイズパケットから情報を取得してみるテストまで - Qiita

5. 時間通りに信号を送れるようにした

 このアプリには動画再生機能はついていないので、スマホで見るVR動画とアプリの再生ボタンを同時に押して同期させる。原始的である。

 前工程では画面内にあるテキストボックスに直接valueを入力して、ボタンから上記の関数を呼び出してマシンを動かしていたため、まだcsvを読み込める段階には至っていなかった。

 csvの時間の最小単位である0.1秒周期のTimerを生成し、累積秒数がcsvの時間のパラメータと一致した際にマシンへ信号を送信するようにした。ここでは、System.Timers.TimerクラスのTimerを用いた。

 実際に稼働させた後、どんどん信号がずれていったので調べてみると、関数の処理の影響なのかTimerの影響なのか、誤差がどんどん溜まっていることが判明したので、記事を参考に修正した。

 主に以下の記事を参考にした。 タイマにより一定時間間隔で処理を行うには?(サーバベースタイマ編):.NET TIPS - @IT

Timerを使ったループで誤差が蓄積しないようにする - Qiita

エッチな機械を使ってみた💖

 無事csvを読み込んでVR動画と連動できるようになったピストンマシンを使ってみることにした。のだが、付属のディルドがアメリカサイズすぎて私の穴が避けそうになってしまった。こんな状態で稼働させたら新品のマシンが血に染まることになる。アメリカゴムちんぽに尻穴を拡張されながら、私は3本あるディルドのうちの1本(一番太くて一生かかっても入らなそうなやつ)を解体し、ピストンマシンとの接続に必要な部品をうちにあったおこちゃまバイブに取り付けてプレイを始めることにした。

 しかし、最初太いので頑張ろうとしてしまったため、穴が瀕死でヒリヒリ7割気持ちいい3割といった感じだった。バイブも先が曲がっているものだったので、腸壁をゴリゴリやられて大変だった。それでも女優の腰の動きに対して、腸内をノックされる感覚は6万の大金にふさわしいポテンシャルを感じさせられた。このコンディションでも感じられる快感、そしてシンクロして犯される感覚。女優が騎乗位で腰を打ち付けるたびに本当におちんちんが入ってくる。自分が男優側のはずなのに、女優に成り代わって犯されて、しかもペースは画面の中の女優に握られている。不思議で淫靡な体験だった。是非お勧めしたい。

おわりに

 わたしはホモじゃありません、だって視界には男はいないんです。男は嫌いだけどちんぽは気持ちいい、それでよくないですか?

 今夜はみちのくディルドJrに部品を付けて楽しみます💖ごきげんよう💖