日本語音声の読み上げを行うユニバーサルアプリを作る
MainPage.xamlのデザイン画面上に配置したButton1をダブルクリックします。するとコードエディタが起動し
private void Button1_Click(object sender, RoutedEventArgs e)
{
}
のコードが自動生成されますので、この中にコードを記述します。
ロジックコード(MainPage.xaml.vb)
まずは、名前空間を読み込みます(リスト2)。
リスト2 名前空間の読み込み
コンテキスト メニューおよびメッセージダイアログのサポートを提供するクラスの含まれる、Windows.UI.Popups名前空間を読み込みます。
using Windows.UI.Popups;
音声合成(TTS)にテキスト文字列を変換する、音声合成エンジン※(声)を構成するためのサポートを提供するクラスの含まれる、Windows.Media.SpeechSynthesis名前空間を読み込みます。
※オーディオストリームとも呼ばれる
using Windows.Media.SpeechSynthesis;
次に、[読み上げ開始]ボタンがクリックされた時の処理です(リスト3)
リスト3 [読み上げ開始]ボタンがクリックされた時の処理
TextBox1に何も入力されていなかった場合は、警告メッセージを出します。デフォルトでは「太宰治」の「人間失格」の一部が表示されます。この文章を消去して、自由な文章を入力することが可能です。
データが入力されていた場合は、以下の処理を行います。
ランダムアクセスストリームとの間で、音声合成エンジンによって生成されたオーディオデータの読み取りと書きこみをサポートするSpeechSynthesisStreamクラス型のmyStreamを宣言します。
音声機能へのアクセスを提供する、新しいSpeechSynthesizerのインスタンス、mySynthオブジェクトを作成します。
SynthesizeTextToStreamAsyncメソッドで、指定した文字列から、音声出力を非同期に生成しmyStreamで参照します。
SetSourceメソッドで、指定されたストリームおよびMIME型を使用してSourceプロパティを設定します。Playメソッドで音声を再生します。
private async void Button1_Click(object sender, RoutedEventArgs e) { if (TextBox1.Text == "") { MessageDialog message = new MessageDialog("文章を入力してください。"); await message.ShowAsync(); } else { SpeechSynthesisStream myStream; using (var mySynth = new SpeechSynthesizer()) { myStream = await mySynth.SynthesizeTextToStreamAsync(TextBox1.Text); } MediaElement1.SetSource(myStream, myStream.ContentType); MediaElement1.Play(); } }
次に、ソリューションエクスプローラー内のPackage.appxmanifestをダブルクリックして開きます。
ここで、「機能」タブ内にある「機能:」の「マイク」にチェックを入れてください。Windowsアプリでは、特にこの「マイク」にチェックを入れなくても音声で喋らすことはできるのですが、Windows Phone 8.1と共有した場合は、Windows Phone 8.1のPackage.appxmanifest内の「マイク」にチェックを入れておかないと、エラーになってしまいます。そこで、共有化を図るためにWindows アプリでも「マイク」にチェックを入れておきます(図3)。
リスト3を実行すると図4のように表示されます。[読み上げ開始]ボタンをクリックすると、女性の声で文章が読み上げられます。読み上げ精度はおよそ90%といったところで、中には間違った読み方をする漢字もあります。
図4を見ると画面の上部左隅に何かの数値が表示されています。これはフレームレートカウンターといい、アプリケーションのパフォーマンスを監視する機能です。フレームレートカウンターが表示されたままだとWindows ストアの審査でリジェクトされるため、ソリューションエクスプローラー内のApp.xaml.csを開き、下記のコードをコメントアウトして非表示にします(リスト4)。
リスト4 フレームレートカウンターを非表示にするためコメントアウトするコード
//#if DEBUG // if (System.Diagnostics.Debugger.IsAttached) // { // this.DebugSettings.EnableFrameRateCounter = true; // } //#endif
これで、Windows アプリは完成しました。この中にWindows Phone 8.1のプロジェクトを読み込みましょう。