ユニバーサルWindowsアプリ開発 4

ロジックコード(MainPage.xaml.vb)

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:Package.appxmanifest の「機能」タブ内の「機能:」にある「マイク」にチェックを入れる

リスト3を実行すると図4のように表示されます。[読み上げ開始]ボタンをクリックすると、女性の声で文章が読み上げられます。読み上げ精度はおよそ90%といったところで、中には間違った読み方をする漢字もあります。

図4:文章を読み上げている(クリックで拡大)

図4を見ると画面の上部左隅に何かの数値が表示されています。これはフレームレートカウンターといい、アプリケーションのパフォーマンスを監視する機能です。フレームレートカウンターが表示されたままだとWindows ストアの審査でリジェクトされるため、ソリューションエクスプローラー内のApp.xaml.csを開き、下記のコードをコメントアウトして非表示にします(リスト4)。

リスト4 フレームレートカウンターを非表示にするためコメントアウトするコード

//#if DEBUG
//            if (System.Diagnostics.Debugger.IsAttached)
//            {
//                this.DebugSettings.EnableFrameRateCounter = true;
//            }
//#endif

これで、Windows アプリは完成しました。この中にWindows Phone 8.1のプロジェクトを読み込みましょう。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る