// 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); }); }); }
/// <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); }
/// <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); }
/// <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); } }); }
/// <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); } }); }
// Ensures text can be sent to wit web service public string IsTextValid(string textToSpeak) => WitUnityRequest.IsTextValid(textToSpeak);