ソフトウェア-UTAU関連開発

ニコカラメーカーの開発進捗状況(ルビ等)

ニコカラメーカースクリーンショットニコカラ(カラオケ字幕付き動画)を手軽に作れるようになればいいな、ということでスタートした「ニコカラメーカー」の開発。そこそこ開発が進んできた。

まずはルビ対応。

歌詞の上部にルビを振れるようになった。ルビの指定は、歌詞ファイルに記入して行う。タイムタグ規格ルビ拡張規格に対応している。

複数行表示にも対応。現時点では二段組みで固定だが、将来的には、自由に段数を指定できるようにする予定。

字幕フォント設定フォントや歌詞表示位置も指定できるようになった。

ワイプ後とワイプ前でそれぞれ、文字の色、フチの色などを指定可能。

また、配色のプレビューがリアルタイムで右上に表示されるようになっている。

言われるがまま書き写したニコカラメーカーで出力した動画のスクリーンショットサンプルは、右のような感じ。

現時点までの開発状況を整理し、動画にまとめた。

ニコニコ動画:ニコカラメーカー(開発中)でルビを振れるようにした(Nkm-02)



唄詠のこれまでと 2016 年以降の予定

誰でも簡単に、UTAU 音源におしゃべりさせられるツール「唄詠」。

同様のことを行えるソリューションがいくつかある中で、唄詠の特徴を再掲すると、
  • 漢字かな交じり文を書いて再生ボタンを押すだけ、というシンプルな操作で読み上げが可能。
  • 調声作業が一切不要なので手間がかからない。
  • UTAU 音源そのものを使用して発音するので、声のイメージが UTAU に近い。
  • ほぼリアルタイムでの読み上げが可能。

唄詠は 2014 年 1 月に産声を上げて以来、着実に進歩してきた。昨年(2015 年)のトピックを振り返ってみると、以下のようになるだろうか。

まずは、新しい調声プラグイン「やまなみ」のリリース。当初の調声プラグイン「ダブルフラット」は非常にロボロボしい発音を特徴としていたが、やまなみは、ニュートラルな読み上げをコンセプトとしている。調声プラグインが 2  つに増えたことで、表現の選択肢が広がった。レーシングゲーム「幻走スカイドリフト」の実況動画は、やまなみを使ってアフレコをしている。

調声プラグインはどなたでも開発可能で、SDK も公開されている。

2015 年は唄詠を取り巻く環境にも大きな変化があった。

UTAU 音源配布者から唄詠への「いいね」である唄詠使用支援中タグを作っていただいた。詳細は支援サイトをご覧頂きたいが、UTAU 音源配布者も UTAU 利用者も、お互いがおしゃべりを楽しめるような仕組みを作っていただいている。

現時点でタグの件数は 200 以上にのぼるが、1 つのツールにすぎない唄詠に対して、これほどのご支援をいただいていることは、言葉では表せないくらいの喜びである。

そのようなご支援へのお礼も兼ねて、かつ、UTAU のおしゃべりをさらに便利にすべく、UTAU 音源 声質検索サイトをオープンした。

UTAU 音源の数は膨大だが、「しゃべった場合の声の雰囲気」を重視して希望の音源を探せるサイトは、これまでほとんどなかった。本サイトは、UTAU 音源声質アンケートの結果や、声の雰囲気を表すタグなど、声質を重視して音源を検索できる数少ないサイトである。サンプルボイスも登録可能で、また、唄詠と連動しているので、利便性も高い。

登録は自由に行えるので、新しい音源や既存音源のサンプルボイスなど、積極的に登録していただけると助かる。

最後に、地味ではあるが「セキュリティーアップデート」も重要な出来事だった。以前の唄詠は、開発環境である C++Builder に由来する脆弱性があったが、これを解消した。安全性の向上もまた、快適な利用のために重要であると考える。

以上が、2015 年の振り返りとなる。

さて、2016 年以降の唄詠の予定であるが、主なものは以下のようになっている。

まずは、第三の調声プラグインの開発。より実用的なしゃべりを目指して、現在研究を行っている。複数のかたにご協力頂いた実験データを基に、さらに唄詠を進化させたい。とはいえ、これはかなり時間のかかる作業で、1 年間では終わらないかもしれない。本丸の攻略には時間がかかる。

既存の調声プラグインのレベルアップも図っていきたい。最近の UTAU 音源は語尾息や表情音源などを搭載し、表現力が高まってきている。そういう要素を取り入れて発音できるようになれば、面白いのではないだろうか。また、よく使われるフレーズ・文章などは、定型文として予め最適な調声をほどこしておくと、効果的かもしれない。もちろん、無声化や疑問文対応などの基本的なところは着実に進めていきたい。

