【限】できたら便利そうなこと (Pixiv Fanbox)
Content
twitter post: 1332166717020151808
この発言の真意はというと、
特定の音源を全ダウンロードせずともサクッとブラウザ上でデモ使用できるようにしたいという、そこで使ってみて気に入ったらそこで初めて完全データのダウンロードを始めるようにしたい。という発想のものです。
ただ、これを実現するために必要なものを考えるだけ考えるとこうなるんですが
ブラウザ上でUTAUしたい
GUI
音程とかピッチのアレとか表示してくれる見た目の部分。
純粋に html するのであれば、調べた感じは か かだろうか。もしくは unity2D を使ってしまった方が楽かもしれない。
一番たいへんそうだけど、見た目だから作るの自体は楽しい部分だと思う。ただ、ここ以外の機構が全くできてないと、どれだけ作り込んでも全く何も起こらない。
合成情報のメタスクリプトを咀嚼するスクリプト
GUI に含まれる部分。unity で作ると C# で書くことになる。
ustファイルを理解してくれるjs
UTAU というのであれば、既存の ust を画面に D&D して読み込めてほしいですよね?
で、そうしたら ust ファイルとして書き出せてほしいですよね?
メタデータを更に咀嚼できるスクリプト
でも連続音を手動で扱うのは嫌ですよね?
なのでプラグイン的な処理をできる js を刺せるようにしたいですよね。
合成エンジンjs
ここが一番しんどそうに思われますが、実は tn_fnds という UTAU エンジンのソースが公開されているので、逆に扱うメタデータを UTAU の流儀に合わせることで(C++でしかできない処理が無い限り)流用ができてしまう部分…。
php か ruby 等にしてサーバで動かした方が処理速度上がるかもしれないですが、後述のウィジェット化を考えるとあらゆるところからの合成依頼を処理するように設計するのは個人運用では現実的ではないので、js移植が無難かと思っている。
音声ファイルの管理をするスクリプト
結局音源全体の wav データを一括でダウンロードしてから、初めて合成できるっていうのは意味ないですよね。なので必要な wav だけを問い合わせにいってくれて、ローカルにすでにキャッシュがもうあるならそれを使うようにしたり、良い感じに融通してくれるよにしてくれるべきです。ようするにAjax
まぁでも、単独音とかだったら一括で全ダウンロードしてしまえるとそれはそれでいいかもしれなかったりはします。
また、合成した結果データを保持しておいてもらう必要もありますよね。(まぁそうしないとそもそも試聴できないんですが)
音源データを提供するweb API
もしくはクラウドストレージ。後述。
+ウィジェット化?
web サイトにウィジェット?としてこれを埋め込んで、いろんな配布サイトに設置できたら嬉しいですよね。一方で、それらの合成処理がサーバサイドとしてたくさんのサイトに埋め込まれてしまうと、無料サーバで運営するのはとても現実的ではないのでブラウザサイドで合成処理を行うべきだと思ってます。
で、何が問題なのかと言うと
プログラム部分はもう、コピペ継ぎ接ぎの嵐でもスパゲッティでも、動けばそれでいいんで意外と全部なんとかできる全体像なんですが、
実のところ一番問題なのは、「音源の部分データを提供する」ところなんです。
ニコニコのコメントで「クラウド上にVB置いて~」とあったりもしましたが、そもそも良い感じに各 wav ファイルにアクセスできる仕組みを提供できる場所がなくて、結局のところどこまで作っても対応してる音源が存在しないことになってしまうんです。
(まぁそもそもこれまで、特定の音源の特定の音素だけ使いたいというシチュエーションが無かった。というか、全部ダウンロードするのに5~20分程度待てば良いサイズが大抵なので、待てば済んでしまうんですね。)
(ただ、うちの音源郡が、圧縮済みでも合計1GBを超え、展開済みだと合計4GBを超えてしまうので、ちょっと待てば済むという範疇を超えてるのでまぁ、考慮したいんですよね。)
zip ファイルのまま一括でダウンロード(してから分解したり)するのでは、結局ローカルの UTAU で動かせばよくて、意味がないのです。
(「ファイルをバラけてアップロードさせて、その全てのURLを保持する json もアップロードする」という方式がとれなくもないですが、おそらく全てのファイルのURLを手動でメモるのは…)
で、データの流れからいってどちらかというと DB でも良いかなと思い始めますが、
そうなってしまうと今度は音源制作者が自由に音源を配置して、この UTAUonブラウザ(仮) から自分の音源を指定して利用することが非常に難しくなります。
(FFFTP などでファイルをそのままディレクトリに自鯖アップロードして、oto.ini に相当する定義データ oto.json を作ってそこから参照させる、というのは妥協案ではあるかもしれないですが、汎用性がないのと、無料で借りている html 用のサーバに多量で大量のデータを置き、尚かつそこそこの頻度でのアクセスを要求するというのはあまりお作法としてはよろしくないかなぁ…とも。)
ぐだぐだと書いてきましたが、このシステムを実現するにあたって、音声合成の為に線形代数とかフーリエ変換が分からない~~という問題より、実際は「UTAU音源」というものをネット上でそのまま扱えるサービスが存在しない方が問題だった。ということです。