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 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.º 3
0
 public void CancelMessage(TTSMessage message)
 {
     if (!message.AlreadySpoken())
     {
         throw new InvalidOperationException($"{GetType().Name}: message is not Playing or Enqueued.");
     }
     else
     {
         _ttsMessages.Remove(message);
     }
 }
Exemplo n.º 4
0
    //public string[] TruncateWithPreservation(string s, int len)
    //{
    //    string[] words = s.Split(' ');
    //    string[] sections;

    //    StringBuilder sb = new StringBuilder();

    //    string currentString;

    //    foreach (string word in words)
    //    {
    //        if (sb.Length + word.Length > len)

    //            currentString = Strin;
    //            break;
    //        currentString += " ";
    //        currentString += word;
    //    }

    //    return sb.ToString();
    //}

    private void SubmitTTSMessageToVivox()
    {
        if (string.IsNullOrEmpty(MessageInputField.text))
        {
            return;
        }
        var ttsMessage = new TTSMessage(MessageInputField.text, TTSDestination.QueuedRemoteTransmissionWithLocalPlayback);

        _vivoxVoiceManager.LoginSession.TTS.Speak(ttsMessage);
        ClearOutTextField();
    }
Exemplo n.º 5
0
        public TTSMessage Dequeue()
        {
            if (_messages.Count == 0)
            {
                throw new InvalidOperationException($"{GetType().Name}: The collection is empty");
            }

            TTSMessage message = _messages[0];

            Remove(message);
            return(message);
        }
Exemplo n.º 6
0
        private void HandleTTSInjectionEnded(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_ended_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                _ttsMessages.Cleanup(matchingMessage);
            }
        }
Exemplo n.º 7
0
        private void HandleTTSInjectionFailed(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_failed_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                _ttsMessages.Cleanup(matchingMessage);
                throw new VivoxApiException((int)evt.status);
            }
        }
Exemplo n.º 8
0
        private void HandleTTSInjectionStarted(vx_evt_base_t eventMessage)
        {
            vx_evt_tts_injection_started_t evt = eventMessage;

            Debug.Assert(evt != null);
            TTSMessage matchingMessage = GetTTSMessageFromEvt(evt.utterance_id);

            if (null != matchingMessage)
            {
                matchingMessage.NumConsumers = evt.num_consumers;
                matchingMessage.Duration     = evt.utterance_duration;
                matchingMessage.State        = TTSMessageState.Playing;
            }
        }
Exemplo n.º 9
0
 // Internal. Remove messages from the collection without canceling them.
 // Used during tts subsystem shutdown, or when message playback ends/fails.
 internal void Cleanup(TTSMessage message = null)
 {
     if (null == message)
     {
         foreach (TTSMessage msg in _messages)
         {
             BeforeMessageRemoved?.Invoke(this, new ITTSMessageQueueEventArgs(msg));
         }
         _messages.Clear();
     }
     else if (_messages.Contains(message))
     {
         BeforeMessageRemoved?.Invoke(this, new ITTSMessageQueueEventArgs(message));
         _messages.Remove(message);
     }
 }
Exemplo n.º 10
0
        public static void Main(string[] args)
        {
            channel = new IpcServerChannel("TTSYukkuriChannel");

            ChannelServices.RegisterChannel(channel, true);

            var message = new TTSMessage();

            RemotingServices.Marshal(message, "message", typeof(TTSMessage));

            message.OnIsReady           += () => { return(true); };
            message.OnSpeak             += message_OnSpeak;
            message.OnGetSasaraSettings += message_OnGetSasaraSettings;
            message.OnSetSasaraSettings += message_OnSetSasaraSettings;
            message.OnStartSasara       += message_OnStartSasara;
            message.OnCloseSasara       += message_OnCloseSasara;
            message.OnEnd += message_OnEnd;

            Console.WriteLine("Listening on " + channel.GetChannelUri());

            // 終了を待つ
            Console.ReadLine();
        }
Exemplo n.º 11
0
 public bool Contains(TTSMessage message)
 {
     return(_messages.Contains(message));
 }
Exemplo n.º 12
0
 public void Speak(TTSMessage message)
 {
     _ttsMessages.Enqueue(message);
 }