特定のアプリとの相性問題ではあるものの、現時点では、YMM と組み合わせた時の発音があまりよろしくない。このあたりも改善に取り組んでいきたい。

今後とも、唄詠をよろしくお願いします。

関連リンク


唄詠使用動画ご紹介(どういうことなの、バイオハザード、解説)

唄詠題字UTAU 音源で簡単におしゃべりができるツール「唄詠」。唄詠を利用したトークの入った動画が増えてきたので(現時点で 50 以上)、少しずつご紹介させていただきます。

唄詠を利用した動画は、唄詠簡易説明書動画のコンテンツツリーで見ることができますので、そこからピックアップしています。

どういうことなの!? / 夏緒つくね(UTAU)



くちばし P の名曲「どういうことなの!?」を、夏緒つくねが歌います。

この動画には、イントロ部分があります。夏緒らむね・つくね兄弟が、歌うことになった経緯を話しています。弟さんのほうがしっかりしているようですね。

会話に唄詠が使われています。

【UTAU吹き替え】バイオハザード6【ゆっくり実況プレイ】 1/2



バイオハザードの実況プレイなのですが……。よりによって CV が響震路というのが笑ってしまいます。しかし、解説を聞いてみると、ネタ役というわけではなく、音源の充実度で選ばれているようです。

シェリー役は楓歌コトなので、真面目な感じです。

[ゆっくり解説]UTAUを“ゆっくり”にして「ゆっくりMoviemaker3」で使う方法



SHINTA 以外による初の唄詠解説動画です。

私が唄詠解説動画を作ると、どうしても一定のパターンになってしまいます。他の方に作っていただくと、新たな視点から唄詠を知ることができたり、私の動画ではとうてい手が届かない部分を説明していただいたりしていて、大変助かります。

終わりに

今後も唄詠を利用した動画が増えていくのを楽しみにしています。

なお、冒頭の題字は、シオン様に作成いただきました。ありがとうございました。

他の紹介記事

唄詠新調声プラグイン「やまなみ」開発中

ワンタッチで UTAU 音源のおしゃべりを実現する自動 HANASU ツール「唄詠」。

唄詠は、使用する調声プラグインによって、話し方が変わります。現在、新しい調声プラグインを開発中です。開発コードネームは「やまなみ」。

現行の唄詠に同梱されている調声プラグイン「ダブルフラット」は、一部で能やお経とも言われる、独特の節回しが特徴的な話し方をします。

新しい「やまなみ」は、「ニュートラルな読み上げ」をコンセプトとしており、少し普通のナレーションに近づいた読み上げをする予定です。

開発途中のものですが、テスト読み上げを掲載しておきます。
※いずれの音源も、唄詠使用支援中の表明をいただいている音源です。

まだまだ開発途上なので、今すぐ公開というわけにはいきませんが、なるべく早く公開したいと思っています。

また、「やまなみの次」のプラグインは、いろいろな方にご協力頂きながら、研究をしている段階です。こちらは、完成までにかなりの時間を要する見込みです。

なお、唄詠の調声プラグインは、どなたでも開発できます。SDK を公開しておりますので、これを利用して開発して下さい。

唄詠で音源登録がうまくいかない場合の対応方法

音源登録メッセージ唄詠のトラブルシューティングをご紹介します。

唄詠のメインウィンドウから「新規登録」ボタンを押し、UTAU 音源を唄詠用に登録すると、右のように、音源をシステムに登録した旨のメッセージが表示されます。

メインウィンドウしかし、登録が完了したにもかかららず、唄詠のメインウィンドウに音源が表示されず、音源リストが空っぽのままになる、あるいは、読み上げ時に「クラスが登録されていません」というようなエラーになって読み上げができない、という症例が報告されています。

このような状況になった場合は、以下の 3 つのうち、いずれかの回避方法を実践することにより、音源を登録できるようになるかと思いますので、お試し下さい。

回避方法 1:再登録

一旦唄詠を終了して、再度、起動し、同じ音源を登録すると、登録できることがあります。まずはこの方法をお試し下さい。

回避方法 2:管理者権限での起動

唄詠用に音源を登録するには、管理者権限が必要です。通常、唄詠は自動的に管理者権限で動作するようになっていますが、何らかの原因により、うまく管理者権限が取得できないことがあるようです。

そこで、唄詠を起動する際に、管理者権限で起動することにより、音源を登録できるようになります。

