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 }
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); } }
public VivoxApiException(int statusCode, string requestId) : base( $"{VivoxCoreInstance.vx_get_error_string(statusCode)} ({statusCode})") { StatusCode = statusCode; RequestId = requestId; }
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 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); }
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); }
/// <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)); } }
public void Cleanup() { MessagePump.Instance.MainLoopRun -= InstanceOnMainLoopRun; VivoxCoreInstance.Uninitialize(); lock (_pendingRequests) { _pendingRequests.Clear(); } _startCount = 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)); } }
internal void TTSShutdown() { if (_ttsIsInitialized) { var status = VivoxCoreInstance.vx_tts_shutdown(); foreach (ILoginSession session in _loginSessions) { ((TextToSpeech)session.TTS).CleanupTTS(); } _ttsIsInitialized = false; } }
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 Stop() { if (_startCount <= 0) { return; } --_startCount; if (_startCount != 0) { return; } MessagePump.Instance.MainLoopRun -= InstanceOnMainLoopRun; VivoxCoreInstance.Uninitialize(); }
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; }
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); } }
/// <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; }
public static string GetRandomChannelUri(string prefix, string realm) { CheckInitialized(); return(VivoxCoreInstance.vx_get_random_channel_uri(prefix, realm)); }
public static string GetRandomUserIdEx(string prefix, string issuer) { CheckInitialized(); return(VivoxCoreInstance.vx_get_random_user_id_ex(prefix, issuer)); }
public static string GetRandomUserId(string prefix) { CheckInitialized(); return(VivoxCoreInstance.vx_get_random_user_id(prefix)); }
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)); }
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)); }
public static vx_message_base_t NextMessage() { vx_message_base_t msg = VivoxCoreInstance.vx_get_message(); return(msg); }
public static string GetVersion() { return(VivoxCoreInstance.vx_get_sdk_version_info()); }
public VivoxApiException(int statusCode, Exception inner) : base(VivoxCoreInstance.vx_get_error_string(statusCode), inner) { }
public static string GetErrorString(int statusCode) { return(VivoxCoreInstance.vx_get_error_string(statusCode)); }
public static void Cleanup() { VxClient.Instance.Stop(); VivoxCoreInstance.Uninitialize(); }
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)); }
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)); }
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)); }