Un client RESTful de synthèse vocale non officielle de la Synthèse pour le moteur Unity Game.
Basé sur ElevenLabs-Dotnet
Je ne suis pas affilié à ElevenLabs et un compte avec un accès API est requis.
Tous les droits d'auteur, marques, logos et actifs sont la propriété de leurs propriétaires respectifs.
Nécessite Unity 2021.3 LTS ou plus.
La méthode d'installation recommandée est celle du gestionnaire de package Unity et OpenUpM.
Package Manager 
OpenUPMhttps://package.openupm.comcom.rest.elevenlabscom.utilitiesMy RegistriesElevenLabshttps://github.com/RageAgainstThePixel/com.rest.elevenlabs.git#upmRemarque: ce dépôt a des dépendances sur d'autres référentiels! Vous êtes responsable de les ajouter par vous-même.
Il existe 4 façons de fournir vos clés API, par ordre de priorité:
var api = new ElevenLabsClient ( "yourApiKey" ) ; Ou créez manuellement un objet ElevenLabsAuthentication
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( "yourApiKey" ) ) ; Vous pouvez enregistrer la clé directement dans un objet scriptable situé dans le dossier Assets/Resources .
Vous pouvez en créer un nouveau en utilisant le menu contextuel du volet de projet et en créant un nouvel objet scriptable ElevenLabsConfiguration .

Tente de charger les touches API à partir d'un fichier de configuration, par défaut .elevenlabs dans le répertoire actuel, traversant éventuellement l'arborescence du répertoire ou dans le répertoire domestique de l'utilisateur.
Pour créer un fichier de configuration, créez un nouveau fichier texte nommé .elevenlabs et contenant la ligne:
{
"apiKey" : " yourApiKey " ,
}Vous pouvez également charger le fichier directement avec le chemin connu en appelant une méthode statique dans l'authentification:
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromDirectory ( "your/path/to/.elevenlabs" ) ) ; ; Utilisez les variables d'environnement de votre système Spécifiez une clé API à utiliser.
ELEVEN_LABS_API_KEY pour votre clé API. var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromEnvironment ( ) ) ;L'utilisation des packages ElevenLabs-Dotnet ou com.Rest.ElevenLabs directement dans votre application frontale peut exposer vos clés API et autres informations sensibles. Pour atténuer ce risque, il est recommandé de créer une API intermédiaire qui fait des demandes à ElevenLabs au nom de votre application frontale. Cette bibliothèque peut être utilisée pour les configurations de l'hôte frontal et intermédiaire, assurant une communication sécurisée avec l'API ElevenLabs.
Dans l'exemple frontal, vous devrez authentifier en toute sécurité vos utilisateurs à l'aide de votre fournisseur OAuth préféré. Une fois que l'utilisateur est authentifié, échangez votre jeton Auth personnalisé avec votre clé API sur le backend.
Suivez ces étapes:
ElevenLabsAuthentication et passez dans le jeton personnalisé.ElevenLabsSettings et spécifiez le domaine où se trouve votre API intermédiaire.auth and settings au constructeur ElevenLabsClient lorsque vous créez l'instance client.Voici un exemple de la configuration de l'avant:
var authToken = await LoginAsync ( ) ;
var auth = new ElevenLabsAuthentication ( authToken ) ;
var settings = new ElevenLabsSettings ( domain : "api.your-custom-domain.com" ) ;
var api = new ElevenLabsClient ( auth , settings ) ;Cette configuration permet à votre application frontale de communiquer en toute sécurité avec votre backend qui utilisera l'ElevenLabs-Dotnet-Proxy, qui transmet ensuite les demandes à l'API ElevenLabs. Cela garantit que vos clés API ElevenLabs et d'autres informations sensibles restent sécurisées tout au long du processus.
Dans cet exemple, nous montrons comment configurer et utiliser ElevenLabsProxyStartup dans une nouvelle application Web ASP.NET Core. Le serveur proxy s'occupera de l'authentification et des demandes de transfert à l'API ElevenLabs, garantissant que vos clés API et d'autres informations sensibles restent sécurisées.
Install-Package ElevenLabs-DotNet-Proxydotnet add package ElevenLabs-DotNet-Proxy<PackageReference Include="ElevenLabs-DotNet-Proxy" />AbstractAuthenticationFilter et remplacez la méthode ValidateAuthenticationAsync . Cela implémentera le IAuthenticationFilter que vous utiliserez pour vérifier le jeton de session utilisateur par rapport à votre serveur interne.Program.cs , créez une nouvelle application Web proxy en appelant la méthode ElevenLabsProxyStartup.CreateDefaultHost , en passant votre AuthenticationFilter personnalisé en tant qu'argument de type.ElevenLabsAuthentication et ElevenLabsClientSettings comme vous le feriez normalement avec vos clés API, votre ID org ou vos paramètres Azure. public partial class Program
{
private class AuthenticationFilter : AbstractAuthenticationFilter
{
public override async Task ValidateAuthenticationAsync ( IHeaderDictionary request )
{
await Task . CompletedTask ; // remote resource call
// You will need to implement your own class to properly test
// custom issued tokens you've setup for your end users.
if ( ! request [ "xi-api-key" ] . ToString ( ) . Contains ( TestUserToken ) )
{
throw new AuthenticationException ( "User is not authorized" ) ;
}
}
}
public static void Main ( string [ ] args )
{
var client = new ElevenLabsClient ( ) ;
var proxy = ElevenLabsProxyStartup . CreateDefaultHost < AuthenticationFilter > ( args , client ) ;
proxy . Run ( ) ;
}
}Une fois que vous avez configuré votre serveur proxy, vos utilisateurs finaux peuvent désormais faire des demandes authentifiées à votre API proxy plutôt que directement à l'API ElevenLabs. Le serveur proxy s'occupera de l'authentification et des demandes de transfert à l'API ElevenLabs, garantissant que vos clés API et d'autres informations sensibles restent sécurisées.
Vous pouvez effectuer toutes les mêmes actions du site Web ElevenLabs, dans l'éditeur à l'aide du tableau de bord ElevenLabs!
Window/Dashboards/ElevenLabs

