WallStudio

技術ブログや創作ブログに届かない雑記です

喋る同人誌が作りたい!⑥ 仕様

モチベーションが嘗てないほどまで落ち込んできてます…まずい.でもうだうだしていたところでイベントは待ってくれないので気張っていきましょう.

さて,ソースコードが仕様書ということでアイディアを出しながら調整しながら開発を進めている訳ですが,一旦整理を兼ねてユーザーから見たときにどのような機能があるのかをリストアップしていきたいと思います.

Library(タイトル選択)画面 [80%]

  • クラウドTab

    サーバーに登録されている限定公開とR18を除くすべてのタイトルが表示される.PackageSummaryリスト(テキストデータ)は毎回起動時にダウンロードする.サムネイルはキャッシュされる.各タイトルの情報はタイトル,作者,音声数,DL済か否かが表示される.将来的にソート,検索が可能.インターネットにつながっていないと接続エラーが表示される.

  • ローカルTab

    ダウンロードされたタイトルが表示される.DL済PackageSummaryリストはDL時に更新されローカルに保存されている.サムネイルはキャッシュされる.各タイトルの情報はクラウドタブと同様.将来的にソート,検索が可能.サムネイルがキャッシュされている限り,オフラインでも表示,使用可能.

  • QRTab

    タブをアクティブにするとカメラが起動しQRコードを読み取ることができる.本の表紙などに印刷されたQRコードを読み取ることを想定.クラウドタブに表示されない(限定公開)のタイトルも読み取ることが可能.QRの中身はタイトルのID.DL済のタイトルであればオフラインでも利用可能.

Launcher(音声選択)画面 [95%]

  • ヘッダー

    開いた時点でダウンロードされる.キャッシュが生きている限りオフラインでも使用できる.表紙,タイトル,作者,タグ,紹介文が表示される.また,DL済かつオンラインであれば,更新が確認される.

  • 音声リスト

    未DL時はグレーアウトしていてタップできない.それぞれタイトル,作者,公式(音声作者=本作者)アイコンが表示される.これらからタップすることでその音声で読み上げモードが開始される.

  • DL/削除/更新ボタン

    未ダウンロード時はDLボタンが,DL済の場合は削除ボタンと更新があれば更新ボタンが表示される.DL操作はページ画像と音声ファイルをDLし,PackageSummaryをローカルのデータベースにコピーする.削除ではこの逆操作,更新では削除→DLと同等の操作となる.これらの操作完了後,画面はすぐに更新される.

  • カメラスイッチ

    ハンドカメラモード(背面カメラ)とスタンドカメラモード(全面)が切替できる.

HandedCamera ハンドカメラモード / StandCamera スタンドカメラモード [75%]

手に持ってページをスキャンする方式.手や視界が塞がれてしまうデメリットがあるが,無線綴じのように机の上に開いて置くことができない場合にも使えることや,歪みが少ない分認識精度で有利というメリットがある.

  • ヘッダー

    表紙のサムネイル,タイトル,作者(本-音声),ページカウント(開いているページ/総ぺージ)

  • Inputプレビュー

    カメラからの入力そのままが表示される.枠内の部分が実際の認識に利用される部分.

  • Inputコントロール(Standのみ)

    消失点と水平線がドラッグで調整できる.この二つのパラメータはマッチングの前処理の投影補正に利用される.

  • Matchプレビュー

    最尤のページの画像が表示される.

  • 感度コントロール

    時間方向の感度を調整する.感度が高いとページをめくってから音声が再生されるまでの時間が短くなるが,誤認識にも反応しやすくなる.

データプロトコル [10%]

基本的にファイルのみでDBは使用しない.YAMLで通信しYAMLで保存する.Intentではidとユーザーによる入力のみを渡し各Activityの責任で.ymlを開きデコードする.YAMLのデコードはクラスにマッチさせず動的にキャストしてアクセスする.サーバーはReadonry.

  • packages.yml,local_packages.yml

    PackageSummaryのリスト.Library画面が完成させられるまでの情報.検索,ソート,R18フィルタがかけられるだけの情報も持つ.

  • detail.yml

    タイトルに関するすべての情報.1タイトルにつき1ファイルが存在する.音声や音声のタイミング(将来的にバイブなども)といったメタデータを内包する.

  • [0-9]+.jpg,[0-9]+.mp3

    ページの画像,読み上げ音声のファイル.Lancher画面でDLを押すとDLされる.

アップロード [0%]

本の画像,音声はWEBページからアップロードする.(原稿やVOICEROIDは多分PCにあるだろうから)CRUD

  • ログイン

    Twitter/Pixiv OAuth? ユーザーのコンテキストが遡れるアカウント情報が欲しい.

  • ページ画像

    メタデータ(テキスト),表紙画像,全ページの画像をアップロード.自分の本が勝手にアップロードされているというのは不味いので,怪しいものはアクティブに確認BANする.

  • 音声

    メタデータ,タイミング,音声のものも(1ファイル)をアップロード.こちらは権利者からの通報があった場合や明らかな場合に限り削除/BANする.

現状

クライアントサイドは粗方…αテストができるまでには完成しています.まだデバッグが不十分でぬるぽなのと,感度調整,設定画面,検索ソートが未実装,「マッチング無し」の判定精度が悪いので100%とは言えませんが…いや結構未実装多いな…まぁでもなくても動く類のなんで勘弁してください.

サーバーサイドはSQLからYAMLを吐くパターンとSQLへのCRUD手段としてのHTMLを吐くWEBUIが必要なのですが,全く手がついていないのです(´;ω;`)慣れてるピュアPHPでやるか生産性の高そうなASP.NET MVCでやるか…ASPはコードジェネレーターが吐き出したScaffoldingの中身がイマイチよく分からないんですよ.まぁCRUDは自分で書いたとして,Twitter OAuthのNuGetパッケージ(AspNetCore.Authentication.Twitter)があってASP組み込みのログイン機構の上に乗っかてる(?)よく分からないです.参った参った…

Q. iOS対応と同人誌本編はいつかくんですか?

もうやめて!とっくにうpハシのライフは0よ!!