やり方
  1. 唄詠右クリックエクスプローラーで唄詠のフォルダを開きます。
  2. 唄詠(UtaYomi.exe)を右クリックし、表示されるメニューから「管理者として実行」をクリック。
  3. 必要に応じて管理者パスワードを入力すると、唄詠が管理者権限で起動します。
  4. あとは通常通りの手順で音源を登録すれば、正常に音源が登録されます。

なお、この方法で音源を登録した場合、テキストスピーチソフトも管理者権限で起動する必要があります。

回避方法 3:VirtualStore 無効化

音源が正常に登録できない原因として、Windows の VirtualStore 機能が悪影響を及ぼしていることが考えられます。VirtualStore 機能が有効になっていると、登録した音源情報と、読み出す音源情報に相違が発生する場合があります。

したがって、VirtualStore 機能を無効化することで、正常に音源が登録できるようになる場合があります。

ただし、VirtualStore 機能を無効にすると、他のアプリケーションがうまく動かなくなる可能性もあり、注意が必要ですので、この方法はあまりお薦めしません。

VirtualStore 無効化のやり方については、インターネット上の情報等を参照して下さい。

C# による SAPI 5 TTS Engine COM コンポーネントの実装(不完全)

.NET Framework 4.5 C# / Visual Studio 2013 にて、Microsoft Speech API (SAPI) 5.4 の TTS エンジンのサンプルコード(テストコード)「TestUtaYomiEngine」を作成した。

不完全ではあるものの、SAPI 音声合成エンジン側の C# コードはあまり見かけないので、参考になるかもしれないと思い公開する。SAPI に限らず、C# の COM コンポーネントは少ないので、そちらの方面でも参考になるかもしれない。

逆に、アドバイス等あれば、是非とも教えて頂きたい。

本サンプルコードの挙動

本サンプルコードは、既に公開している音声合成エンジン「唄詠(うたよみ)」(Ver 6 系)の代替エンジンとして動作する。
入力された文字にかかわらず、「C:\Test.wav」(44.1kHz、16 ビット、モノラル限定)を再生する。

本サンプルコードで動く部分

以下のテキストスピーチソフトとの組み合わせで動作する。これらのアプリは恐らく、SpXXXX 系の純粋な SAPI を使用しているものと思われる。
  • SofTalk
  • TextToWav
  • 棒読みちゃん(フォーマット変更エラーが表示されるが再生は可能)

本サンプルコードで動かない部分

.NET Framework の SpeechSynthesizer クラスを使用しているテキストスピーチソフト(ゆっくり MovieMaker など)との組み合わせでは動作しない。

使い方

  • Ver 6 系の唄詠をインストールし、テキストスピーチソフトと組み合わせて正しく動作することを確認する。
  • サンプルコードを管理者権限でビルドする。Ver 6 系の唄詠エンジンの代わりに、ビルドしたコードが登録される。
  • 44.1kHz、16 ビット、モノラルの WAVE ファイル(UTAU 音源の原音 WAVE を使うと良い)を C:\Test.wav に保存する。
  • テキストスピーチソフトで唄詠音源でしゃべらせると、サンプルコードが動作し、上記 WAVE が再生される。
  • 唄詠以外のソフトのベースとして使う際は、必ず Guid を変更すること。

ダウンロード


ライセンス


関連記事


更新情報

  • 2015/11/21 ダウンロードリンクが切れていたので、サルベージして再公開

次期唄詠デバッグメモ(COM サーバー編)

前回のエントリに書いたように、.NET の SpeechSynthesizer クラスから新唄詠を使おうとすると使えないので、その原因を探っていく。引き続き、massao さんの支援をいただいている。

そもそも、使えないというのはどういうことかというと、クライアントアプリ(テキストスピーチソフト)が SpeechSynthesizer.SelectVoice を唄詠音源指定で呼びだした際に、
ArgumentException:音声を設定できません。一致する音声がインストールされていないか、または音声が無効になっています。
という例外が発生する。

クライアントが SelectVoice を呼ぶと、恐らく別スレッドが起動し、その中で、COM サーバーである唄詠が生成される。生成後、本来であれば SetObjectToken が呼ばれるのだが、これが呼ばれない。今回はその状況をメモとして整理する。

そもそも、SelectVoice された際の新唄詠の動きを、COM サーバーと言って良いのかは不明だ。

現行(Ver 6.xx 系列)の唄詠は C++ で開発しているので、おそらく普通に COM サーバーとして振る舞っている。新唄詠も、SAPI として使われている場合(動作する 3 種類のテキストスピーチソフトから使われる場合)は、QueryInterface に応答しているので、COM サーバーとして振る舞っていると思われる。

