Example #1
0
        private void InternalStart(vx_sdk_config_t config)
        {
            if (_startCount > 0)
            {
                ++_startCount;
                return;
            }

            /// Initialize the VivoxNative module before returning the Client object
#if (UNITY_ANDROID && !UNITY_EDITOR) || __ANDROID__
            // Initialize the VivoxNative module
            AndroidJavaClass  unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject activity    = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity");
            AndroidJavaObject appContext  = activity.Call <AndroidJavaObject>("getApplicationContext");
            AndroidJavaClass  pluginClass = new AndroidJavaClass("com.vivox.vivoxnative.VivoxNative");
            pluginClass.CallStatic("init", appContext);
#endif
            config.app_id = appId;

            int status = VivoxCoreInstance.Initialize(config);
            if (status != 0)
            {
                throw new VivoxApiException(status);
            }

            MessagePump.Instance.MainLoopRun += InstanceOnMainLoopRun;
            ++_startCount;

            //Start the Unity interop class that will setup the needed message pump
#if UNITY_5_3_OR_NEWER
            VxUnityInterop.Instance.StartVivoxUnity();
#endif
        }
Example #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);
            }
        }
Example #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);
            }
        }
Example #4
0
 public VivoxApiException(int statusCode, string requestId)
     : base(
         $"{VivoxCoreInstance.vx_get_error_string(statusCode)} ({statusCode})")
 {
     StatusCode = statusCode;
     RequestId  = requestId;
 }
Example #5
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);
            }
        }
Example #6
0
        public IAsyncResult BeginIssueRequest(vx_req_base_t request, AsyncCallback callback)
        {
            if (request == null)
            {
                throw new ArgumentNullException();
            }
            if (!Started)
            {
                throw new InvalidOperationException();
            }
            string requestId = $"{_nextRequestId++}";

            request.cookie = requestId;
            var result = new AsyncResult <vx_resp_base_t>(callback)
            {
                AsyncState = requestId
            };

            lock (_pendingRequests)
            {
                _pendingRequests[requestId] = result;
            }
            var status = VivoxCoreInstance.IssueRequest(request);

            if (status != 0)
            {
                lock (_pendingRequests)
                {
                    _pendingRequests.Remove(requestId);
                }
                throw new VivoxApiException(status);
            }
            return(result);
        }
Example #7
0
        public IAsyncResult BeginRefresh(AsyncCallback callback)
        {
            AsyncNoResult result  = new AsyncNoResult(callback);
            var           request = new vx_req_aux_get_render_devices_t();

            _client.BeginIssueRequest(request, ar =>
            {
                vx_resp_aux_get_render_devices_t response;
                try
                {
                    response = _client.EndIssueRequest(ar);
                    _devices.Clear();
                    for (var i = 0; i < response.count; ++i)
                    {
                        var device   = VivoxCoreInstance.get_device(i, response.render_devices);
                        var id       = device.device;
                        var name     = device.display_name;
                        _devices[id] = new AudioDevice {
                            Key = id, Name = name
                        };
                    }

                    _systemDevice = new AudioDevice
                    {
                        Key  = response.default_render_device.device,
                        Name = response.default_render_device.display_name
                    };
                    _communicationDevice = new AudioDevice
                    {
                        Key  = response.default_communication_render_device.device,
                        Name = response.default_communication_render_device.display_name
                    };
                    var effectiveDevice = new AudioDevice
                    {
                        Key  = response.effective_render_device.device,
                        Name = response.effective_render_device.display_name,
                    };
                    if (!effectiveDevice.Equals(_effectiveDevice))
                    {
                        // Only fire the event if the effective device has truly changed.
                        _effectiveDevice = effectiveDevice;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(EffectiveDevice)));
                    }
                    result.SetComplete();
                }
                catch (Exception e)
                {
                    VivoxDebug.Instance.VxExceptionMessage($"{request.GetType().Name} failed: {e}");
                    result.SetComplete(e);
                    if (VivoxDebug.Instance.throwInternalExcepetions)
                    {
                        throw;
                    }
                    return;
                }
            });
            return(result);
        }
Example #8
0
        /// <summary>
        /// Used for turning Vivox's audio echo cancellation feature on or off.
        /// </summary>
        /// <param name="onOff">True for on, False for off.</param>
        public void SetAudioEchoCancellation(bool onOff)
        {
            CheckInitialized();

            if (IsAudioEchoCancellationEnabled != onOff)
            {
                VivoxCoreInstance.vx_set_vivox_aec_enabled(Convert.ToInt32(onOff));
            }
        }
Example #9
0
 public void Cleanup()
 {
     MessagePump.Instance.MainLoopRun -= InstanceOnMainLoopRun;
     VivoxCoreInstance.Uninitialize();
     lock (_pendingRequests)
     {
         _pendingRequests.Clear();
     }
     _startCount = 0;
 }
