Coder Social home page Coder Social logo

voiceroidutil's Introduction

VoiceroidUtil

About

VOICEROID動画制作支援ツール『VoiceroidUtil』のソースです。

  • MIT License です。
  • ビルドには Visual Studio 2022 が必要です。
  • 外部ライブラリは NuGet で取得しています。
  • 画像リソースの一部は再配布禁止のため、ダミー画像がコミットされています。
  • 使用したライブラリや素材の詳細は data/readme.txt を参照してください。

Repository rules

version 1.4.0 リリース以降は下記のルールで作業しています。

  • master には基本的に直接コミットしない。
    • 作業ブランチから Pull Request を通して反映する。
    • README.md(当ファイル)の編集と、 data/manual ディレクトリ以下を修正する場合のみ例外とする。
  • 機能追加、バグ修正等を行う際はまず Issue を立て、それに対応するブランチを作成して作業する。
    • 機能追加のブランチ名は feature/Issue番号-機能内容 とする。(ex. feature/5-exo_output)
    • バグ修正のブランチ名は fix/Issue番号-バグ内容 とする。(ex. fix/7-crash_at_save)
  • リリース用のドキュメント類の更新作業は release/vバージョン番号 ブランチを作成して行う。(ex. release/v1.5.0)
    • 基本的にはリリース直前に master へ反映する。

Release work

リリース時に行う作業まとめ。

  1. ローカルの release/vバージョン番号 ブランチで下記作業を行う。
    1. data/readme.txt を更新する。
    2. data/manual ディレクトリ以下を更新する。
    3. VoiceroidUtil/Properties/AssemblyInfo.csAssemblyVersion 属性を書き換える。
    4. git push を実施する。
  2. release/vバージョン番号 ブランチの Pull Request を行い、 master へマージする。
    • Pull Request のタイトルは version バージョン番号 とする。
  3. ローカルの master ブランチで下記作業を行う。
    1. git pull を実施する。
    2. build_and_pack.bat でビルドする。
    3. __release/VoiceroidUtil ディレクトリを __release/VoiceroidUtil-日付 ディレクトリに改名してZIP圧縮する。
  4. Draft a new release する。
    • タグは vバージョン番号 とする。(ex. v1.5.1)
    • タイトルは version バージョン番号 とする。(ex. version 1.5.1)
    • 説明文には更新履歴を簡潔に記載する。
    • ZIPファイルを添付する。
  5. Webサイトで下記作業を行う。
    1. ダウンロードページにZIPファイルを添付し、リンクを更新する。
    2. マニュアルページを data/manual ディレクトリ以下のデータで更新する。
    3. トップページを更新する。
    4. アプリ更新情報JSONファイルを更新する。
  6. Twitterでの告知等を行う。

voiceroidutil's People

Contributors

lill-la avatar naokiy avatar ruche7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

voiceroidutil's Issues

CeVIOに対応する

そもそも実施するかも含め未定だが、構想として。

  • CeVIO Creative Studio 付属の.NETアセンブリを利用する。
    • インストールされていない環境でも動くよう、動的ロードする。
  • VOICEROID側と極力処理方法を揃えられるよう、インタフェースを見直す。
    • 識別子には現在の IProcess.Name プロパティ相当の値を用いる方がいいかもしれない。
  • アプリ名は VoiCeUtil に改名?

VOICEROID2:ファイル分割有効時、ファイル名重複回避処理をすり抜ける

  • VOICEROID2本体のファイル分割設定が有効。
  • VoiceroidUtilのファイル命名にキャラ名and/or入力文のみ含まれている。

上記両方の条件を満たし、同じキャラand/or入力文で音声保存しようとすると、ファイル名重複回避のための "[数字]" サフィックス付与処理をすり抜け、既存ファイル名での保存処理が走ってしまう。
上記のような状態であってもファイル名重複回避が働くようにする。

exoファイル出力に対応する

exoファイル(AviUtl拡張編集ファイル)の出力に対応する。

  • 音声ファイルと字幕がセットになっただけのシンプルなファイルとする。
    • 立ち絵やキャラ素材スクリプトまで考え出すとややこしくなるのでひとまずは考えない。
  • テキストファイル出力設定と同列にexoファイル出力設定を追加する。
    • 字幕についてはテキストファイル置換機能(字幕置換機能に改名?)の対象とする。
  • VOICEROIDキャラごとに字幕スタイルを設定できるようにする。
    • 「exo字幕」タブを追加する。
    • 既存のexoファイルから字幕スタイルをインポートできるようにする。

