WPFがしゃべったー。

WPF、厳密には.NET Framework 3.0には System.Speech という名前空間があり、これを使うと簡単に音声合成機能が使えます。パソコンがしゃべってくれます。

ではやってみましょう。


XAML側でテキストボックスとボタンを追加。ボタンにクリックイベントを追加。
VS2005ではボタンダブルクリックしてもイベントハンドラ作成されないのでXAML
Click="Speech" を追加してください。

できあがったXAML

<Window x:Class="WPFSpeech.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPFSpeech" Height="300" Width="420"
    >
    <Grid>
    <TextBox Height="38" Margin="15,40,134,0" Name="textBox1" VerticalAlignment="Top" FontSize="24"></TextBox>
    <Button Height="35" Margin="0,42,32,0" Name="button1" VerticalAlignment="Top" HorizontalAlignment="Right" Width="75" 
  Click="Speech" FontSize="14">しゃべるよ</Button>
  </Grid>
</Window>

次、コードビハインド側
「参照の追加」でSystem.Speechを追加する。

主役となるのは、System.Speech.Synthesis.SpeechSynthesizer クラス

using System.Speech.Synthesis;
を追加。(追加しなくても動くけど、名前空間省略できるから楽、というのは言うまでもないこと)

Speech メソッドを実装

   public void Speech(object sender, RoutedEventArgs e)
        {
            SpeechSynthesizer ss = new SpeechSynthesizer();
            ss.Speak(textBox1.Text);
        }

一番シンプルなのがこれ。さあ、しゃべってくれるかな。
実行して、テキストボックスに、「Hello, world!」と入力。ボタンクリック。

低い男性の声で「ハロウー、ワールド」キタ━━━━(゚∀゚)━━━━!!!!
なんか今までに味わったことの興奮!なんだろこのうれしさ、パソコンに親近感沸いたというか、こんなことできるんだ、というか。

実は内部的には、これまで自分は見向きもしなかった Microsoft Speech API をラッピングしているようで、ここまでシンプルにラッピングしてくれると使う気にもなろうというもの。さすがXAMLいや、.NET Framework 3.0

日本語いけるかな。

無言・・・ 残念。調べてみると、Office2007をインストールする際に「読み上げ」機能をインストールして、さらにコントロールパネル→音声認識 から「LH Kenji」を選択しておくと日本語をしゃべってくれる、らしい(2008/09/18 追記:実際に試したところ、Office2003では音声認識機能がインストールできましたがOffice2007(自分の場合はUltimte版)では読み上げ機能、音声認識機能を見つけることができませんでした。ネット上で情報探すも交錯していて何が正しいか不明な状態です。)
ですがみなさんにこの作業を強要するのは現実的ではないですね。
むむ、ちょっと悔しい。

続いてフランス語

しゃべったー!!「ボンジュー」って言った。

じゃあ、ドイツ語

しゃべった、いや待てよ。ほんとにドイツ語で発音してるのか?無理矢理英語読みしているのではないのか。少し難しいのにしてみるか。

お、いけてるじゃん「あなたはビールが欲しいですか?」です。

調子にのって、英語の難しいの

なに!もしかしていけた?自分のヒアリング能力的に正しいのかどうかが分からない。。
http://ja.wikipedia.org/wiki/%E3%83%8A%E3%82%A4%E3%82%A2%E3%83%BC%E3%83%A9%E3%83%88%E3%83%86%E3%83%83%E3%83%97
クトゥルフ神話に出てくる神様「ニャルラトテップ」

なんか悔しい。じゃあこれは?

無言・・・。ある意味正解。口にしてはいけない神の名前ですからね(ヘブライ語)、というところでお後がよろしいようで。


それにしてもデフォルトで日本語がしゃべれないのが残念でならない。

補足

SpeechSynthesizer クラスには多くのメソッド、プロパティがあり、音声のスピード、高さなども調節できます。詳しく知りたい方は
http://blogs.msdn.com/wpfsdk/archive/2006/05/19/Using-Speech-Synthesis-in-a-WPF-Application.aspx
などをご参照してください。

感想

落ち着いて考えてみれば実用性に疑問を感じ始めたんですが、パソコンがしゃべった瞬間は感動でした。しかもWPF.NET Framework 3.0)だとこんなに簡単にできるなんて。
現実的にはアクセシビリティ面で使用されるものだと思います。個人的にはそれだけじゃなく面白いことしたいけど。

ほんとはコードビハインドに頼らず、XAMLだけで完結したかったんだけど
http://msdn2.microsoft.com/ja-jp/library/system.speech.synthesis.speechsynthesizer.aspx
によると、XAMLでは「適用できません」ということで挫折。

調査中

しゃべるだけでなく、音声認識もできるみたいなのですが、XPとVistaでなにやら違う部分がありそうで。
http://msdn.microsoft.com/msdnmag/issues/06/01/speechinWindowsVista/
まだ調べ切れていません。あ、言い忘れていましたが、上記のしゃべるWPFはXPでもちゃんと動作します。(もちろん動かすには.NET Framework 3.0 Runtime 入れてくださいね。)