しかし、新唄詠が SelectVoice された際は、コンストラクタが呼ばれた後に QueryInterface が呼ばれない。新唄詠も SelectVoice も両方 .NET Framework なので、COM の手順ではなく、名前と型による制御になっているのかもしれない。

とりあえず、現時点でできることは、コンストラクタが呼ばれる際のコールスタックを追うくらいなので、それを整理する。何故か、うちの環境ではコンストラクタが 4 回呼ばれる。登録されている唄詠音源が多いほどコンストラクタも多く呼ばれるが、登録されている唄詠音源は現在 3 つなので、ぴったり数が一致するわけでもないのが謎だ。

ともあれ、コンストラクタが呼ばれたときのコールスタックは以下。

TestUtaYomiEngine.dll!TestUtaYomiEngine.TestUtaYomiTTSEngineObject.TestUtaYomiTTSEngineObject() 行 160    C#
[ネイティブからマネージへの移行]   
mscorlib.dll!System.RuntimeType.CreateInstanceSlow(bool publicOnly, bool skipCheckThis, bool fillCache, ref System.Threading.StackCrawlMark stackMark) 行 5568    C#
mscorlib.dll!System.Activator.CreateInstance(System.Type type, bool nonPublic) 行 206    C#
mscorlib.dll!System.Activator.CreateInstance(System.Type type) 行 147    C#
System.Speech.dll!System.Speech.Internal.ObjectTokens.ObjectToken.CreateObjectFromToken<object>(string name)    不明
System.Speech.dll!System.Speech.Internal.Synthesis.VoiceSynthesis.GetComEngine(System.Speech.Synthesis.VoiceInfo voiceInfo)    不明
System.Speech.dll!System.Speech.Internal.Synthesis.VoiceSynthesis.GetProxyEngine(System.Speech.Synthesis.VoiceInfo voiceInfo)    不明
System.Speech.dll!System.Speech.Internal.Synthesis.VoiceSynthesis.ThreadProc()    不明
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) 行 74    C#
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 行 581    C#
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) 行 531    C#
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) 行 520    C#
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() 行 111    C#


それぞれの関数が返ってきた直後の EAX を見て、関数が成功しているかどうかを判定してみると(0 以外なら成功していると判定)、

CreateInstanceSlow→成功(0x0252153C)
CreateInstance(Type, bool)→成功?(0252153C のまま)
CreateInstance(Type)→成功?(0252153C のまま)
CreateObjectFromToken→成功?(0252153C のまま)
GetComEngine→失敗
GetProxyEngine→失敗

CreateObjectFromToken は成功しているとはいえ、「instanceValue as ISpObjectWithToken」のキャストに失敗しているフシがある。CreateObjectFromToken が想定している ISpObjectWithToken と、新唄詠が実装している ISpObjectWithToken は、名前が同じでも、型が違うと見なされているのではないか。

ICustomTypeProvider で型の偽装をしようかとも思ったが、実装が悪かったのか、キャストの際に ICustomTypeProvider.GetCustomType() が呼ばれなかった。

次期唄詠デバッグメモ(Visual Studio 編)

.NET 版としてリニューアル開発中の次期唄詠だが、依然として苦戦している。

2 週間前よりは状況は改善し、棒読みちゃん・SofTalk・TextToWav の 3 つで動作するようになったが(棒読みちゃんのチャンネルエラーは出るが)、ゆっくり MovieMaker で相変わらず動かない。

動く 3 つのテキストスピーチソフトは、内部的に(おそらく)SAPI を使用している。しかし、ゆっくり MovieMaker は、内部的に SAPI ではなく .NET の SpeechSynthesizer を使用している。

SpeechSynthesizer は SAPI 互換のはずなのだが、なぜ動かないのか。massao さんの多大なるご支援をいただきながら、現在調査中。

.NET の内部を深掘りする必要があり、まずは、そのための Visual Studio の使い方を整理。

.NET Framework の中へステップイン

[VS2010]デバッグ時に.Net Frameworkのソースコードへステップインさせ、アセンブラのコードを表示させるのブログを参照して、Visual Studio 2013 のオプションを設定する。

[ツール→オプション]メニューの中の、デバッグ→全般にて、「.NET Framework ソースのステッピングを有効にする」にチェックを入れる。

COM サーバー(新唄詠エンジン)のコンストラクタ中でブレークさせた場合、デフォルトだと呼びだし履歴が表示されないが、これにより、呼びだし履歴(コールスタック)を見ることができるようになる。

