public static byte[] GenerateTTS(string serverUrl, ParamsTTS tts, string serverToken = null)
        {
            var request = GenerateTTSRequest(tts);
            var json    = JsonConvert.SerializeObject(request, new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            Uri baseUri = new Uri(serverUrl);
            Uri reqUri  = new Uri(baseUri, "/dh/api/v1/tts");

            var webRequest = UnityWebRequest.Put(reqUri, json);

            if (!string.IsNullOrEmpty(serverToken))
            {
                webRequest.SetRequestHeader("Authorization", "Bearer " + serverToken);
            }
            webRequest.SetRequestHeader("Content-Type", "application/json");
            webRequest.method = "POST";

            var webRequestHandler = webRequest.SendWebRequest();

            while (!webRequestHandler.isDone)
            {
            }

            if (webRequest.isNetworkError)
            {
                Debug.LogError("TTS failed with network error: " + webRequest.error);
                return(null);
            }

            if (webRequest.isHttpError)
            {
                var text    = webRequest.downloadHandler.text;
                var errCode = webRequest.responseCode;

                Debug.LogError($"TTS failed with response code {errCode}. " +
                               $"Server returned message: {text}");
                return(null);
            }

            var data = webRequest.downloadHandler.data;

            return(data);
        }
        public static Request <AttributesTTS> GenerateTTSRequest(ParamsTTS paramsTTS)
        {
            var request = new Request <AttributesTTS>
            {
                data = new Data <AttributesTTS>
                {
                    id         = Guid.NewGuid().ToString(),
                    type       = "textToSpeech",
                    attributes = new AttributesTTS()
                    {
                        tts = paramsTTS
                    }
                }
            };

            return(request);
        }