ロジックコード(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

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

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30