コード例 #1
0
 public void AddEvents([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] SpeechEventInfo[] events, int ulCount)
 {
     try
     {
         for (int i = 0; i < events.Length; i++)
         {
             SpeechEventInfo sapiEvent = events[i];
             int             num       = 1 << (int)sapiEvent.EventId;
             if (sapiEvent.EventId == 2 && _eventMapper != null)
             {
                 _eventMapper.FlushEvent();
             }
             if ((num & _eventInterest) != 0)
             {
                 TTSEvent evt = CreateTtsEvent(sapiEvent);
                 if (_eventMapper == null)
                 {
                     AddEvent(evt);
                 }
                 else
                 {
                     _eventMapper.AddEvent(evt);
                 }
             }
         }
     }
     catch (Exception exception)
     {
         Exception ex = _exception = exception;
         _actions |= SPVESACTIONS.SPVES_ABORT;
     }
 }
コード例 #2
0
ファイル: EngineSite.cs プロジェクト: layomia/dotnet_runtime
        private TTSEvent CreateTtsEvent(SpeechEventInfo sapiEvent)
        {
            TTSEvent ttsEvent;

            switch ((TtsEventId)sapiEvent.EventId)
            {
            case TtsEventId.Phoneme:
                ttsEvent = TTSEvent.CreatePhonemeEvent("" + (char)((uint)sapiEvent.Param2 & 0xFFFF), // current phoneme
                                                       "" + (char)(sapiEvent.Param1 & 0xFFFF),       // next phoneme
                                                       TimeSpan.FromMilliseconds(sapiEvent.Param1 >> 16),
                                                       (SynthesizerEmphasis)((uint)sapiEvent.Param2 >> 16),
                                                       _prompt, _audio.Duration);
                break;

            case TtsEventId.Bookmark:
                // BookmarkDetected
                string bookmark = Marshal.PtrToStringUni(sapiEvent.Param2);
                ttsEvent = new TTSEvent((TtsEventId)sapiEvent.EventId, _prompt, null, null, _audio.Duration, _audio.Position, bookmark, (uint)sapiEvent.Param1, sapiEvent.Param2);
                break;

            default:
                ttsEvent = new TTSEvent((TtsEventId)sapiEvent.EventId, _prompt, null, null, _audio.Duration, _audio.Position, null, (uint)sapiEvent.Param1, sapiEvent.Param2);
                break;
            }
            return(ttsEvent);
        }
コード例 #3
0
 void ISpEngineSite.AddEvents([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] SpeechEventSapi[] eventsSapi, int ulCount)
 {
     SpeechEventInfo[] array = new SpeechEventInfo[eventsSapi.Length];
     for (int i = 0; i < eventsSapi.Length; i++)
     {
         SpeechEventSapi speechEventSapi = eventsSapi[i];
         array[i].EventId       = speechEventSapi.EventId;
         array[i].ParameterType = speechEventSapi.ParameterType;
         array[i].Param1        = (int)speechEventSapi.Param1;
         array[i].Param2        = speechEventSapi.Param2;
     }
     _site.AddEvents(array, ulCount);
 }
コード例 #4
0
        private TTSEvent CreateTtsEvent(SpeechEventInfo sapiEvent)
        {
            switch (sapiEvent.EventId)
            {
            case 6:
                return(TTSEvent.CreatePhonemeEvent(((char)((int)sapiEvent.Param2 & 0xFFFF)).ToString() ?? "", ((char)(sapiEvent.Param1 & 0xFFFF)).ToString() ?? "", TimeSpan.FromMilliseconds(sapiEvent.Param1 >> 16), (SynthesizerEmphasis)((uint)(int)sapiEvent.Param2 >> 16), _prompt, _audio.Duration));

            case 4:
            {
                string bookmark = Marshal.PtrToStringUni(sapiEvent.Param2);
                return(new TTSEvent((TtsEventId)sapiEvent.EventId, _prompt, null, null, _audio.Duration, _audio.Position, bookmark, (uint)sapiEvent.Param1, sapiEvent.Param2));
            }

            default:
                return(new TTSEvent((TtsEventId)sapiEvent.EventId, _prompt, null, null, _audio.Duration, _audio.Position, null, (uint)sapiEvent.Param1, sapiEvent.Param2));
            }
        }