Tout comme sur le site Web ElevenLabs, vous pouvez synthétiser de nouveaux clips audio à l'aide de voix disponibles. Cet outil le rend encore plus pratique car les clips sont automatiquement téléchargés et importés dans votre projet, prêts à utiliser!

Tout comme sur le site Web ElevenLabs, vous pouvez gérer toutes vos voix directement dans l'éditeur.

La sélection Create New Voice affichera une fenêtre contextuelle où vous pouvez concevoir des voix entièrement nouvelles à l'aide de modèles génératifs ElevenLabs.

De plus, vous êtes également en mesure de cloner une voix à partir d'échantillons d'enregistrements.

Vous avez également accès à la liste complète de tous vos échantillons générés, prêts à télécharger.

Convertir le texte en discours.
var api = new ElevenLabsClient ( ) ;
var text = "The quick brown fox jumps over the lazy dog." ;
var voice = ( await api . VoicesEndpoint . GetAllVoicesAsync ( ) ) . FirstOrDefault ( ) ;
var request = new TextToSpeechRequest ( voice , text ) ;
var voiceClip = await api . TextToSpeechEndpoint . TextToSpeechAsync ( request ) ;
audioSource . PlayOneShot ( voiceClip . AudioClip ) ;Remarque: Si vous souhaitez enregistrer le clip vocal dans votre projet, vous devrez le copier à partir du chemin en cache vers l'emplacement spécifié dans votre projet:
voiceClip . CopyIntoProject ( editorDownloadDirectory ) ; Diffuser du texte vers la parole.
var api = new ElevenLabsClient ( ) ;
var text = "The quick brown fox jumps over the lazy dog." ;
var voice = ( await api . VoicesEndpoint . GetAllVoicesAsync ( ) ) . FirstOrDefault ( ) ;
var partialClips = new Queue < VoiceClip > ( ) ;
var request = new TextToSpeechRequest ( voice , message , model : Model . EnglishTurboV2 , outputFormat : OutputFormat . PCM_44100 ) ;
var voiceClip = await api . TextToSpeechEndpoint . StreamTextToSpeechAsync ( request , partialClip =>
{
// Note: check demo scene for best practices
// on how to handle playback with OnAudioFilterRead
partialClips . Enqueue ( partialClip ) ;
} ) ;Accès à des voix créées par l'utilisateur ou ElevenLabs.
Obtient une liste de voix partagées dans la bibliothèque de voix publique.
var api = new ElevenLabsClient ( ) ;
var results = await ElevenLabsClient . SharedVoicesEndpoint . GetSharedVoicesAsync ( ) ;
foreach ( var voice in results . Voices )
{
Debug . Log ( $ " { voice . OwnerId } | { voice . VoiceId } | { voice . Date } | { voice . Name } " ) ;
} Obtient une liste de toutes les voix disponibles.
var api = new ElevenLabsClient ( ) ;
var allVoices = await api . VoicesEndpoint . GetAllVoicesAsync ( ) ;
foreach ( var voice in allVoices )
{
Debug . Log ( $ " { voice . Id } | { voice . Name } | similarity boost: { voice . Settings ? . SimilarityBoost } | stability: { voice . Settings ? . Stability } " ) ;
} Obtient les paramètres vocaux par défaut globaux.
var api = new ElevenLabsClient ( ) ;
var result = await api . VoicesEndpoint . GetDefaultVoiceSettingsAsync ( ) ;
Debug . Log ( $ "stability: { result . Stability } | similarity boost: { result . SimilarityBoost } " ) ; var api = new ElevenLabsClient ( ) ;
var voice = await api . VoicesEndpoint . GetVoiceAsync ( "voiceId" ) ;
Debug . Log ( $ " { voice . Id } | { voice . Name } | { voice . PreviewUrl } " ) ; Modifiez les paramètres d'une voix spécifique.
var api = new ElevenLabsClient ( ) ;
var success = await api . VoicesEndpoint . EditVoiceSettingsAsync ( voice , new VoiceSettings ( 0.7f , 0.7f ) ) ;
Debug . Log ( $ "Was successful? { success } " ) ; var api = new ElevenLabsClient ( ) ;
var labels = new Dictionary < string , string >
{
{ "accent" , "american" }
} ;
var audioSamplePaths = new List < string > ( ) ;
var voice = await api . VoicesEndpoint . AddVoiceAsync ( "Voice Name" , audioSamplePaths , labels ) ; var api = new ElevenLabsClient ( ) ;
var labels = new Dictionary < string , string >
{
{ "age" , "young" }
} ;
var audioSamplePaths = new List < string > ( ) ;
var success = await api . VoicesEndpoint . EditVoiceAsync ( voice , audioSamplePaths , labels ) ;
Debug . Log ( $ "Was successful? { success } " ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . VoicesEndpoint . DeleteVoiceAsync ( voiceId ) ;
Debug . Log ( $ "Was successful? { success } " ) ; Accès à vos échantillons, créé par vous lors du clonage des voix.
var api = new ElevenLabsClient ( ) ;
var voiceClip = await api . VoicesEndpoint . DownloadVoiceSampleAsync ( voice , sample ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . VoicesEndpoint . DeleteVoiceSampleAsync ( voiceId , sampleId ) ;
Debug . Log ( $ "Was successful? { success } " ) ;Dubs a fourni audio ou fichier vidéo dans la langue donnée.
var api = new ElevenLabsClient ( ) ;
// from URI
var request = new DubbingRequest ( new Uri ( "https://youtu.be/Zo5-rhYOlNk" ) , "ja" , "en" , 1 , true ) ;
// from file
var request = new DubbingRequest ( filePath , "es" , "en" , 1 ) ;
var metadata = await api . DubbingEndpoint . DubAsync ( request , progress : new Progress < DubbingProjectMetadata > ( metadata =>
{
switch ( metadata . Status )
{
case "dubbing" :
Debug . Log ( $ "Dubbing for { metadata . DubbingId } in progress... Expected Duration: { metadata . ExpectedDurationSeconds : 0.00 } seconds" ) ;
break ;
case "dubbed" :
Debug . Log ( $ "Dubbing for { metadata . DubbingId } complete in { metadata . TimeCompleted . TotalSeconds : 0.00 } seconds!" ) ;
break ;
default :
Debug . Log ( $ "Status: { metadata . Status } " ) ;
break ;
}
} ) ) ; Renvoie des métadonnées sur un projet de doublage, y compris s'il est toujours en cours ou non.
var api = new ElevenLabsClient ( ) ;
var metadata = api . await GetDubbingProjectMetadataAsync ( "dubbing - id");Renvoie le chemin du fichier doublé téléchargé.
Important
Les vidéos seront renvoyées au format MP4 et Audio seuls seront retournés en MP3.
var dubbedClipPath = await ElevenLabsClient . DubbingEndpoint . GetDubbedFileAsync ( metadata . DubbingId , request . TargetLanguage ) ;
var dubbedClip = await Rest . DownloadAudioClipAsync ( $ "file:// { dubbedClipPath } " , AudioType . MPEG ) ;
audioSource . PlayOneShot ( dubbedClip ) ; Renvoie la transcription pour le dub dans le format souhaité.
var srcFile = new FileInfo ( audioPath ) ;
var transcriptPath = new FileInfo ( $ " { srcFile . FullName } .dubbed. { request . TargetLanguage } .srt" ) ;
var transcriptFile = await ElevenLabsClient . DubbingEndpoint . GetTranscriptForDubAsync ( metadata . DubbingId , request . TargetLanguage ) ;
await File . WriteAllTextAsync ( transcriptPath . FullName , transcriptFile ) ; Supprime un projet de doublage.
var api = new ElevenLabsClient ( ) ;
await api . DubbingEndpoint . DeleteDubbingProjectAsync ( "dubbing-id" ) ;API qui convertit le texte en sons et utilise le modèle audio AI le plus avancé de tous les temps.
var api = new ElevenLabsClient ( ) ;
var request = new SoundGenerationRequest ( "Star Wars Light Saber parry" ) ;
var clip = await api . SoundGenerationEndpoint . GenerateSoundAsync ( request ) ;Accès à vos clips audio précédemment synthétisés, y compris ses métadonnées.
Obtenez des métadonnées sur tout votre audio généré.
var api = new ElevenLabsClient ( ) ;
var historyItems = await api . HistoryEndpoint . GetHistoryAsync ( ) ;
foreach ( var item in historyItems . OrderBy ( historyItem => historyItem . Date ) )
{
Debug . Log ( $ " { item . State } { item . Date } | { item . Id } | { item . Text . Length } | { item . Text } " ) ;
} Obtenez des informations sur un élément spécifique.
var api = new ElevenLabsClient ( ) ;
var historyItem = await api . HistoryEndpoint . GetHistoryItemAsync ( voiceClip . Id ) ; var api = new ElevenLabsClient ( ) ;
var voiceClip = await api . HistoryEndpoint . DownloadHistoryAudioAsync ( historyItem ) ; Télécharge les 100 derniers éléments d'histoire ou la collection d'articles spécifiés.
var api = new ElevenLabsClient ( ) ;
var voiceClips = await api . HistoryEndpoint . DownloadHistoryItemsAsync ( ) ;Remarque: Pour copier les clips directement dans votre projet, vous pouvez également appeler:
VoiceClipUtilities . CopyIntoProject ( editorDownloadDirectory , downloadItems . ToArray ( ) ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . HistoryEndpoint . DeleteHistoryItemAsync ( historyItem ) ;
Debug . Log ( $ "Was successful? { success } " ) ;Accès à votre information utilisateur et à l'état d'abonnement.
Obtient des informations sur votre compte d'utilisateur avec ElevenLabs.
var api = new ElevenLabsClient ( ) ;
var userInfo = await api . UserEndpoint . GetUserInfoAsync ( ) ; Obtient des informations sur votre abonnement avec ElevenLabs.
var api = new ElevenLabsClient ( ) ;
var subscriptionInfo = await api . UserEndpoint . GetSubscriptionInfoAsync ( ) ;