.NET Framework の中も、逆アセンブル状態ではあるが、一応実行を追えるようになる。ただ、うちの環境だと、なぜかステップ実行ができず、1 行 1 行ブレークポイントをはって実行する必要が……。

関数へのステップイン

逆に、テストアプリ側からデバッグを進めたい場合は、.NET の関数を呼んでいる場所で、Shift + Alt + F11。なぜかうちの環境だとメニューに無いが、「関数へのステップイン」。ステップインできる関数の一覧が表示され、クリックすると、.NET Framework の関数であってもその中に入り込んでいける。

逆アセンブル状態でのデバッグ

[デバッグ→ウィンドウ→レジスタ](Ctrl+Alt+G)でレジスタの内容を閲覧できる。

関数の戻り値は EAX レジスタに格納される。呼びだし先関数(値を返す方)でも、呼びだし元関数(値を受け取る方)でも、どちらでも EAX を見れば良い。

次期唄詠の状況整理

現在リニューアル中の次期唄詠について、現在の状況を整理。一言で言うと、あまり芳しくない。

以下、各テキストスピーチソフトと組み合わせた次期唄詠の状況。

with 棒読みちゃん

一応話せるが、チャンネル数変更失敗のエラーが表示される。

唄詠側で通知しているつもりのチャンネル数が、きちんと棒読みちゃん側に伝わっていない模様。恐らく、システムの中枢に関わる根深い問題で、解決には時間がかかりそう。

with SofTalk

操作はサポートされませんというエラーが表示されて話せない。

SofTalk 作者様が、SofTalk の AssemblyCompany に URL があるとこのエラーが発生することを突き止めて下さったが、なぜ唄詠との組み合わせでこうなるのかは不明。こちらも解決には時間がかかりそう。

with ゆっくり MovieMaker

音声合成に失敗しましたというエラーが表示されて話せない。

どうやら、SpeechLib を使っているテキストスピーチソフトだと話せて、SpeechSynthesizer をテキストスピーチソフトだと話せないようだ(YMM は SpeechSynthesizer)。こちらも解決には時間がかかりそう。

with TextToWav

現時点で唯一、問題なく話せる。

唄詠再構築中

UTAU 音源による自動ナレーションツール「唄詠」を 1 から作り直している。

唄詠のこれまでと 2015 年以降の予定に書いたとおり、唄詠の次のバージョンアップはセキュリティーアップデートである。唄詠の開発に使っている C++Builder の影響によるものだが、実のところ、唄詠で画像を扱っているのは、音源設定画面で UTAU 音源の画像を表示するところくらいなので、影響範囲は狭い。とはいえ、やはり安全に越したことは無い。

