private void ConvertCompleteUnit() { if (_lastComplete == 0) { return; } if (_phonemeQueue.Count == 0) { Trace.TraceError("Failed to convert phonemes. Phoneme queue is empty."); return; } char[] array = new char[_lastComplete]; _phonemes.CopyTo(0, array, 0, _lastComplete); _phonemes.Remove(0, _lastComplete); char[] value = (_conversion != 0) ? _alphabetConverter.SapiToIpa(array) : _alphabetConverter.IpaToSapi(array); TTSEvent tTSEvent = null; long num = 0L; tTSEvent = (TTSEvent)_phonemeQueue.Peek(); TTSEvent tTSEvent2; for (int i = 0; i < _lastComplete; i += tTSEvent2.Phoneme.Length) { tTSEvent2 = (TTSEvent)_phonemeQueue.Dequeue(); num += tTSEvent2.PhonemeDuration.Milliseconds; } TTSEvent evt = TTSEvent.CreatePhonemeEvent(new string(value), "", TimeSpan.FromMilliseconds(num), tTSEvent.PhonemeEmphasis, tTSEvent.Prompt, tTSEvent.AudioPosition); SendToQueue(evt); }
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); }
private void ConvertCompleteUnit() { if (_lastComplete == 0) { return; } if (_phonemeQueue.Count == 0) { Trace.TraceError("Failed to convert phonemes. Phoneme queue is empty."); return; } char[] source = new char[_lastComplete]; _phonemes.CopyTo(0, source, 0, _lastComplete); _phonemes.Remove(0, _lastComplete); char[] target; if (_conversion == PhonemeConversion.IpaToSapi) { target = _alphabetConverter.IpaToSapi(source); } else { target = _alphabetConverter.SapiToIpa(source); } // // Convert the audio duration // Update the next phoneme id // Retain any other information based on the first TTS phoneme event. // TTSEvent ttsEvent, targetEvent, basePhonemeEvent = null; long totalDuration = 0; basePhonemeEvent = (TTSEvent)_phonemeQueue.Peek(); for (int i = 0; i < _lastComplete;) { ttsEvent = (TTSEvent)_phonemeQueue.Dequeue(); totalDuration += ttsEvent.PhonemeDuration.Milliseconds; i += ttsEvent.Phoneme.Length; } targetEvent = TTSEvent.CreatePhonemeEvent(new string(target), "", TimeSpan.FromMilliseconds(totalDuration), basePhonemeEvent.PhonemeEmphasis, basePhonemeEvent.Prompt, basePhonemeEvent.AudioPosition); SendToQueue(targetEvent); }
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)); } }