Un client RESTful de synthèse vocale non officielle de onze laboratoires.
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.
Installez le package ElevenLabs-DotNet de NuGet. Voici comment via la ligne de commande:
Install-Package ElevenLabs - DotNet dotnet add package ElevenLabs-DotNet
Vous cherchez à utiliser les ElevenLabs dans le moteur Unity Game? Consultez notre package Unity sur OpenUpM:
Il existe 3 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" ) ) ; 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 ( 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 ( ElevenLabsAuthentication . LoadFromEnv ( ) ) ;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é.ElevenLabsClientSettings 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 ElevenLabsClientSettings ( 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 ValidateAuthentication . 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 ElevenLabsProxyStartup.CreateWebApplication , 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 auth = ElevenLabsAuthentication . LoadFromEnv ( ) ;
var client = new ElevenLabsClient ( auth ) ;
ElevenLabsProxyStartup . CreateWebApplication < AuthenticationFilter > ( args , client ) . 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.
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 ) ;
await File . WriteAllBytesAsync ( $ " { voiceClip . Id } .mp3" , voiceClip . ClipData . ToArray ( ) ) ; 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 ( ) ;
string fileName = "myfile.mp3" ;
using var outputFileStream = File . OpenWrite ( fileName ) ;
var request = new TextToSpeechRequest ( voice , text ) ;
var voiceClip = await api . TextToSpeechEndpoint . TextToSpeechAsync ( request ,
partialClipCallback : async ( partialClip ) =>
{
// Write the incoming data to the output file stream.
// Alternatively you can play this clip data directly.
await outputFileStream . WriteAsync ( partialClip . ClipData ) ;
} ) ;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 )
{
Console . WriteLine ( $ " { voice . OwnerId } | { voice . VoiceId } | { voice . Date } | { voice . Name } " ) ;
} Obtient une liste de toutes les voix disponibles à la disposition de votre compte.
var api = new ElevenLabsClient ( ) ;
var allVoices = await api . VoicesEndpoint . GetAllVoicesAsync ( ) ;
foreach ( var voice in allVoices )
{
Console . WriteLine ( $ " { 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 ( ) ;
Console . WriteLine ( $ "stability: { result . Stability } | similarity boost: { result . SimilarityBoost } " ) ; var api = new ElevenLabsClient ( ) ;
var voice = await api . VoicesEndpoint . GetVoiceAsync ( "voiceId" ) ;
Console . WriteLine ( $ " { 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 ) ) ;
Console . WriteLine ( $ "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 ) ;
Console . WriteLine ( $ "Was successful? { success } " ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . VoicesEndpoint . DeleteVoiceAsync ( voiceId ) ;
Console . WriteLine ( $ "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 ) ;
await File . WriteAllBytesAsync ( $ " { voiceClip . Id } .mp3" , voiceClip . ClipData . ToArray ( ) ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . VoicesEndpoint . DeleteVoiceSampleAsync ( voiceId , sampleId ) ;
Console . WriteLine ( $ "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" :
Console . WriteLine ( $ "Dubbing for { metadata . DubbingId } in progress... Expected Duration: { metadata . ExpectedDurationSeconds : 0.00 } seconds" ) ;
break ;
case "dubbed" :
Console . WriteLine ( $ "Dubbing for { metadata . DubbingId } complete in { metadata . TimeCompleted . TotalSeconds : 0.00 } seconds!" ) ;
break ;
default :
Console . WriteLine ( $ "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 fichier doublé comme un fichier en streaming.
Note
Les vidéos seront renvoyées au format MP4 et Audio seuls seront retournés en MP3.
var assetsDir = Path . GetFullPath ( "../../../Assets" ) ;
var dubbedPath = new FileInfo ( Path . Combine ( assetsDir , $ "online.dubbed. { request . TargetLanguage } .mp4" ) ) ;
{
await using var fs = File . Open ( dubbedPath . FullName , FileMode . Create ) ;
await foreach ( var chunk in ElevenLabsClient . DubbingEndpoint . GetDubbedFileAsync ( metadata . DubbingId , request . TargetLanguage ) )
{
await fs . WriteAsync ( chunk ) ;
}
} Renvoie la transcription pour le dub dans le format souhaité.
var assetsDir = Path . GetFullPath ( "../../../Assets" ) ;
var transcriptPath = new FileInfo ( Path . Combine ( assetsDir , $ "online.dubbed. { request . TargetLanguage } .srt" ) ) ;
{
var transcriptFile = await api . 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 ) )
{
Console . WriteLine ( $ " { 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 ) ;
await File . WriteAllBytesAsync ( $ " { voiceClip . Id } .mp3" , voiceClip . ClipData . ToArray ( ) ) ; 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 ( ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . HistoryEndpoint . DeleteHistoryItemAsync ( historyItem ) ;
Console . WriteLine ( $ "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 ( ) ;