対応方法はこちらに書いたとおりいくつかあるが、現在は選択肢 4(C# での開発)を試している。

開発言語そのものが C++ から C# に変わるので、すべて 1 から作り直しとなる。

普通のアプリであっても作り直しとなると大変だが、唄詠はさらに大変。COM やら SAPI やら、いろいろ複雑なのだ。特に、SAPI の中でもエンジン側となると、C# との組み合わせ資料がほとんどなく、そもそも実現可能なのかもよく分からなかった。

それでもなんとか、いろいろ実験をして、唄詠エンジンの原始版が C# で動いたので、実現可能性が高まってきた。

次は、GUI 側の原始版を作って、唄詠全体のフレームワークを C# で実現できそうかどうか、確認したい。

道のりは長そうだ。

C# プラグイン DLL の呼出でキャストができずハマった

C# でプラグインとやり取りしたいと思ってテストコードを作っていたのだが、思わぬ所で躓いた。

やりたいことはごく普通で、
  • プラグインのインターフェースを定義
  • インターフェースを実装したプラグイン DLL を作成
  • ホスト(EXE)側から、プラグイン DLL を動的に呼びだし
というもの。

プラグインのインターフェースは以下のようなシンプルなもの(PluginInterface.cs)。
namespace TestPlugin
{
    public interface ITestPlugin
    {
        Int32 Diff(Int32 oNum1, Int32 oNum2);
    }
}

このインターフェースを実装した TestDLL.dll を作成しておき、ホスト(EXE)側で以下のコードで呼びだした。
private void button12_Click(object sender, EventArgs e)
{
    ITestPlugin aPI = null;
    try
    {
        Assembly aAsm = Assembly.LoadFrom(@"C:\TestDLL.dll");
        foreach (Type aType in aAsm.GetTypes())
        {
            if (aType.IsInterface)
            {
                continue;
            }

            Object aObj = Activator.CreateInstance(aType);
            aPI = aObj as ITestPlugin;
            if (aPI != null)
            {
                MessageBox.Show("プラグインの計算結果:" + aPI.Diff(5, 3).ToString());
                break;
            }
        }
    }
    catch (Exception oExcep)
    {
        MessageBox.Show(oExcep.Message);
    }
    if (aPI == null)
    {
        MessageBox.Show("プラグインをロードできませんでした。");
    }
}

実行してみると、Activator.CreateInstance() でオブジェクトが生成され、aObj に値が入っているのが(デバッガで)確認できた。また、別途コードを追加して aType.GetInterfaces() でインターフェース名を取得すると、ITestPlugin を有していることも確認できた。

しかし!

次の行のキャストは失敗し、aPI は null のままであった。

いろいろ悩んだが、結果的には、「プラグインインターフェースを定義している PluginInterface.cs を、DLL とホストの双方で直接プロジェクトに追加していた」のが原因だった。

解決策としては、
  1. PluginInterface.cs を直接追加したプロジェクトで予め Interface.dll を作っておき、プラグイン DLL とホストの双方から、参照設定で Interface.dll を参照する。
  2. ホスト側のプロジェクトに PluginInterface.cs を直接追加してビルドし、プラグイン DLL ではホストのバイナリを参照設定で参照する。
のいずれかを行えば良い。解決策 1 だとバイナリファイルが 3 つになるので、ファイルの数で言えば、解決策 2 の方がすっきりする。

しかし、双方で直接プロジェクトに追加するとなぜうまく動かないのかは不明。GUID の問題なのかと思って ITestPlugin に Guid 属性を付けてみたりもしたが、改善しなかった。


唄詠マニアックス:多くのファイル達

自動 HANASU ツール「唄詠(うたよみ)」では、Ver 6.14 現在、実行形式のファイル(EXE/DLL)が 6 個もある。わかりやすさから言えば 1 個にまとまっている方が良いのだが、諸事情によりそうなっていない。今回のマニアックスでは、それぞれの実行形式ファイルが何をしているか、解説する。

同梱されている 6 個の実行形式ファイルをフォルダ・アルファベット順に列挙すると、
Updater.exe自動更新ツール
UtaYomi.exe唄詠本体
UtaYomiEngine.dllSAPI エンジン
UtaYomiEngineHelper.dllSAPI エンジンヘルパー
UtaYomiHelper.exe唄詠本体のヘルパー
Plugins\Default.dll調声プラグイン
となる。それぞれのファイルについて以下で説明する。

唄詠本体(UtaYomi.exe)

唄詠アイコン何をもって本体と呼ぶのかは実は難しい問題なのだが、「ユーザーが意識して使うファイル」ということで本体としている。唄詠のヘルプでファイル名に言及している実行形式ファイルは UtaYomi.exe のみであり、逆に、これ以外のファイルは、ユーザーが直接起動しようとしても起動できない。

唄詠本体は、UTAU 音源をシステムに登録するための UI を提供する。登録されている音源の一覧表示、音源の新規登録、修正、削除。

また、唄詠全体の動作に関わる設定も行う。

唄詠本体のヘルパー(UtaYomiHelper.exe)

唄詠本体から必要に応じて自動的に起動される、ヘルパーアプリケーション。音源の新規登録・修正・削除作業を実際に行うのがこのヘルパー。

音源をシステムに登録するには、管理者権限で動作している必要がある。普段から管理者権限でログインしているユーザーの場合は問題ないのだが、一般権限でログインしているユーザーの場合、唄詠本体からでは音源の登録ができない。唄詠本体がヘルパーを管理者権限で起動し(昇格)、管理者権限のヘルパーが音源を登録するという流れになっている。

唄詠本体を常に管理者権限で起動させる設定にしておけばヘルパーは不要なのだが、起動する度に管理者パスワードを入力するというのは煩雑なので、やめている。

また、管理者権限が必要になったときに、唄詠本体が唄詠本体自身を管理者権限で起動するという方法もあると思うが、処理が複雑になりそうだったので、やめている。

結果として、唄詠本体とヘルパーを分離する方式に落ち着いた。

ヘルパーはバックグラウンドで動作するためユーザーからは見えずないが、一度起動されると、唄詠本体が終了するまで常駐している。

なお、ユーザーが間違ってヘルパーを起動した場合、ヘルパーは終了し、代わりに唄詠本体を起動するようになっている。

SAPI エンジン(UtaYomiEngine.dll)

システム側から「SAPI 用音源」として認識されているのがこのファイル。テキストスピーチソフトで唄詠の声を選択し、文章をしゃべらせると、このファイルが実行される。

しかしながら、このファイルは実質ダミーファイルで、次の SAPI エンジンヘルパーが実際の処理を行っている。

このファイルがあるのは、残念ながら俺の技術力が低いせいだ。

唄詠は C++Builder で開発しているが、C++Builder で SAPI エンジン(というか COM コンポーネント)を作るやり方が分からなかった。

そこで、Visual Studio で SAPI エンジンの殻だけ作り、中身の SAPI エンジンヘルパーを C++Builder で作成している。

C++Builder での SAPI エンジンの作り方をご存じの方がいらっしゃいましたら教えていただけると有り難いです。

SAPI エンジンヘルパー(UtaYomiEngineHelper.dll)

実質の SAPI エンジン。

テキストスピーチソフトが何かする度に呼びだされる。声を選択したり、文章をしゃべらせたりといった際に、SAPI エンジンとしての決まり事に従って作業を行う。

実際の音声合成は調声プラグインが行うので、主な作業は、システム側とプラグイン側の橋渡しとしての調整だ。

唄詠はいくつかの文章形式を扱えるが、システム側から受け取った形式を変換・統一してプラグインに渡すということもやっている。

調声プラグイン(Plugins\Default.dll)

Plugins フォルダにある調声プラグインは、文章を音声に変換する音声合成を行う。

Ver 6.14 現在、標準で用意されている調声プラグインは 1 つのみであるが、ユーザーが公開されているプラグインを追加することもできる。また、今後、標準で用意されているプラグインが増える可能性もある。

調声をプラグインでまかなうことにしたのは、様々な調声をユーザーが選べるようにするためだ。詳しくは前回の唄詠マニアックスを参照して欲しい。

自動更新ツール(Updater.exe)

唄詠には、最新バージョンが公開されたら自動的にバージョンアップする機能があるが、それを実現しているのがこの自動更新ツール。バージョンアップだけではなく、最新情報の表示も行う。

この自動更新ツールは唄詠専用というわけではなく、さまざまなアプリケーションで使えるものだ。単体公開もしている。




唄詠開発進捗状況(調声プラグイン方式)

以前の記事に書いたように、現在、唄詠の構造改革を行い、調声部分をプラグインとして分離する仕組みに変更している。およそできあがってきたので、様子をまとめてみる。

ユーザーから見て使い勝手が変わるのは、主に音源登録画面だ。

音源の新規登録これまでは、登録画面で様々な設定をしていたが、次回からは、ここでの設定項目は少なくなり、代わりに、調声プラグインを選ぶようになる。

音源登録画面では、調声プラグインによらない基本的な項目(音源名など)のみを設定するため、項目が減っている。

これまで設定していた UTAU ツールなどの項目は、調声プラグインによっては使用しない(例えば、プラグイン独自に音声合成するかもしれない)ため、項目から外している。

ダブルフラットの設定一方、プラグイン独自の設定ももちろん可能で、「設定」ボタンをクリックすると、プラグインの設定画面が表示される。

右は標準で付属するプラグインの設定画面だが、標準プラグインの調声はこれまでの唄詠と同じなので、設定項目もこれまでと変わらない。安心して使って欲しい。

今後、調声プラグインが新しく登場してくると、それぞれのプラグインによって設定画面も変わってくることになる。

ユーザーから見えないところで、内部構造は大きく変わっている。調声に直接関わるところと、それ以外のところが明確に分離したためだ。

合わせて、内部的な音源情報も変更され、これまでの唄詠で登録した音源は旧音源扱いとなる。とはいえ、これまで登録した音源が使えなくなっては不便なので、旧音源でもきちんと HANA せるようにはしている。

リリースに向けて、詰めの作業を実施中。

唄詠マニアックス:構造改革中である話

テキストスピーチソフト(棒読みちゃんなど)の音声に UTAU 音源を使うためのツール「唄詠」の作り(内部構造)を変えている。

現行の唄詠は、言ってみればオールインワンパッケージ型。システムへの音源登録、テキストスピーチソフトとの連携、文章から音声への変換(調声)、ユーザーインターフェイスなどを、すべて一手に引き受けている。

これはこれでメリットがある。開発工数が比較的少なく済む、試行錯誤に伴う内部構造を変更しやすい、効率の良いコードを書きやすい、UI を作りやすい、などなどだ。

しかし、唄詠は次のステージに入った。

これまでは基礎体力を上げることを中心に開発していた。きちんとシステムと連携すること、任意の文章をとりあえず読めること、応答性が実用の範囲内であること、などなど。

しかし、今後は、調声部分の比重が高まってくる。

調声プラグイン方式での音源情報画面そうなってくると、調声部分だけ独立させた構造となる
  • 調声プラグイン方式

の方がメリットが大きくなってくる。


現行の唄詠は、スーパー棒読み状態だが、今後、多少は自然な読み方をしてくれる調声をしたいと思っている。多くのユーザーは、新しい調声を好むだろうが、例えば既にスーパー棒読みで作品を作り始めてしまっているユーザーは、その作品の完成まではスーパー棒読みを使い続けたいかもしれない。

調声プラグイン方式にしておけば、現行のスーパー棒読みも残しておくことで、ユーザーに好きな調声を選んでもらうことができる。

また、期待したいのは、独自の調声エンジンを開発・公開してくれる人が現れること。

唄詠と同じようなソフトを 1 から開発するのは、それなりに骨が折れる作業で、要求される知識の種類も多い。ユーザーにとっても、複数の似たようなソフトをインストールするのは面倒であろう。

しかし、調声プラグイン方式であれば、開発者は調声の部分だけを開発すれば良いことになる。開発のハードルは格段に下がるし、ユーザー側の負担も少ない。

面白い話し方、流暢な話し方、デスボイス、悲鳴、ワイワイガヤガヤ演出……。いろんな話し方をプラグインとして開発していただければ、もっと HANASU が楽しく便利になると思う。

唄詠の動画を投稿

テキストスピーチソフト(棒読みちゃんなどの、文章読み上げソフト)の声として、UTAU 音源を使えるようにするためのソフト、「唄詠」(うたよみ)。

現時点での進捗状況を動画にまとめた。



唄詠(棒読みちゃんなどの声を UTAU 音源にする)の進捗

唄詠_設定画面新年明けましておめでとうございます。

テキストスピーチソフト(棒読みちゃんなどの、文章読み上げソフト)の声として、UTAU 音源を使えるようにするためのソフト、「唄詠」(うたよみ)を開発中。

とりあえず、UTAU 音源でごく原始的な読み上げができるところまで到達した。

唄詠は、大きく 2 つの部分から成る。

1 つ目の部分は、UTAU 音源の管理を行う設定画面。

所持している UTAU 音源をこの設定画面で登録することにより、テキストスピーチソフトで利用することが可能になる。

唄詠_新規音源登録(小春音アミ)音源登録は簡単で、上記の画面で「新規登録」ボタンをクリックすると、右の画面が開く。

音源に付属している oto.ini ファイルの場所など、必要事項を入力すれば、登録完了だ。

唄詠_TS音源選択登録が完了すると、テキストスピーチソフトの音源選択画面で、UTAU 音源が選択できるようになる。

設定画面はまだ、音源の新規登録と登録抹消の機能しか実装していないが、実装したところについては、内部もわりと真面目に作り込んである。

唄詠の 2 つ目の部分は、実際の読み上げ用の音声を合成する(HANASU)部分だ。こちらはユーザーの目には見えない、縁の下の力持ち的な部分になる。

最初に書いたとおり、ごく原始的な読み上げができるようになった段階。

ぱみゅ天月りよんで HANA せることを確認するところまで到達した。

しかしこちらはかなりの突貫工事状態なので、これから作り込んでいく必要がある。

以上が、現時点での唄詠の進捗状況。

文章だと伝わりづらい性質のソフトなので、いずれ動画を作成する予定。


棒読みちゃんなどの声を UTAU 音源にする

唄詠_棒読みちゃん声質選択テキストスピーチソフト(棒読みちゃんなどの、文章読み上げソフト)の声として UTAU 音源が使えたらいいね、ということで、開発中。

使用のイメージとしては、右の写真のような感じ。棒読みちゃんの声質を選ぶところで UTAU 音源を選ぶことができ、その音源で読み上げが行われる。

唄詠_新規音源登録UTAU 音源は好きなものを使うことができ、右のような感じで登録する。

進捗どうですか? ということで、現時点での開発状況だが、まだまだ序盤。技術的に初めてやる事柄も多く、亀の歩みでしか進まない。

また、少なくともファーストバージョンは、実用的には使えないと思う。




うたりす進捗状況

うたりすをバージョンアップして、UTAU Mode 2 用のピッチエディット機能(ピッチエディタ)を搭載する件の進捗。

ひとまず、音符とピッチを描画するところまで。

うたりす進捗_2011_06_14


うたりすをいじっている中で、Lib UTAU の修正が必要な箇所を発見。後ほど Lib UTAU をバージョンアップする予定。
月別アーカイブ
記事検索
最新コメント
  • ライブドアブログ