Ein nicht offizieller elfLabs-Sprachsynthese RESTful-Client für die Unity Game Engine.
Basierend auf elfLabs-dotnet
Ich bin nicht mit elf Labs verbunden und ein Konto mit API -Zugriff ist erforderlich.
Alle Urheberrechte, Marken, Logos und Vermögenswerte sind Eigentum ihrer jeweiligen Eigentümer.
Erfordert Einheit 2021.3 LTs oder höher.
Die empfohlene Installationsmethode ist der Unity Package Manager und OpenUpM.
Package Manager aus 
OpenUPMhttps://package.openupm.comcom.rest.elevenlabscom.utilitiesMy RegistriesElevenLabs -Paket hinzuhttps://github.com/RageAgainstThePixel/com.rest.elevenlabs.git#upmHinweis: Dieses Repo hat Abhängigkeiten von anderen Repositorys! Sie sind dafür verantwortlich, diese selbst hinzuzufügen.
Es gibt 4 Möglichkeiten, Ihre API -Schlüsseln in der Reihenfolge der Vorrang vorzunehmen:
var api = new ElevenLabsClient ( "yourApiKey" ) ; Oder ein ElevenLabsAuthentication manuell erstellen
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( "yourApiKey" ) ) ; Sie können den Schlüssel direkt in ein skriptierbares Objekt speichern, das sich im Ordner Assets/Resources befindet.
Sie können eine neue erstellen, indem Sie das Kontextmenü des Projektbereichs verwenden und ein neues ElevenLabsConfiguration -skriptierbares Objekt erstellen.

Versuche, API -Schlüssel aus einer Konfigurationsdatei .elevenlabs zu laden.
Um eine Konfigurationsdatei zu erstellen, erstellen Sie eine neue Textdatei mit dem Namen .elevenlabs und enthält die Zeile:
{
"apiKey" : " yourApiKey " ,
}Sie können die Datei auch direkt mit dem bekannten Pfad laden, indem Sie eine statische Methode in der Authentifizierung aufrufen:
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromDirectory ( "your/path/to/.elevenlabs" ) ) ; ; Verwenden Sie die Umgebungsvariablen Ihres Systems an, geben Sie einen API -Schlüssel an.
ELEVEN_LABS_API_KEY . var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromEnvironment ( ) ) ;Wenn Sie entweder die Elevenlabs-Dotnet oder die Pakete von Com.rest.Elevenlabs direkt in Ihrer Front-End-App enthüllen, können Sie Ihre API-Schlüssel und andere vertrauliche Informationen enthüllen. Um dieses Risiko zu mildern, wird empfohlen, eine Zwischen-API einzurichten, die im Namen Ihrer Front-End-App an elfLabs anfragen. Diese Bibliothek kann sowohl für Front-End- als auch für Vermittler-Hostkonfigurationen verwendet werden, um eine sichere Kommunikation mit der ElevenLabs-API zu gewährleisten.
Im Vorderseite müssen Sie Ihre Benutzer mit Ihrem bevorzugten OAuth -Anbieter sicher authentifizieren. Sobald der Benutzer authentifiziert ist, tauschen Sie Ihr benutzerdefiniertes Author -Token mit Ihrem API -Schlüssel im Backend aus.
Folgen Sie folgenden Schritten:
ElevenLabsAuthentication -Objekt und passieren Sie im benutzerdefinierten Token.ElevenLabsSettings -Objekt und geben Sie die Domäne an, in der sich Ihre Zwischen -API befindet.auth und settings an den ElevenLabsClient -Konstruktor, wenn Sie die Client -Instanz erstellen.Hier ist ein Beispiel für die Einrichtung des vorderen Endes:
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 ) ;Mit diesem Setup kann Ihre Front-End-Anwendung sicher mit Ihrem Backend kommunizieren, das die elfLabs-dotnet-Proxy verwendet, die dann Anfragen an die ElevenLabs-API weiterleitet. Dies stellt sicher, dass Ihre elflabs -API -Schlüssel und andere empfindliche Informationen während des gesamten Prozesses sicher bleiben.
In diesem Beispiel zeigen wir, wie ElevenLabsProxyStartup in einer neuen ASP.NET -Kern -Web -App eingerichtet und verwendet werden. Der Proxy -Server behandelt die Authentifizierung und die Anfragen an die ElevenLabs -API, um sicherzustellen, dass Ihre API -Schlüssel und andere sensible Informationen sicher bleiben.
Install-Package ElevenLabs-DotNet-Proxydotnet add package ElevenLabs-DotNet-Proxy<PackageReference Include="ElevenLabs-DotNet-Proxy" />AbstractAuthenticationFilter erbt und die ValidateAuthenticationAsync -Methode überschreibt. Dadurch wird der IAuthenticationFilter implementiert, mit dem Sie das Benutzersitzungstoken anhand Ihres internen Servers überprüfen.Program.cs eine neue Proxy -Webanwendung, indem Sie ElevenLabsProxyStartup.CreateDefaultHost -Methode anrufen und Ihre benutzerdefinierte AuthenticationFilter als Typargument übergeben.ElevenLabsAuthentication und ElevenLabsClientSettings , wie Sie es normalerweise mit Ihren API -Tasten, Org -IDs oder Azure -Einstellungen tun. 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 ( ) ;
}
}Sobald Sie Ihren Proxy -Server eingerichtet haben, können Ihre Endbenutzer jetzt authentifizierte Anfragen an Ihre Proxy -API anstelle der ElevenLabs -API stellen. Der Proxy -Server behandelt die Authentifizierung und die Anfragen an die ElevenLabs -API, um sicherzustellen, dass Ihre API -Schlüssel und andere sensible Informationen sicher bleiben.
Sie können die gleichen Aktionen von der ElevenLabs -Website im Editor mit dem ElevenLabs Dashboard ausführen!
Window/Dashboards/ElevenLabs

