// Obtain voices
        public static void UpdateVoices(WitConfiguration configuration, Action <bool> onComplete)
        {
            // Ignore if already updating
            if (IsUpdating || IsLoading)
            {
                onComplete?.Invoke(false);
                return;
            }

            // Begin update
            _updating = true;

            // Download
            Log("Service Download Begin");
            WitUnityRequest.RequestTTSVoices(configuration, null, (json, error) =>
            {
                // Failed
                if (!string.IsNullOrEmpty(error))
                {
                    Log($"Service Download Failure\n{error}", true);
                    OnUpdateComplete(false, onComplete);
                    return;
                }

                // Success
                Log($"Service Download Success\n{json}");

                // Decode if possible
                DecodeVoices(json, (success) =>
                {
                    // Decoded successfully, then save
                    if (success)
                    {
                        string backupPath = GetVoiceFilePath();
                        try
                        {
                            File.WriteAllText(backupPath, json);
                            Log($"Service Save Success\nPath: {backupPath}");
                        }
                        catch (Exception e)
                        {
                            Log($"Service Save Failed\nPath: {backupPath}\n{e}", true);
                        }
                    }

                    // Complete
                    OnUpdateComplete(success, onComplete);
                });
            });
        }
Exemple #2
0
        /// <summary>
        /// Method for cancelling a running load request
        /// </summary>
        /// <param name="clipData">Clip request data</param>
        public bool CancelWebDownload(TTSClipData clipData, string downloadPath)
        {
            // Ignore if not performing
            if (!_webDownloads.ContainsKey(clipData.clipID))
            {
                return(false);
            }

            // Get request
            WitUnityRequest request = _webDownloads[clipData.clipID];

            _webDownloads.Remove(clipData.clipID);

            // Destroy immediately
            request?.Unload();

            // Download cancelled
            WebDownloadEvents?.OnDownloadCancel?.Invoke(clipData, downloadPath);

            // Success
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// Cancel web stream
        /// </summary>
        /// <param name="clipID">Unique clip id</param>
        public bool CancelWebStream(TTSClipData clipData)
        {
            // Ignore without
            if (!_webStreams.ContainsKey(clipData.clipID))
            {
                return(false);
            }

            // Get request
            WitUnityRequest request = _webStreams[clipData.clipID];

            _webStreams.Remove(clipData.clipID);

            // Destroy immediately
            request?.Unload();

            // Call delegate
            WebStreamEvents?.OnStreamCancel?.Invoke(clipData);

            // Success
            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Method for performing a web load request
        /// </summary>
        /// <param name="clipData">Clip request data</param>
        /// <param name="onStreamSetupComplete">Stream setup complete: returns clip and error if applicable</param>
        public void RequestStreamFromWeb(TTSClipData clipData)
        {
            // Stream begin
            WebStreamEvents?.OnStreamBegin?.Invoke(clipData);

            // Check if valid
            string validError = IsRequestValid(clipData, RequestSettings.configuration);

            if (!string.IsNullOrEmpty(validError))
            {
                WebStreamEvents?.OnStreamError?.Invoke(clipData, validError);
                return;
            }
            // Ignore if already performing
            if (_webStreams.ContainsKey(clipData.clipID))
            {
                CancelWebStream(clipData);
            }

            // Request tts
            _webStreams[clipData.clipID] = WitUnityRequest.RequestTTSStream(RequestSettings.configuration,
                                                                            clipData.textToSpeak, clipData.queryParameters,
                                                                            (progress) => clipData.loadProgress = progress,
                                                                            (clip, error) =>
            {
                _webStreams.Remove(clipData.clipID);
                clipData.clip = clip;
                if (string.IsNullOrEmpty(error))
                {
                    WebStreamEvents?.OnStreamReady?.Invoke(clipData);
                }
                else
                {
                    WebStreamEvents?.OnStreamError?.Invoke(clipData, error);
                }
            });
        }
Exemple #5
0
        /// <summary>
        /// Method for performing a web load request
        /// </summary>
        /// <param name="clipData">Clip request data</param>
        /// <param name="downloadPath">Path to save clip</param>
        public void RequestDownloadFromWeb(TTSClipData clipData, string downloadPath)
        {
            // Begin
            WebDownloadEvents?.OnDownloadBegin?.Invoke(clipData, downloadPath);

            // Ensure valid
            string validError = IsRequestValid(clipData, RequestSettings.configuration);

            if (!string.IsNullOrEmpty(validError))
            {
                WebDownloadEvents?.OnDownloadError?.Invoke(clipData, downloadPath, validError);
                return;
            }
            // Abort if already performing
            if (_webDownloads.ContainsKey(clipData.clipID))
            {
                CancelWebDownload(clipData, downloadPath);
            }

            // Request tts
            _webDownloads[clipData.clipID] = WitUnityRequest.RequestTTSDownload(downloadPath,
                                                                                RequestSettings.configuration, clipData.textToSpeak, clipData.queryParameters,
                                                                                (progress) => clipData.loadProgress = progress,
                                                                                (error) =>
            {
                _webDownloads.Remove(clipData.clipID);
                if (string.IsNullOrEmpty(error))
                {
                    WebDownloadEvents?.OnDownloadSuccess?.Invoke(clipData, downloadPath);
                }
                else
                {
                    WebDownloadEvents?.OnDownloadError?.Invoke(clipData, downloadPath, error);
                }
            });
        }
Exemple #6
0
 // Ensures text can be sent to wit web service
 public string IsTextValid(string textToSpeak) => WitUnityRequest.IsTextValid(textToSpeak);