ドラッグ&ドロップ処理の修正

  • 音声保存先フォルダに特殊フォルダをドロップできるように修正する。
  • 音声保存先フォルダにごみ箱以下のフォルダをドロップできないように修正する。
  • 文章入力欄にごみ箱以下のファイルをドロップすると例外発声する原因を調べて修正する。
  • その他、ドラッグ&ドロップに関する不具合があれば修正する。

ViewModel見直し

  • BindableBase の継承を外せないか検討。
  • 再生、音声保存処理の冒頭で選択プロセス、トークテキストをコピーすることで、それらの変更制限を緩和できないか検討。
    • 保存完了時テキストクリア設定があると面倒か?

YMM連携に失敗することがある

長時間YMMを起動したままにしているとウィンドウハンドルが変化するのか、YMM連携に失敗することがある。
失敗時に内部でリトライすることで結果的には失敗させないようにしたい。

ファイルダイアログへのパス入力反映前にOKボタンが押されてしまう

VOICEROID2利用者(複数)の環境で発生。
VOICEROID+シリーズ等でも起きるのかは不明。

ファイルダイアログにファイルパスが自動入力された後、その入力が反映される前にOKボタンが押下されるせいなのか、元々入っていた前回保存ファイル名で保存を行おうとしてしまい、上書き確認ダイアログ表示→保存失敗扱いとなってしまう。

version 1.8.0 でファイルダイアログの UI Automation 対応を行った際に同等の現象を見た覚えがあるため、ユーザの環境次第で起きるのかもしれない。

ViewModel の設計を見直す

現在、各 ViewModel クラスが各種設定値の実体を持ち、 MainWindowViewModel クラスのコンストラクタで紐付けを設定するようになっている。
しかしこの方法は複雑な上にさしたる利点も無いため、各種設定値の実体は App クラスで用意し、各 ViewModel には IReactiveProperty<T>IReadOnlyReactiveProperty<T> のオブジェクトをコンストラクタで受け渡す形に変更する。
各種設定値以外にも、複数の ViewModel で共有する情報は極力1つの実体にまとめる。

デザイン時については、コードビハインドで DesignerProperties.GetIsInDesignMode メソッドを利用して、デザイン時には DataContext プロパティ値を直接設定するように変更する。

ビルドバッチ修正

現状だと、ビルド失敗した場合に resource ディレクトリを上書きしたままになってしまうので、きちんと元の状態に戻す。

VOICEROID表示切替機能の追加

設定画面に、各VOICEROIDの表示切替機能を付ける。
各VOICEROIDのチェックボックスをON/OFFすることで、下記の箇所における表示VOICEROIDが変化する。

  • 操作画面のVOICEROID選択コンボボックス
  • .exo 画面のキャラクター別設定でのVOICEROID選択コンボボックス
  • 設定画面のゆっくりMovieMaker連携設定でのキャラクター名紐付けリスト

Windows7&メイリオ環境のUI調整

ひとまず気付いた場所を列挙。

  • 設定/YMM連携
    • キャラクター紐付けリストで VOICEROID:東北きりたん の横幅がギリギリ。
  • .exo/キャラクター別
    • VOICEROID選択コンボボックスでマウスオーバーアイテムの文字色が黒のまま。
    • 「文字色」ボタンと「影・縁色」ボタンの横幅が異なっていて不格好。
    • 「字間」、「行間」に -100 を入れると横幅が広がってしまう。
  • ステータスバー
    • 高さが文字表示時と非表示時とで異なる。

アプリ更新チェック機能を拡張する

  • アプリ名変更時や後継アプリリリース時、その情報を通知できるようにする。
    • アプリ名の変更に対応する。
    • 大小比較用バージョンとは別に表示用バージョンを設定できるようにする。
  • 主に動作確認用に、JSONファイルダウンロード元URIを指定できるようにする。

VOICEROID2:ファイルダイアログのOKボタンが押されない

作者環境でも再現。

ファイルダイアログにファイル名入力まではされるがOKボタンが押下されず、数秒後に失敗扱いとなる。
Invoke 失敗なら即失敗するはずなので、成功したつもりになっている?
保存先ディレクトリ内にファイルが増えてきてから起き始めた。

#98 とも近い問題かもしれない。

たまにWAVEファイル保存確認に失敗する

手元の Debug 版で確認。
Release 版ではあまり起きた記憶が無いので Debug 版特有かもしれない。

