Get Voice ID
using System;
using System.Net.Http;
using System.Threading.Tasks;
using UnityEngine;
using Newtonsoft.Json.Linq; // Make sure you add the Newtonsoft.Json package via Unity Package Manager
public class VoiceFetcher : MonoBehaviour
{
private const string XiApiKey = "<xi-api-key>"; // Your API key
// URL for the API endpoint
private static readonly string Url = "https://api.elevenlabs.io/v1/voices";
// Start is called before the first frame update
private async void Start()
{
await FetchAndPrintVoices();
}
private static async Task FetchAndPrintVoices()
{
using (var client = new HttpClient())
{
// Set up headers for the API request, including the API key for authentication
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("xi-api-key", XiApiKey);
client.DefaultRequestHeaders.Add("Content-Type", "application/json");
try
{
// Send GET request to the API endpoint
var response = await client.GetAsync(Url);
// Check if the request was successful
if (response.IsSuccessStatusCode)
{
// Read and parse the JSON response
var jsonResponse = await response.Content.ReadAsStringAsync();
var data = JObject.Parse(jsonResponse);
// Loop through each voice and print the name and voice_id
foreach (var voice in data["voices"])
{
string name = voice["name"].ToString();
string voiceId = voice["voice_id"].ToString();
Debug.Log($"{name}; {voiceId}");
}
}
else
{
// Print error message if the request was not successful
Debug.LogError($"Error fetching voices: {await response.Content.ReadAsStringAsync()}");
}
}
catch (Exception e)
{
// Print any exceptions that occur
Debug.LogError($"Exception occurred: {e.Message}");
}
}
}
}
Text to speech
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using UnityEngine;
public class TextToSpeech : MonoBehaviour
{
// Constants for the script
private const int ChunkSize = 1024; // Size of chunks to read/write at a time
private const string XiApiKey = "<xi-api-key>"; // Your API key for authentication
private const string VoiceId = "<voice-id>"; // ID of the voice model to use
private const string TextToSpeak = "<text>"; // Text you want to convert to speech
private const string OutputPath = "output.mp3"; // Path to save the output audio file
// URL for the Text-to-Speech API request
private static readonly string TtsUrl = $"https://api.elevenlabs.io/v1/text-to-speech/{VoiceId}/stream";
// Start is called before the first frame update
private async void Start()
{
await FetchAndSaveAudio();
}
private static async Task FetchAndSaveAudio()
{
using (var client = new HttpClient())
{
// Set up headers for the API request, including the API key for authentication
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("xi-api-key", XiApiKey);
// Set up the data payload for the API request, including the text and voice settings
var data = new
{
text = TextToSpeak,
model_id = "eleven_multilingual_v2",
voice_settings = new
{
stability = 0.5,
similarity_boost = 0.8,
style = 0.0,
use_speaker_boost = true
}
};
// Serialize the data payload to JSON
var content = new StringContent(JsonUtility.ToJson(data), System.Text.Encoding.UTF8, "application/json");
// Make the POST request to the TTS API with headers and data, enabling streaming response
using (var response = await client.PostAsync(TtsUrl, content, HttpCompletionOption.ResponseHeadersRead))
{
if (response.IsSuccessStatusCode)
{
// Open the output file in write-binary mode
using (var fileStream = new FileStream(OutputPath, FileMode.Create, FileAccess.Write, FileShare.None))
{
// Read the response in chunks and write to the file
using (var responseStream = await response.Content.ReadAsStreamAsync())
{
var buffer = new byte[ChunkSize];
int bytesRead;
while ((bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
fileStream.Write(buffer, 0, bytesRead);
}
}
}
// Inform the user of success
Debug.Log("Audio stream saved successfully.");
}
else
{
// Print the error message if the request was not successful
Debug.LogError(await response.Content.ReadAsStringAsync());
}
}
}
}
}
Top comments (0)