@page "/text-to-speech" @using System.Text.Json @using System.Text @inject HttpClient Http @inject IJSRuntime JS @inject IConfiguration _configuration

Text to Speech


@code { private string InputText = string.Empty; private string GetApiKey() => _configuration?.GetSection("ElevenLabsAPI")?.GetValue("ApiKey") ?? string.Empty; private async Task ConvertTextToSpeech() { if (string.IsNullOrWhiteSpace(InputText)) return; var requestContent = new { text = InputText, // model_id = "eleven_multilingual_v2", model_id = "eleven_flash_v2_5", voice_settings = new { stability = 0.5, similarity_boost = 0.75 } }; var requestJson = JsonSerializer.Serialize(requestContent); var httpRequest = new HttpRequestMessage(HttpMethod.Post, "https://api.elevenlabs.io/v1/text-to-speech/yyPLNYHg3CvjlSdSOdLh/stream") { Content = new StringContent(requestJson, Encoding.UTF8, "application/json") }; httpRequest.Headers.Add("xi-api-key", GetApiKey()); var response = await Http.SendAsync(httpRequest); if (response.IsSuccessStatusCode) { var audioBytes = await response.Content.ReadAsByteArrayAsync(); var base64Audio = Convert.ToBase64String(audioBytes); var audioDataUrl = $"data:audio/mpeg;base64,{base64Audio}"; await JS.InvokeVoidAsync("playAudio", audioDataUrl); } else { // Handle error response var errorContent = await response.Content.ReadAsStringAsync(); Console.Error.WriteLine($"Error: {errorContent}"); } } }