トレースログファイルが出力されていないことから、保存進捗ダイアログ以外のダイアログが表示されたものと判定されているようだ。

VOICEROID2に対応する

下記のような対応とする。

  • キャラ選択コンボボックス項目は「VOICEROID2」単体の追加のみ。
    • ボイスプリセット選択は本体側で行ってもらう。
  • VoiceroidUtil側から文章を上書きせず音声保存のみ行う機能を追加する。
    • ボイスプリセットタグを含めた編集は本体側の方がやりやすそうなので。
  • ファイル名に含めるキャラ名には選択中ボイスプリセット名をそのまま用いる。
    • 本文にボイスプリセットタグが含まれている場合でも、保存開始時に選択中だったボイスプリセット名を用いる。
  • 音声ファイルと同時保存のテキストファイルの内容にはボイスプリセットタグもそのまま含む。
    • 本体とは違い、改行は改行のまま出力する。
  • YMM連携対象キャラは選択中ボイスプリセット名を基に決定する。
    • ボイスプリセット名にキャラ判別用文字列(「結月」、「ゆかり」等)を入れてもらう必要がある。
    • 本文にボイスプリセットタグが含まれている場合でも、保存開始時に選択中だったボイスプリセット名を基にする。
  • 保存ファイル分割機能を使っている場合、テキストファイル強制保存、.exoファイル出力、YMM連携は無効。
    • 基本的には分割機能を用いない前提。

ショートカットキー追加

  • VOICEROID選択コンボボックスのある画面で…
    • Ctrl + 1, 2, 3, ..., 9, 0
      • 対応するインデックスのVOICEROIDを選択
    • F1, F2
      • 次, 前 のVOICEROIDを選択
  • 操作画面で…
    • F3
      • 選択中のVOICEROIDを起動/終了
    • F5
      • 再生/停止
    • F6
      • 音声保存

音声保存失敗原因をある程度判別する

音声をVOICEROIDで保存しようとした時、ファイル名を付けた後に下記の要因で失敗することがある。

  • "っ" などの無発声の音声を保存しようとした場合。
    • エラーダイアログが出て失敗となる。
  • "C:\Program Files" 以下など、書き込み権限のないディレクトリに保存しようとした場合。
    • ダイアログが出てミュージックディレクトリへの保存を促される模様。

これらをできる限り判別し、エラー情報をステータスバーに通知する。
「かもしれない」程度の情報でもノーヒントよりはマシだろう。

音声、テキストファイルの特定文字列を置換する機能の追加。

#1 および #2 の発展形。

下記の文字列中の特定文字列を置換する機能を追加する。

  • VOICEROID本体に渡す文章。(即ち、再生および音声ファイルで使われる文章)
  • VoiceroidUtilが作成するテキストファイルの内容。

既存の「設定」タブの横に「置換」タブを新設し、置換リストを設定できるようにする。

起動時の必要ファイル不足エラーをわかりやすくする

起動時に、 VoiceroidUtil.exe.config や system ディレクトリ以下のDLL、およびシステムのDLLが見つからない場合、現状では何も表示せず終了してしまう。
また、イベントビューアーでエラーを確認できるものの、具体的にどのファイルが見つからないのかわからない。

ダイアログ表示等でエラー情報をわかりやすくする。

YMM操作において AutomationElement を高速に検索する

現在、 YmmProcess クラスにおいて AutomationElement 検索を TreeScope.Descendants で行っているが、 TreeScope.Children で子を辿っていく方法に変更することで、タイムラインのアイテム数が増えても検索時間が増大せずに済むと考えられる。

上記変更を行う。
もし検索速度が十分に速い場合は、キャッシュの廃止も検討する。

カスペルスキーを導入している特定環境でYMMとの連携に失敗する

2ちゃんねるスレッドおよびTwitterのDMで報告あり。

Windows 7 Home Premium 64ビット環境で『カスペルスキー 2016』や『カスペルスキー セキュリティ 2017』を導入すると、『ゆっくりMovieMaker』のタイムラインウィンドウが見つからず連携に失敗する。
Windows 10 Pro 64ビット環境で『カスペルスキー セキュリティ 2017』の体験版を導入してみたが、再現しなかった。

再現環境を持つ人に調査協力してもらう必要がありそう。

VOICEROID2:音声保存完了まで待機する

