コード例 #1
0
        /// <summary>
        /// パラメータを設定する。
        /// param.Sizeおよびparam.NumberOfSpeakersは自動的に設定される。
        /// </summary>
        /// <param name="tts_param">パラメータ(話者パラメータを除く)</param>
        /// <param name="speaker_params">話者パラメータ</param>
        private static void SetParameters(AitalkCore.TtsParam tts_param, AitalkCore.TtsParam.SpeakerParam[] speaker_params)
        {
            // パラメータを格納するバッファを確保する
            int    size = Marshal.SizeOf <AitalkCore.TtsParam>() + Marshal.SizeOf <AitalkCore.TtsParam.SpeakerParam>() * speaker_params.Length;
            IntPtr ptr  = Marshal.AllocCoTaskMem(size);

            try
            {
                // パラメータを設定する
                tts_param.Size             = size;
                tts_param.NumberOfSpeakers = speaker_params.Length;
                Marshal.StructureToPtr <AitalkCore.TtsParam>(tts_param, ptr, false);
                for (int index = 0; index < speaker_params.Length; index++)
                {
                    IntPtr speaker_ptr = IntPtr.Add(ptr, Marshal.SizeOf <AitalkCore.TtsParam>() + Marshal.SizeOf <AitalkCore.TtsParam.SpeakerParam>() * index);
                    Marshal.StructureToPtr <AitalkCore.TtsParam.SpeakerParam>(speaker_params[index], speaker_ptr, false);
                }
                AitalkCore.Result result;
                result = AitalkCore.SetParam(ptr);
                if (result != AitalkCore.Result.Success)
                {
                    throw new AitalkException("動作パラメータの設定に失敗しました。", result);
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(ptr);
            }
        }
コード例 #2
0
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="voice_db_name">ボイスライブラリ名</param>
 /// <param name="tts_param">パラメータ</param>
 /// <param name="speaker_params">話者のパラメータリスト</param>
 internal AitalkParameter(string voice_db_name, AitalkCore.TtsParam tts_param, AitalkCore.TtsParam.SpeakerParam[] speaker_params)
 {
     VoiceDbName             = voice_db_name;
     TtsParam                = tts_param;
     SpeakerParameters       = speaker_params;
     CurrentSpeakerName      = SpeakerParameters[0].VoiceName;
     CurrentSpeakerParameter = SpeakerParameters[0];
 }
コード例 #3
0
        /// <summary>
        /// パラメータを取得する
        /// </summary>
        /// <param name="tts_param">パラメータ(話者パラメータを除く)</param>
        /// <param name="speaker_params">話者パラメータ</param>
        private static void GetParameters(out AitalkCore.TtsParam tts_param, out AitalkCore.TtsParam.SpeakerParam[] speaker_params)
        {
            // パラメータを格納するのに必要なバッファサイズを取得する
            AitalkCore.Result result;
            int size = 0;

            result = AitalkCore.GetParam(IntPtr.Zero, ref size);
            if ((result != AitalkCore.Result.Insufficient) || (size < Marshal.SizeOf <AitalkCore.TtsParam>()))
            {
                throw new AitalkException("動作パラメータの長さの取得に失敗しました。", result);
            }

            IntPtr ptr = Marshal.AllocCoTaskMem(size);

            try
            {
                // パラメータを読み取る
                Marshal.WriteInt32(ptr, (int)Marshal.OffsetOf <AitalkCore.TtsParam>("Size"), size);
                result = AitalkCore.GetParam(ptr, ref size);
                if (result != AitalkCore.Result.Success)
                {
                    throw new AitalkException("動作パラメータの取得に失敗しました。", result);
                }
                tts_param = Marshal.PtrToStructure <AitalkCore.TtsParam>(ptr);

                // 話者のパラメータを読み取る
                speaker_params = new AitalkCore.TtsParam.SpeakerParam[tts_param.NumberOfSpeakers];
                for (int index = 0; index < speaker_params.Length; index++)
                {
                    IntPtr speaker_ptr = IntPtr.Add(ptr, Marshal.SizeOf <AitalkCore.TtsParam>() + Marshal.SizeOf <AitalkCore.TtsParam.SpeakerParam>() * index);
                    speaker_params[index] = Marshal.PtrToStructure <AitalkCore.TtsParam.SpeakerParam>(speaker_ptr);
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(ptr);
            }
        }