Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
 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);
 }