// Get audio clip from Voiceroid Daemon
        // https://github.com/Nkyoku/voiceroid_daemon
        protected override async Task <AudioClip> DownloadAudioClipAsync(Voice voice, CancellationToken token)
        {
            if (token.IsCancellationRequested)
            {
                return(null);
            }
            ;

            using (var www = UnityWebRequestMultimedia.GetAudioClip(EndpointUrl, AudioType))
            {
                www.timeout = Timeout;
                www.method  = "POST";

                // Header
                www.SetRequestHeader("Content-Type", "application/json");

                // Body
                var request = new VoiceroidRequest(voice, this);
                var text    = JsonConvert.SerializeObject(request);
                www.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(text));

                // Send request
                await www.SendWebRequest();

                if (www.isNetworkError || www.isHttpError)
                {
                    Debug.LogError($"Error occured while processing voiceroid text-to-speech: {www.error}");
                }
                else if (www.isDone)
                {
                    return(DownloadHandlerAudioClip.GetContent(www));
                }
            }
            return(null);
        }
Beispiel #2
0
        // Get audio clip from Voiceroid Daemon
        // https://github.com/Nkyoku/voiceroid_daemon
        public async Task <AudioClip> GetAudioClipFromTTS(Voice voice, AudioType audioType = AudioType.WAV)
        {
            // Return from cache when name is set and it's cached
            if (!string.IsNullOrEmpty(voice.Name))
            {
                if (audioCache.ContainsKey(voice.Name))
                {
                    return(audioCache[voice.Name]);
                }
            }

            using (var www = UnityWebRequestMultimedia.GetAudioClip(EndpointUrl, audioType))
            {
                www.timeout = 10;
                www.method  = "POST";

                // Header
                www.SetRequestHeader("Content-Type", "application/json");

                // Body
                var request = new VoiceroidRequest(voice);
                var text    = JsonConvert.SerializeObject(request);
                www.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(text));

                // Send request
                await www.SendWebRequest();

                if (www.isNetworkError || www.isHttpError)
                {
                    Debug.LogError($"Error occured while processing voiceroid text-to-speech: {www.error}");
                }
                else if (www.isDone)
                {
                    var clip = DownloadHandlerAudioClip.GetContent(www);
                    if (!string.IsNullOrEmpty(voice.Name))
                    {
                        // Cache if name is set
                        audioCache[voice.Name] = clip;
                    }
                    return(clip);
                }
            }
            return(null);
        }