【WPF】シリーズで動画再生をやってきましたが、それはC#で「昔のCOMの動画再生や文章読み上げ(TextToSpeech)をどうやっているか」確認する為であり、動画再生をする為にはWPFを学ぶ必要があったからです。しかし、動画再生は一応前回までで終了したので、今後は【WPF】から離れて、「音声合成」(と「音声認識」)をやってみようかと思います。C#でこれらをどうまとめるかが分からず、ヘッダーを【Speech】にしてもう良かったのですが、矢張り歴史に敬意を表して【SAPI】としてみました。
ここで話を整理しておくと、SAPIというのは「Windowsアプリケーションで音声認識や音声合成を使うためにマイクロソフトが開発したAPI」で、初めはプリミティブなAPIだったようですが、2000年のSAPI 5.0の段階ではラッパーライブラリーとしてsapi.dllに纏められ、これを通じて利用するようになったようです。(「新APIは当初 COM API のみであり、C/C++ からのみ使えるようになっていた。VB やスクリプト言語のサポートは後から追加された。OSとしては、Windows 98 と NT 4.0 以降でサポートされた。」by wiki)
私の初遭遇は2003年に(当時持っていた)Borland C++ Builder 5.0(BCB)でSAPIのCOM(TTS-TextToSpeech)をBCBがコンポーネント(Windows コントロール)に変換し、ウィンドウに貼り付けて使った時でした。この時はコントロールに紅い唇が現れ、話す英語に合わせて動きました。(注)
注:この時の印象が強烈だったので、私がBCCSkeltonでCVOICEというSAPI COMのラッパークラスを作り、そのテストプログラムとしてTextToSpeachというアプリを作った時のプログラムアイコンを↓の様にしました。(絵心、無いですねぇ。なお、TextToSpeechはBCCForm and BCCSkeltonのサンプルに入っています。)
現在のC#でどうなっているかということで調べてみると、先ず「音声読み上げ」機能は(SAPI 5.0では既に入っていた)「音声認識機能」と共に、System.Speech.dll(注)というライブラリーに纏められており、
System.Speech.Synthesis(音声合成用SpeechSynthesizerクラス等が入っています。)
System.Speech.Recognition(音声認識用SpeechRecognitionEngineクラス等が入っています。)
という名前空間を持っています。
注:"C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Speech\v4.0_4.0.0.0__31bf3856ad364e35"というWindows 10/11のフォールダーにあります。
これらは既にラッパークラスになっているのでWinFormでも、WPFでも使用できます。使い方はMicrosoft Learningにも出ていますが、次回以降WPFの学習の際にMicrosoft Learningのサンプルを参考に(私のPC環境に合わせて作った)自作サンプルで解説してみます。