Example #10
0
 public static string GetErrorString(int statusCode)
 {
     if (statusCode <= (int)vx_tts_status.tts_error_invalid_engine_type)
     {
         return(VivoxCoreInstance.vx_get_tts_status_string((vx_tts_status)statusCode));
     }
     else
     {
         return(VivoxCoreInstance.vx_get_error_string(statusCode));
     }
 }
Example #11
0
 internal void TTSShutdown()
 {
     if (_ttsIsInitialized)
     {
         var status = VivoxCoreInstance.vx_tts_shutdown();
         foreach (ILoginSession session in _loginSessions)
         {
             ((TextToSpeech)session.TTS).CleanupTTS();
         }
         _ttsIsInitialized = false;
     }
 }
Example #12
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);
 }
Example #13
0
 public void Stop()
 {
     if (_startCount <= 0)
     {
         return;
     }
     --_startCount;
     if (_startCount != 0)
     {
         return;
     }
     MessagePump.Instance.MainLoopRun -= InstanceOnMainLoopRun;
     VivoxCoreInstance.Uninitialize();
 }
Example #14
0
        protected virtual void Dispose(bool disposing)
        {
            if (disposed)
            {
                return;
            }

            if (disposing)
            {
                // Free any other managed objects here.
                //
            }

            // Free any unmanaged objects here.
            VivoxCoreInstance.Uninitialize();

            disposed = true;
        }
Example #15
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);
            }
        }
Example #16
0
        /// <param name="config">Optional: config to set on initialize.</param>
        public void Start(vx_sdk_config_t config = null)
        {
            if (_startCount > 0)
            {
                ++_startCount;
                return;
            }
            config = config == null ? new vx_sdk_config_t() : config;

            config.app_id = appId;

            int status = VivoxCoreInstance.Initialize(config);

            if (status != 0)
            {
                throw new VivoxApiException(status);
            }

            MessagePump.Instance.MainLoopRun += InstanceOnMainLoopRun;

            ++_startCount;
        }
Example #17
0
 public static string GetRandomChannelUri(string prefix, string realm)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_get_random_channel_uri(prefix, realm));
 }
Example #18
0
 public static string GetRandomUserIdEx(string prefix, string issuer)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_get_random_user_id_ex(prefix, issuer));
 }
Example #19
0
 public static string GetRandomUserId(string prefix)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_get_random_user_id(prefix));
 }
Example #20
0
 public static string GetMuteForAllToken(string issuer, TimeSpan expiration, string fromUserUri, string userUri, string conferenceUri, string key)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_debug_generate_token(issuer, (int)expiration.TotalSeconds, "mute", serialNumber++, fromUserUri, userUri, conferenceUri, key));
 }
Example #21
0
 public static string GetLoginToken(string issuer, TimeSpan expiration, string userUri, string key)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_debug_generate_token(issuer, (int)expiration.TotalSeconds, "login", serialNumber++, null, userUri, null, key));
 }
Example #22
0
        public static vx_message_base_t NextMessage()
        {
            vx_message_base_t msg = VivoxCoreInstance.vx_get_message();

            return(msg);
        }
Example #23
0
 public static string GetVersion()
 {
     return(VivoxCoreInstance.vx_get_sdk_version_info());
 }
Example #24
0
 public VivoxApiException(int statusCode, Exception inner)
     : base(VivoxCoreInstance.vx_get_error_string(statusCode), inner)
 {
 }
Example #25
0
 public static string GetErrorString(int statusCode)
 {
     return(VivoxCoreInstance.vx_get_error_string(statusCode));
 }
Example #26
0
 public static void Cleanup()
 {
     VxClient.Instance.Stop();
     VivoxCoreInstance.Uninitialize();
 }
Example #27
0
 public static string GetTranscriptionToken(string issuer, TimeSpan expiration, string userUri, string conferenceUri, string key)
 {
     return(VivoxCoreInstance.vx_debug_generate_token(issuer, SecondsSinceUnixEpochPlusDuration(expiration), "trxn", serialNumber++, null, userUri, conferenceUri, key));
 }
Example #28
0
 public static string GetJoinToken(string issuer, TimeSpan expiration, string userUri, string conferenceUri, string key)
 {
     CheckInitialized();
     return(VivoxCoreInstance.vx_debug_generate_token(issuer, SecondsSinceUnixEpochPlusDuration(expiration), "join", serialNumber++, null, userUri, conferenceUri, key));
 }
Example #29
0
 public string GetLoginToken(string key, TimeSpan expiration)
 {
     return(VivoxCoreInstance.vx_debug_generate_token(Key.Issuer, (int)expiration.TotalSeconds, "login", Helper.serialNumber++, null, this.Key.ToString(), null, key));
 }