public void Enqueue(TTSMessage message) { if (null == _parentTTS) { throw new InvalidOperationException("No associated Text-To-Speech subsystem for injection"); } else if (message.AlreadySpoken()) { throw new InvalidOperationException($"{GetType().Name}: message has already been spoken"); } _parentTTS.TTSInitialize(); uint messageKey; message.Voice = _parentTTS.CurrentVoice; vx_tts_status status = VivoxCoreInstance.vx_tts_speak(_parentTTS.TTSManagerId, message.Voice.Key, message.Text, (vx_tts_destination)message.Destination, out messageKey); if (TextToSpeech.IsNotTTSError(status)) { message.Key = messageKey; message.TTS = _parentTTS; message.State = TTSMessageState.Enqueued; message.PropertyChanged += OnMessage_PropertyChanged; _messages.Add(message); AfterMessageAdded?.Invoke(this, new ITTSMessageQueueEventArgs(message)); } else { throw new VivoxApiException((int)status); } }
public void CancelDestination(TTSDestination destination) { ReadOnlyCollection <TTSMessage> destCol = GetMessagesFromDestination(destination); if (destCol.Count == 0) { return; } _client.TTSInitialize(); vx_tts_status status = VivoxCoreInstance.vx_tts_cancel_all_in_dest(TTSManagerId, (vx_tts_destination)destination); if (IsNotTTSError(status)) { foreach (TTSMessage message in destCol) { _ttsMessages.Cleanup(message); } } else { throw new VivoxApiException((int)status); } }
public bool Remove(TTSMessage message) { if (!_messages.Contains(message)) { return(false); } if (null == _parentTTS) { throw new InvalidOperationException("No associated Text-To-Speech subsystem for cancellation"); } _parentTTS.TTSInitialize(); vx_tts_status status = VivoxCoreInstance.vx_tts_cancel_utterance(_parentTTS.TTSManagerId, message.Key); if (TextToSpeech.IsNotTTSError(status)) { BeforeMessageRemoved?.Invoke(this, new ITTSMessageQueueEventArgs(message)); return(_messages.Remove(message)); } else { throw new VivoxApiException((int)status); } }
internal bool TTSInitialize() { if (!_ttsIsInitialized) { // NB: once there's more than one tts_engine type available we'll need to make a public TTSInitialize() method. vx_tts_status status = VivoxCoreInstance.vx_tts_initialize(vx_tts_engine_type.tts_engine_vivox_default, out _ttsManagerId); if (vx_tts_status.tts_status_success == status) { _ttsIsInitialized = true; } } return(_ttsIsInitialized); }
public void CancelAll() { if (_ttsMessages.Count == 0) { return; } _client.TTSInitialize(); vx_tts_status status = VivoxCoreInstance.vx_tts_cancel_all(TTSManagerId); if (IsNotTTSError(status)) { _ttsMessages.Cleanup(); } else { throw new VivoxApiException((int)status); } }
internal static bool IsNotTTSError(vx_tts_status status) { return(status == vx_tts_status.tts_status_success || status == vx_tts_status.tts_status_input_text_was_enqueued || status == vx_tts_status.tts_status_enqueue_not_necessary); }