VOICEROID2では、音声保存途中でもWAVEファイルが生成されているため、WAVEファイルの存在だけで音声保存完了判定してはならない。
必ず保存進捗ダイアログと完了ダイアログが出るようなので、そちらを用いて判定するように修正する。

また、キャンセル時にはキャンセルボタン押下後にWAVEファイルが削除されるようなので、保存完了と誤認しないような仕組みを入れる。

RucheHomeLib v1.4.0 対応

ライブラリ側にI/O以外の非同期処理を持たないようにしたため、それに合わせる。
またサブモジュール参照先を tag v1.4.0 とする。

Windowsのテーマ変更に対応する

Windowsのテーマをハイコントラスト等にしてもきちんとUI表示されるようにする。
下記の3パターンについて確認する。

  • 通常環境
  • ハイコントラストモード環境
  • ハイコントラストモードではないが明暗反転させているような環境

ショートカットキーが自然に効くようにする

例えば操作画面のボタンにフォーカスがある状態でF5を押すと、再生は行われるものの、その後フォーカスを移すまでショートカットが効かなくなる。
ウィンドウがアクティブでさえあれば、現在開いている画面に対応するショートカットは常に効果があるようにしたい。

短い文章をYMM連携させるとたまに字幕が登録されない

http://potato.2ch.net/test/read.cgi/streaming/1475429256/585

voiceroidUtil使ってYMMに自動で追加すると時々字幕が表示されない気がする
えっ とかの二文字位の短いファイルだとよく発生する気がする
手動で編集してセリフを追加すれば問題ないんだけどもね
voiceroidUtilが原因かも分からんし

YMM自体のバグかもしれないのでそれも含め調査する。
調査結果次第では修正する。

ファイルパスが入力されず音声保存に失敗してしまう

TwitterのDMで報告あり。

version 1.6.0 にて音声保存ボタンを押すと、VOICEROID本体の音声保存ダイアログは出るものの、ファイルパスが入力されず、音声保存に失敗する。
出力されたエラーログは下記の通り。

[2016-12-30 17:35:35][TID:1][DoCheckFileSavedTask;ProcessFactory.ProcessImpl.cs:849]>音声ファイルの保存を確認できません。 progressFound=False

version 1.3.2 で同等の不具合を修正したはずだが、抜けがあるのかもしれない。

VOICEROID2:保存完了ダイアログの親がデスクトップになる場合がある

オプション画面を毎回表示する設定を無効にした状態で音声保存を行うと、たまに保存完了時に出る「情報」ダイアログの親が保存進捗ウィンドウではなくデスクトップになることがある。
ProcessId の比較等を駆使し、この場合でも情報ダイアログを取得&OKボタン押下できるようにする。

タブのデザインを見直す

ページが増えたため、タブリストが横に伸びて見栄えが悪い。
横伸び感を感じさせないデザインに修正する。

ソフトウェアアップデート機能の追加。

ソフトウェアアップデート機能を追加する。

  • 「設定」タブに下記設定項目を追加する。
    • 「VoiceroidUtilの更新を確認する」ボタン
    • 「起動時に更新を確認する」チェックボックス(既定でOFF)
  • 確認の結果アップデート可能である場合、下記表示を行う。
    • 上記ボタンの横に更新があることを示す文言とリンクテキストを表示する。
      • 一度でも確認済みなら起動中は常に表示する。
    • 確認直後、ステータスバーに更新があることを示す文言とリンクテキストを表示する。
      • 表示期間は既存のステータスバー処理に準ずる。
  • リンクテキストをクリックすることで更新開始。

起動時の更新確認は既定でONにしたいのだが、ネットワーク接続が発生するものをユーザの許諾無しに既定でONとするのは厳しいか。
初回起動時にONとするかどうか確認するような仕組みがあるといいかもしれない。

肝心の、ソフトウェアアップデート機能自体の仕組みについては考え中…。

記号ポーズ文字をテキストファイル作成時に除外する機能の追加。

記号ポーズで使われる # @ ■ ● ▲ の文字をテキストファイル作成時に除外する機能を追加する。

VOICEROID本体側の設定次第で記号ポーズに使われるか否かが決まるので、単純除外だけだと微妙。
下記のような案が考えられる。

  • チェックBOXで個別に除外する/しないを選択できるようにする。
    • VOICEROID側と合わせる作業をユーザに強いるため、ちょくちょく変更する人には面倒かも。
  • VOICEROID側の設定を読み取る。
    • 一番便利だと思うが、タブ移動してチェックボックスを読み取る処理の実装は大変そう。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.