// 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); }
// 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); }