top>プログラミング>Text to Speech


‖Text to Speech

Windows XPには標準で入力したテキストを読み上げてくれる音声合成アプリケーションが用意されています。
( コントロールパネル→音声認識→音声合成 でたどっていくとあります。)

しかし自分の作成したアプリケーションをしゃべらせたいという方には非常に不便です。
不便ならば自分で作ってしまえばよいということで、
自分で入力したテキストを読み上げてくれるアプリケーションの作成方法を紹介します。
これで自分の作ったアプリケーションに好きな言葉を簡単にしゃべらせることができるようになります。

以下のプログラムをコンパイルするためにはMicrosoftの「SAPI」と呼ばれる音声合成エンジンが必要となります。
SAPIの導入方法につきましてはプログラミングの準備をご覧ください。


なお、今回はVC++6.0に代わりVC++.NETをベースに説明を行っていきます。


1.Text to Speech(音声合成)

@新しいプロジェクト→Visual C++プロジェクト→MFCアプリケーション (プロジェクト名:Speech Sample) として「OK」


AMFCアプリケーションウィザード→アプリケーションの種類→ダイアログベースを選択して「完了」


Bプログラミングの準備にあるように設定を行う。

C下図のようにボタン(IDC_BUTTON1、キャプションはSpeech)とエディットボックス(IDC_EDIT1)を配置



Dエディットボックスを右クリック→「変数の追加」を選択
コントロール変数:チェックなし
変数の種類:CString
変数の名前:m_sText



E「SpeechSampleDlg.cpp」ファイル中の関数
 CSpeechSampleDlg::DoDataExchange(CDataExchange* pDX)

 が以下のようになっているかを確認。
 もし、なっていなければ修正する。

void
CSpeechSampleDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_sText);
}



F「SpeechSampleDlg.cpp」ファイルに<sapi.h>をインクルード

#include <sapi.h>



Fキャプションが"Speech"となっているボタンをダブルクリック→
 「SpeechSampleDlg.cpp」ファイルの中に次のような関数ができていることを確認

void
CSpeechSampleDlg::OnBnClickedButton1()
{
    // TODO : ここにコントロール通知ハンドラ コードを追加します。



GCSpeechSampleDlg::OnBnClickedButton1()を次ののように編集

void CSpeechSampleDlg::OnBnClickedButton1()
{
    // TODO : ここにコントロール通知ハンドラ コードを追加します。
    UpdateData();
    ISpVoice * pVoice = NULL;

    if (FAILED(CoInitialize(NULL)))
    {
       AfxMessageBox("Error to intiliaze COM");
       return;
    }

    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
    if( SUCCEEDED( hr ) )
    {
       hr = pVoice->Speak(m_sText.AllocSysString(), SPF_DEFAULT, NULL);
       pVoice->Release();
       pVoice = NULL;
    }

    CoUninitialize();
}


これでビルドすれば次のようなダイアログが出るはずです。
エディットボックスに任意の文字を入力して「Speech」ボタンを押してみてください。
コンピュータがしゃべってくれます。
注意:Windowsの設定ではじめは英語しかしゃべってくれません。
    日本語をしゃべらせたい場合は、

    設定→コントロールパネル→音声認識→音声合成→音声の選択→「Kenji」または「Naoko」

    を選択してください。
    
ただしKenjiやNaokoは英語をしゃべってくれません。
アプリケーション上から音声の切り替えもできるようなのですが、面倒なのでまだやってません(苦笑)



2. プロジェクトファイルのダウンロード

Speech Sample(実行ファイル) SpeechSample.lzh 20kB 2002/8/15
Speech Sample(プロジェクト) SpeechSample-project.lzh 139kB 2004/8/15

Topへ


@ プログラミングの準備
A ソケット(TCP/IP)
B スレッド
C USBカメラ画像のキャプチャ
D OpenGL
E Text to Speech