#author("2018-03-23T11:21:59+09:00","","") #author("2018-03-23T11:23:14+09:00","","") [[個人アプリ開発のメモ]] #contents * 1.黄色い髪の放送助手(デスクトップマスコットアプリ) [#r1b63ce2] ** 1.1.Project名 [#daebd77f] ・Yellow hair broadcast assistant(別名:YHBA) ・Mothusi oa ts'ebeliso ea moriri oa yellow ** 1.2.開発環境 [#gdca642e] *** 1.2.1.言語 [#f643d393] - C# - WPF - .NetFramework %%4.7.1%% -> 4.5固定(TemplatePackageによる指定) - MVVM(Prism.unity %%-> Livet%%,ReactiveProperty) - テスト(nUnit) - Bitbucket(ver. 0.0.1) → Github(ver. 0.1) ** 1.3.機能 [#sf2ef477] *** 1.3.1.Mascot Viewer Function [#i57a24d9] - いわゆるマスコットアプリ - デフォルトは黄色い髪の放送助手だが、コントロールパネルより変更可能 - Topmostを維持できるようにする - マスコット画像の変更にはローカル画像による追加、Web画像による追加、拡張パッケージによる追加を可能にする *** 1.3.2.Time Function [#s4832163] - いわゆる時計機能 - 時計を表示するが、カスタム機能により色やサイズの変更が可能 *** 1.3.3.Timer Management [#z9e5ee6d] - いわゆるタイマー機能 - 時間ごとに表示を強調表示したり、時間延長時に何分延長したか表示する機能 - ラップタイムを複数取れるようにする *** 1.3.4.Pointer Virewr [#y345bd6c] - いわゆるポインター機能 - 放送時にチェックしておきたい箇所についてハイライトできるようにポインターを表示する - 複数のポインターの表示が可能 - 丸いポインターだけでなく線描画や半透明の四角いマスキングの表示を可能にする *** 1.3.5.Short cut Management [#l359ff18] - いわゆるショートカット機能 - 放送に必要な散在した情報の整理に使う - 最低限localとWebを分けて管理できるようにする - できればショートカットをタグ付けして管理できるようにしたい *** 1.3.6.Web Linker Function [#p1a08180] - いわゆるWebブラウザーのブックマーク機能 - 放送時に使用するWeb URLをまとめて管理する - 右クリックでコピーできるようにする *** 1.3.7.Slide Management [#fda3f166] - いわゆるスライド管理機能 - タイマー機能と合わせて利用することにより、次に表示するスライドのタイミングを通知する *** 1.3.8.Canning Paper Function [#uf79baa0] - いわゆるカンペ機能 - 発表時に話す内容のカンペを表示する - 表示するカンペを放送枠の外に持っていけるようにD&Dできるようにする - タイマー機能と組み合わせることにより、時間経過後にカンペのコメントが更新されるようにする - 時間が余った時のための与太話ネタが表示されるようにする *** 1.3.9.Back Ground BGM Function [#kf22d0d7] - いわゆるBGM機能 - 発表時に流れるBGMを管理する *** 1.3.10.Sound Effect Function [#u0fb4701] - いわゆる効果音管理機能 - 発表時に使用する効果音を管理する *** 1.3.11.Voice Echo Effect [#l7859edd] - いわゆるボイスチェンジャー機能 - 放送時に使用するマイクとの間にプロキシを挟んで、音声を変更する - 実装が難しそうな場合は、同等の機能を備えたアプリをダウンロード&インストール&起動できるようにメッセージを促すようにする *** 1.3.12.Presentation Template Function [#f2d49f72] - いわゆる発表資料作成用のテンプレート機能 - テンプレートを設定することによって、発表資料の作成を手助けする(資料作成のひな型を読み込むようにする) *** 1.3.13.Discord Private Function [#o98e1f43] - いわゆるDiscord専用機能 - Discordに張り付けるコメント等の素材をまとめて管理できるようにする - 右クリックでコメント等をコピーできるようにする *** 1.3.14.Broadcast Helper Funcion [#f5cb6f2a] - いわゆるブロードキャスト放送管理機能 - 放送に使用する音声アプリ、画面共有アプリを管理する *** 1.3.15.Old Info Management Function [#c37d6333] - いわゆる過去情報管理機能 - 過去に放送した資料等の情報をまとめて管理できる機能 - 再演と時に威力を発揮する - configファイルとして書き出し・読込みを行うことにより過去資料の切替ができるようにする - また、この機能専用のメモ機能により、この時の放送について自信でコメントを残せるようにする *** 1.3.16.Tutorial Function [#c5e6a0cf] - いわゆるチュートリアル機能 - このアプリの使い方と放送方法のチュートリアルを行う *** 1.3.17.Help Function [#t55be291] - いわゆるヘルプ機能 - バージョン情報を表示する - 作成者への意見要望をおこなう - 作成者の応援しているサイト様の情報を掲示する - 可能であれば次回実装予定の情報を掲示する *** 1.3.18.Angel Mode Function [#dc9b2e42] - いわゆる天使モード - マスコットアプリを一新してプロ生ちゃんモードで使用できる機能 *** 1.3.19.Daruyanagi Mode Function [#ga8ee238] - いわゆるだるやなぎモード - マスコットアプリを一新してだるやなぎモードで使用できる機能 - だるやなぎ氏への支援の広告を起動時に表示する *** 1.3.20.Plugin Function [#kecc5d80] - あわゆるプラグインモード - 拡張機能を受け入れる - どのように作成するかは要検討 - 以下が参考になりそうと思われる [[C# + WPF + MEFを使ってアプリにプラグインを実装してみる その1:https://qiita.com/Shiranui_Isuzu/items/84ddd6613da6c825a524]] [[C# + WPF + MEFを使ってアプリにプラグインを実装してみる その2:https://qiita.com/Shiranui_Isuzu/items/33652cb6b97fac18c37e]] [[WPF + MEF、プラグイン側で画面を用意するComments:http://grabacr.net/archives/2601]] [[第3者によるプラグインを可能にする:http://www.ric.co.jp/book/contents/pdfs/901_chap02.pdf]] ** 1.4.開発方法 [#p9238b41] *** 1.4.1.Framework [#d37226b4] - .NetFramework4.5 *** 1.4.2.テンプレート [#cae4e769] - Prism Template Pakage *** 1.4.3.Nuget Package [#q9eb1571] - Prism.Core - Prism.Unity - Prism.WPF - Reactive.Property *** 1.4.4.設計手法 [#ge549a34] - MainWindowを主として、Module追加を行うことで、メインWindowを作成する - Moduleの配置位置については、<StackLayout>にするか<Grid>にするのかは要検討 - 右クリックを押下することによってコンテキストメニューを表示する - コンテキストメニューから他のModuleおよび各種設定Windowを表示する - -> ReactivePropertyの使用についてはいったん保留に。本機能の内容を把握するよりも機能の実相を優先する。 *** 1.4.5.Window一覧 [#if92e8a7] - MainWindow - SettingWindow *** 1.4.6.Module一覧 [#z8a7227b] - MascotViewer - Time - Timer - Pointer - ShortCut - WebLinker - Slide - CanningPaper - BackGroundBGM - SoundEffect - VoiceEchoEffect - PresentationTemplate - DiscordPrivate - BroadcastHelper - OldInfoManagement - Tutorial - Help - AngelMode - DaruyanagiMode ** 1.5.実プログラミングメモ [#b9e1ff9b] *** MascotViewer [#kfc2e0b1] - 以下を参考にひな型を作成する -- [[erion1503/DesktopApp_WPF_20121022 :https://github.com/erion1503/DesktopApp_WPF_20121022/blob/master/DesktopApp_WPF_20121022/MainWindow.xaml.cs]] - Windowの背景透明 - Imageの設定 -- Imageの定義 -- ImageにDragコマンドの追加 -- Imageにコンテキストメニュー表示の追加(コンテキストメニューは別regionで作成したほうがよいかも) --- コンテキストメニュー側は専用のXAML領域を用意すること --- [[[WPF][MVVM] DataGridの右クリックメニューからViewModelのCommandを実行する:https://qiita.com/koara-local/items/053caaec5bbbc7a4b811]] --- [[WPF4.5入門 その29 「ContextMenuコントロール」:http://blog.okazuki.jp/entry/2014/08/11/220008]] *** Time [#f2c126d4] - System.Timers.Timer , Assembly:System -- タイマー精度の問題で、より高精度のSystem.Timerを使用する -- コンポーネントはテキストボックスを使用してReactivePropertyにより更新のたびに結果を更新するようにする -- もし使用できなかった場合は、Dispacher.Timerを使用する *** Timer [#mad4f991] - System.Timers.Timer , Assembly:System *** Pointer [#g1027a4b] - Ink - シングルトンの全画面ウィンドウを用意する -- 背景は透過 - オブジェクト一覧を表示し、選択した項目を複数表示できるようにする - 追加・編集・削除機能を付ける *** ShortCut [#pdd04b04] - List - Listboxに追加・編集・削除機能を付ける *** WebLinker [#xf731f67] - List - Listboxに追加・編集・削除機能を付ける *** Slide [#j75b3950] - List - Listboxに追加・編集・削除機能を付ける *** CanningPaper [#k2f2a977] - MultiLineTextBox - Listboxに追加・編集・削除機能を付ける *** BackGroundBGM [#sf601fe3] - 要検討 - Listboxに追加・編集・削除機能を付ける *** SoundEffect [#yde1c1ef] - 要検討 - Listboxに追加・編集・削除機能を付ける *** VoiceEchoEffect [#id79f0b2] - 要検討 - Listboxに追加・編集・削除機能を付ける *** PresentationTemplate [#u8e9474c] - List - Listboxに追加・編集・削除機能を付ける *** DiscordPrivate [#w0bfeb39] - List - 要検討 - Listboxに追加・編集・削除機能を付ける *** BroadcastHelper [#v403b499] - List - Listboxに追加・編集・削除機能を付ける *** OldInfoManagement [#gbe4500f] - List - Listboxに追加・編集・削除機能を付ける *** Tutorial [#l491c728] - New Compornent *** Help [#s0d579ae] - New Compornent *** AngelMode [#p0e8703c] - New Skin - MEF compornent *** DaruyanagiMode [#x5931675] - New Skin - MEF compornent ** 1.6. 注記 [#b393f7a9] - -> ReactivePropertyの使用についてはいったん保留に。本機能の内容を把握するよりも機能の実相を優先する。(2018/03/23記)