예제 #1
0
        // 音声合成を初期化する
        private void InitializeSpeechSynthesis()
        {
            pxcmStatus sts;
            var        session = senseManager.QuerySession();

            // 音声合成エンジンを列挙する
            TextDesc.Text += "音声合成エンジン\n";

            PXCMSession.ImplDesc inDesc  = new PXCMSession.ImplDesc();
            PXCMSession.ImplDesc outDesc = null;
            PXCMSession.ImplDesc desc    = null;
            inDesc.cuids[0] = PXCMSpeechSynthesis.CUID;

            for (int i = 0; ; ++i)
            {
                // 音声合成エンジンを取得する
                sts = session.QueryImpl(inDesc, i, out outDesc);
                if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR)
                {
                    break;
                }

                // 音声合成エンジン名称を表示する
                TextDesc.Text += "\t" + outDesc.friendlyName + "\n";

                // 最初の音声合成エンジンを使う
                if (i == 0)
                {
                    desc = outDesc;
                }
            }

            // 音声合成エンジンオブジェクトを作成する
            sts = session.CreateImpl <PXCMSpeechSynthesis>(desc, out synthesis);
            if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                throw new Exception("音声合成エンジンオブジェクトの作成に失敗しました");
            }

            // 対応言語を列挙する
            for (int j = 0; ; ++j)
            {
                // 音声合成エンジンが持っているプロファイルを取得する
                PXCMSpeechSynthesis.ProfileInfo pinfo;
                sts = synthesis.QueryProfile(j, out pinfo);
                if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR)
                {
                    break;
                }

                // 対応言語を表示する
                TextDesc.Text += "\t\t" + LanguageToString(pinfo.language) + "\n";

                // 英語のエンジンを使う(日本語対応時には日本語に変更する)
                if (pinfo.language == PXCMSpeechSynthesis.LanguageType.LANGUAGE_US_ENGLISH)
                {
                    profile = pinfo;
                }
            }

            if (profile == null)
            {
                throw new Exception("選択した音声合成エンジンが見つかりませんでした");
            }

            // 音声合成時のパラメーターを設定する
            profile.volume = 80;
            profile.pitch  = 100;
            profile.rate   = 100;

            // 使用する言語を設定する
            sts = synthesis.SetProfile(profile);
            if (sts < pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                throw new Exception("音声合成エンジンオブジェクトの設定に失敗しました");
            }
        }
        // 音声合成を初期化する
        private void InitializeSpeechSynthesis()
        {
            pxcmStatus sts;
            var session = senseManager.QuerySession();

            // 音声合成エンジンを列挙する
            TextDesc.Text += "音声合成エンジン\n";

            PXCMSession.ImplDesc inDesc = new PXCMSession.ImplDesc();
            PXCMSession.ImplDesc outDesc = null;
            PXCMSession.ImplDesc desc = null;
            inDesc.cuids[0] = PXCMSpeechSynthesis.CUID;

            for ( int i = 0; ; ++i ) {
                // 音声合成エンジンを取得する
                sts = session.QueryImpl( inDesc, i, out outDesc );
                if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) {
                    break;
                }

                // 音声合成エンジン名称を表示する
                TextDesc.Text += "\t" + outDesc.friendlyName + "\n";

                // 最初の音声合成エンジンを使う
                if ( i== 0 ) {
                    desc = outDesc;
                }
            }

            // 音声合成エンジンオブジェクトを作成する
            sts = session.CreateImpl<PXCMSpeechSynthesis>( desc, out synthesis );
            if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) {
                throw new Exception( "音声合成エンジンオブジェクトの作成に失敗しました" );
            }

            // 対応言語を列挙する
            for ( int j = 0; ; ++j ) {
                // 音声合成エンジンが持っているプロファイルを取得する
                PXCMSpeechSynthesis.ProfileInfo pinfo;
                sts = synthesis.QueryProfile( j, out pinfo );
                if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) {
                    break;
                }

                // 対応言語を表示する
                TextDesc.Text += "\t\t" + LanguageToString( pinfo.language ) + "\n";

                // 英語のエンジンを使う(日本語対応時には日本語に変更する)
                if ( pinfo.language == PXCMSpeechSynthesis.LanguageType.LANGUAGE_US_ENGLISH ) {
                    profile = pinfo;
                }
            }

            if ( profile == null ) {
                throw new Exception( "選択した音声合成エンジンが見つかりませんでした" );
            }

            // 音声合成時のパラメーターを設定する
            profile.volume = 80;
            profile.pitch = 100;
            profile.rate = 100;

            // 使用する言語を設定する
            sts = synthesis.SetProfile( profile );
            if ( sts < pxcmStatus.PXCM_STATUS_NO_ERROR ) {
                throw new Exception( "音声合成エンジンオブジェクトの設定に失敗しました" );
            }
        }