Неофициальный одиннадцать лабораторий голосовой синтез Restful Client.
Я не связан с ElevenLabs, и требуется учетная запись с API -доступом.
Все авторские права, товарные знаки, логотипы и активы являются собственностью их соответствующих владельцев.
Установите пакет ElevenLabs-DotNet из Nuget. Вот как через командную строку:
Install-Package ElevenLabs - DotNet dotnet add package ElevenLabs-DotNet
Хотите использовать ElevenLabs в игровом двигателе Unity? Проверьте наш пакет Unity на OpenUpm:
Есть 3 способа обеспечить ваши ключи API, в порядке приоритета:
var api = new ElevenLabsClient ( "yourApiKey" ) ; Или создать объект ElevenLabsAuthentication вручную
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( "yourApiKey" ) ) ; Попытки загрузить клавиши API из файла конфигурации по умолчанию .elevenlabs в текущем каталоге, опционе, пройдя дерево каталога или в домашнем каталоге пользователя.
Чтобы создать файл конфигурации, создайте новый текстовый файл с именем .elevenlabs и содержащий строку:
{
"apiKey" : " yourApiKey " ,
}Вы также можете загрузить файл напрямую с помощью известного пути, вызывая статический метод в аутентификации:
var api = new ElevenLabsClient ( ElevenLabsAuthentication . LoadFromDirectory ( "your/path/to/.elevenlabs" ) ) ; ; Используйте переменные среды вашей системы. Укажите ключ API для использования.
ELEVEN_LABS_API_KEY для вашего ключа API. var api = new ElevenLabsClient ( ElevenLabsAuthentication . LoadFromEnv ( ) ) ;Использование пакетов ElevenLabs-Dotnet или com.rest.elevenlabs непосредственно в вашем переднем приложении может разоблачить ваши клавиши API и другую конфиденциальную информацию. Чтобы смягчить этот риск, рекомендуется создать промежуточный API, который делает запросы ElevenLabs от имени вашего приложения переднего интерфейса. Эта библиотека может быть использована как для конфигураций фронтального, так и посредника, обеспечивая безопасную связь с API ElevenLabs.
В примере переднего конца вам нужно будет безопасно аутентифицировать своих пользователей, используя ваш предпочтительный провайдер OAuth. После того, как пользователь будет аутентифицирован, обменяйте свой пользовательский токен аудитория с вашим ключом API на бэкэнде.
Следуйте этим шагам:
ElevenLabsAuthentication и пропустите пользовательский токен.ElevenLabsClientSettings и укажите домен, где находится ваш промежуточный API.auth и settings Constructor ElevenLabsClient , когда вы создаете экземпляр клиента.Вот пример того, как настроить переднюю часть:
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 ) ;Эта настройка позволяет вашему фронтальному приложению надежно общаться с вашей бэкэнд, которая будет использовать ElevenLabs-Dotnet-Proxy, который затем направляет запросы ElevenLabs API. Это гарантирует, что ваши клавиши API Elevenlabs и другая конфиденциальная информация остаются безопасными на протяжении всего процесса.
В этом примере мы демонстрируем, как настроить и использовать ElevenLabsProxyStartup в новом веб -приложении ASP.NET. Прокси -сервер будет обрабатывать аутентификацию и направлять запросы в API ElevenLabs, гарантируя, что ваши клавиши API и другая конфиденциальная информация оставались безопасными.
Install-Package ElevenLabs-DotNet-Proxydotnet add package ElevenLabs-DotNet-Proxy<PackageReference Include="ElevenLabs-DotNet-Proxy" />AbstractAuthenticationFilter и переопределяет метод ValidateAuthentication . Это будет реализовать IAuthenticationFilter , который вы будете использовать для проверки токена сеанса пользователя на ваш внутренний сервер.AuthenticationFilter Program.cs ElevenLabsProxyStartup.CreateWebApplicationElevenLabsAuthentication и ElevenLabsClientSettings , как обычно, с настройками API, ID или идентификатором Org или 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 ( ) ;
}
}После того, как вы настроили свой прокси -сервер, ваши конечные пользователи теперь могут сделать аутентифицированные запросы в ваш прокси -API, а не непосредственно в API ElevenLabs. Прокси -сервер будет обрабатывать аутентификацию и направлять запросы в API ElevenLabs, гарантируя, что ваши клавиши API и другая конфиденциальная информация оставались безопасными.
Преобразовать текст в речь.
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 ( ) ) ; Поток текст в речь.
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 ) ;
} ) ;Доступ к голосам, созданному либо пользователем, либо одиннадцатьюл.
Получает список общих голосов в публичной библиотеке голоса.
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 } " ) ;
} Получает список всех доступных голосов, доступных для вашей учетной записи.
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 } " ) ;
} Получает глобальные настройки голоса по умолчанию.
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 } " ) ; Отредактируйте настройки для определенного голоса.
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 } " ) ; Доступ к вашим образцам, созданным вами при клонировании голосов.
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 предоставили аудио или видеофайл на данный язык.
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 ;
}
} ) ) ; Возвращает метаданные о дублинном проекте, в том числе о том, находится ли он все еще в процессе или нет.
var api = new ElevenLabsClient ( ) ;
var metadata = api . await GetDubbingProjectMetadataAsync ( "dubbing - id");Возвращает дублированный файл в виде потокового файла.
Примечание
Видео будут возвращены в формате MP4, а Dubs только звуки будут возвращены в 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 ) ;
}
} Возвращает стенограмму для Dub в желаемом формате.
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 ) ;
} Удаляет проект Dubbing.
var api = new ElevenLabsClient ( ) ;
await api . DubbingEndpoint . DeleteDubbingProjectAsync ( "dubbing-id" ) ;API, который преобразует текст в звуки и использует самую продвинутую аудио -модель ИИ.
var api = new ElevenLabsClient ( ) ;
var request = new SoundGenerationRequest ( "Star Wars Light Saber parry" ) ;
var clip = await api . SoundGenerationEndpoint . GenerateSoundAsync ( request ) ;Доступ к вашим ранее синтезированным аудио -клипам, включая его метаданные.
Получите метаданные обо всех ваших сгенерированных аудио.
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 } " ) ;
} Получите информацию о конкретном элементе.
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 ( ) ) ; Загружает последние 100 исторических элементов или коллекцию указанных элементов.
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 } " ) ;Доступ к вашей пользовательской информации и статусу подписки.
Получает информацию о вашей учетной записи пользователя с ElevenLabs.
var api = new ElevenLabsClient ( ) ;
var userInfo = await api . UserEndpoint . GetUserInfoAsync ( ) ; Получает информацию о вашей подписке с ElevenLabs.
var api = new ElevenLabsClient ( ) ;
var subscriptionInfo = await api . UserEndpoint . GetSubscriptionInfoAsync ( ) ;