アーティフィシャルナイトとペンライトのいくつか
この記事は、 大学ボカロ部 Advent Calendar 2021(https://adventar.org/calendars/6596)の15日目の記事です。
先日開催されたMiku’s Origin主催アーティフィシャルナイトについて、技術面とコンセプトについていくつか紹介します。
アーティフィシャルナイト
【イベント情報!】
— Miku's Origin 千葉工業大学ボカロ研 バーチャルライブ作ってます! (@CIT_VLLab) October 26, 2021
現在開発中のARライブ
『Miku's Origin アーティフィシャルナイト』
ですが、日程が決定しました!
10月30日(土) 20:00よりTwitchで開催予定です!
配信URLhttps://t.co/9BueRsYydx
改めて、楽しみにお待ちくださいませ!#ミクオリ #初音ミク pic.twitter.com/N4FNioHrKR
Miku’s Originの4回目のライブとなった今回のライブは、コロナ禍で失われたリアルライブをオンラインライブで再現させるために
360度演出
インタラクティブ要素
みたいなところを目標に進めていったわけですがその中でも特に「インタラクティブ要素」として作っていたペンライトについていくつか内容の紹介をしてみようと思います。
コンセプト
ペンライトに関する最初の発案はライブへのユーザーの関与で、リアルタイムにライブの演出に対して自身のペンライトからの情報が反映されたら面白いんじゃないか、そのためのセンサー付きペンライトとスマホアプリの開発を一旦の目標としていました。なつかしい。
そこから、アプリの頒布は各ストアを経由する場合ストアの承認待ちがあったりOS依存なメンテコストがあったり、かといってAndroid向けにapkファイルを頒布してインストールさせるような、人によっては一生で一度もやらなさそうなことをさせるのはよろしくない、ということになりました。
結果的にウェブアプリであればストアを経由することなく、OS依存な部分を減らせるということで、ライブホームページの制作と並行してペンライト用ウェブアプリ(ウェブページ)の開発とペンライトの開発が始まりました。
![](https://assets.st-note.com/img/1639567908794-NkS0n4bdx9.png?width=1200)
開発
まず私が取り掛かったのはサーバーの構築とウェブアプリの検討でした。当時私の中にはWebRTCをネイティブ実装したときの断片的な知識があり、「Node.jsでherokuに鯖立てればよいのでは」と思い立ってサーバーを立てて、スマホのジャイロを送信する簡単なウェブアプリを作りました。基本的にここで作ったものが基盤になっています。
次に我々が取り掛かったのは物理デバイス、ペンライトの開発でした。「マイコンをペンライトに内蔵し、センサーの値をbluetoothで送る」ためにどんなパーツが必要か、その選定の作業が始まりました。
同時にこの時点である程度完成していたマイコン(ペンライト)側とウェブアプリ、ウェブアプリとサーバー、サーバーとTouchDesignerの3つを繋ぎ合わせる作業、さらにペンライトのデザインについても進行させました。
ペンライトのセンサーデータをどのようにライブに反映させるかについても検討していました。ペンライトの振り方を完全に再現した3Dオブジェクトを会場内に再現するとか、ペンライトのLEDライトの色を演出と同期させるとか、様々ありましたが結局ペンライトの振りをパターン認識し、対応するエフェクトのトリガーにするというところに落ち着きました。
ペンライトを発注し、実物が届いてから選定中のArduinoがケースに入らない問題が発覚して慌てて3Dプリンター業者を調べたりもしましたが、当時ミクオリのお手伝いとして開発に関わってくださっていた方が3Dプリンターを貸してくださり、この件は一旦どうにかなりました。
![](https://assets.st-note.com/img/1639570675319-eAbMUZ29is.jpg?width=1200)
この写真をtwiterのプロモに使おうとしていた代表は副代表に怒られてしまった
ペンライトの振りのパターン認識やArduino側の実装を優秀な後輩たちに任せて私はバックエンド寄りの開発に勤しみました。結果から言うとペンライトのデータの最後の受け取りはTouchDesignerではなくUnityになったのでUnity/C#でwebsocketを扱う必要が出てきて、これはwebsocket-sharp(https://github.com/sta/websocket-sharp)を使って実装しました。サーバー側の処理もいくつか変更を加えてherokuの接続タイムアウトが1分なので接続維持とラグの確認のため現在時刻を送り合うようにしたり、URIを使ってサーバーの状態を返すようにしたりとNode.jsの基本的なところをいくつか修正しました。
ペンライトが出来上がっていた頃には私はUnityの実装やらモデリングやらでくしゃくしゃになっていたので、こうして改めて見るととても良いものができたなと思う反面もっと調整できたなと思っています。何より開発に関わってくださった部員や関係者には感謝しかありません。ありがとう。
![](https://assets.st-note.com/img/1639572524715-Wxt9uco755.jpg?width=1200)
かわいい
おわりに
物理デバイスの開発に一貫して関われたのはとても貴重な経験だったし、自分の知識や技術をどう組み合わせればよいか考えたり足りない知識を補ったりして勉強になったし、何より楽しかったです。ですが会場設営やモデリング、配信環境での制御コードを書いたりしながら全てを同時進行するのはとても大変なのでもういいかなという気持ちです。アーティフィシャルナイトはそういう意味で我々の挑戦でもあったし、界隈への挑戦でもあったのかなと思っています。