Genau wie auf der elfLabs -Website können Sie neue Audioclips mit verfügbaren Stimmen synthetisieren. Dieses Tool macht es noch praktischer, da die Clips automatisch heruntergeladen und in Ihr Projekt importiert werden und für Sie bereit sind, sie zu verwenden!

Genau wie auf der elfLabs -Website können Sie alle Ihre Stimmen direkt im Editor verwalten.

Das Auswählen von Create New Voice zeigt ein Popup an, in dem Sie mit elf Labs generativen Modellen völlig neue Stimmen entwerfen können.

Darüber hinaus können Sie auch eine Stimme aus Beispielaufnahmen klonen.

Sie haben auch Zugriff auf die vollständige Liste aller generierten Muster, die zum Download bereit sind.

Text in Sprache konvertieren.
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 ) ;Hinweis: Wenn Sie den Sprachclip in Ihrem Projekt speichern möchten, müssen Sie ihn aus dem zwischengespeicherten Pfad in den angegebenen Ort in Ihrem Projekt kopieren:
voiceClip . CopyIntoProject ( editorDownloadDirectory ) ; Text in die Sprache streamen.
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 ) ;
} ) ;Zugriff auf Stimmen, die entweder vom Benutzer oder elfLabs erstellt wurden.
Erhält eine Liste gemeinsamer Stimmen in der öffentlichen Sprachbibliothek.
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 } " ) ;
} Erhält eine Liste aller verfügbaren Stimmen.
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 } " ) ;
} Ruft die globalen Standard -Spracheinstellungen ab.
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 } " ) ; Bearbeiten Sie die Einstellungen für eine bestimmte Stimme.
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 } " ) ; Zugriff auf Ihre Samples, die von Ihnen erstellt wurden, wenn Sie Stimmen klonen.
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 stellten Audio- oder Videodatei in eine bestimmte Sprache zur Verfügung.
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 ;
}
} ) ) ; Gibt Metadaten über ein Synchronisationsprojekt zurück, einschließlich der Frage, ob es noch im Gange ist oder nicht.
var api = new ElevenLabsClient ( ) ;
var metadata = api . await GetDubbingProjectMetadataAsync ( "dubbing - id");Gibt den heruntergeladenen synchronisierten Dateipfad zurück.
Wichtig
Videos werden im MP4 -Format zurückgegeben und Audio Nur Dubs werden in MP3 zurückgegeben.
var dubbedClipPath = await ElevenLabsClient . DubbingEndpoint . GetDubbedFileAsync ( metadata . DubbingId , request . TargetLanguage ) ;
var dubbedClip = await Rest . DownloadAudioClipAsync ( $ "file:// { dubbedClipPath } " , AudioType . MPEG ) ;
audioSource . PlayOneShot ( dubbedClip ) ; Gibt das Transkript für den Dub im gewünschten Format zurück.
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 ) ; Löscht ein Synchronisationsprojekt.
var api = new ElevenLabsClient ( ) ;
await api . DubbingEndpoint . DeleteDubbingProjectAsync ( "dubbing-id" ) ;API, die Text in Sounds umwandelt und das fortschrittlichste AI -Audio -Modell aller Zeiten verwendet.
var api = new ElevenLabsClient ( ) ;
var request = new SoundGenerationRequest ( "Star Wars Light Saber parry" ) ;
var clip = await api . SoundGenerationEndpoint . GenerateSoundAsync ( request ) ;Zugriff auf Ihre zuvor synthetisierten Audioclips einschließlich seiner Metadaten.
Holen Sie sich Metadaten über alle Ihre generierten Audioen.
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 } " ) ;
} Informationen zu einem bestimmten Artikel erhalten.
var api = new ElevenLabsClient ( ) ;
var historyItem = await api . HistoryEndpoint . GetHistoryItemAsync ( voiceClip . Id ) ; var api = new ElevenLabsClient ( ) ;
var voiceClip = await api . HistoryEndpoint . DownloadHistoryAudioAsync ( historyItem ) ; Laden Sie die letzten 100 History -Elemente oder die Sammlung bestimmter Elemente herunter.
var api = new ElevenLabsClient ( ) ;
var voiceClips = await api . HistoryEndpoint . DownloadHistoryItemsAsync ( ) ;Hinweis: Um die Clips direkt in Ihr Projekt zu kopieren, können Sie zusätzlich anrufen:
VoiceClipUtilities . CopyIntoProject ( editorDownloadDirectory , downloadItems . ToArray ( ) ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . HistoryEndpoint . DeleteHistoryItemAsync ( historyItem ) ;
Debug . Log ( $ "Was successful? { success } " ) ;Zugriff auf Ihre Benutzerinformationen und Abonnementstatus.
Erhält Informationen über Ihr Benutzerkonto mit elfLabs.
var api = new ElevenLabsClient ( ) ;
var userInfo = await api . UserEndpoint . GetUserInfoAsync ( ) ; Erhält Informationen über Ihr Abonnement mit elfLabs.
var api = new ElevenLabsClient ( ) ;
var subscriptionInfo = await api . UserEndpoint . GetSubscriptionInfoAsync ( ) ;