Unity 게임 엔진을위한 비공식 elevenlabs 음성 합성 레인지 클라이언트.
elevenlabs-dotnet을 기반으로합니다
ElevenLabs와 제휴하지 않으며 API 액세스가 필요한 계정이 필요합니다.
모든 저작권, 상표, 로고 및 자산은 해당 소유자의 자산입니다.
Unity 2021.3 lts 이상이 필요합니다.
권장 설치 방법은 Unity Package Manager 및 OpenUPM입니다.
Package Manager 선택하십시오 
OpenUPMhttps://package.openupm.comcom.rest.elevenlabscom.utilitiesMy Registries 로 변경하십시오ElevenLabs 패키지를 추가하십시오https://github.com/RageAgainstThePixel/com.rest.elevenlabs.git#upm 에서 패키지를 추가하십시오참고 :이 repo는 다른 저장소에 의존적입니다! 귀하는 직접 추가 할 책임이 있습니다.
우선 순위로 API 키를 제공하는 4 가지 방법이 있습니다.
var api = new ElevenLabsClient ( "yourApiKey" ) ; 또는 수동으로 ElevenLabsAuthentication 객체를 만듭니다
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( "yourApiKey" ) ) ; 키를 Assets/Resources 폴더에있는 스크립트 가능한 객체에 직접 저장할 수 있습니다.
프로젝트 창의 컨텍스트 메뉴를 사용하여 새로운 ElevenLabsConfiguration 스크립트 가능한 객체를 만들어 새 것을 만들 수 있습니다.

구성 파일에서 기본적으로 현재 디렉토리의 .elevenlabs 에서 API 키를로드하려고 시도하여 디렉토리 트리 또는 사용자의 홈 디렉토리에서 선택적으로 전환합니다.
구성 파일을 만들려면 .elevenlabs 라는 새 텍스트 파일을 작성하고 라인을 포함하십시오.
{
"apiKey" : " yourApiKey " ,
}인증에서 정적 메소드를 호출하여 알려진 경로로 파일을 직접로드 할 수도 있습니다.
var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromDirectory ( "your/path/to/.elevenlabs" ) ) ; ; 시스템의 환경 변수를 사용하여 사용할 API 키를 지정하십시오.
ELEVEN_LABS_API_KEY 사용하십시오. var api = new ElevenLabsClient ( new ElevenLabsAuthentication ( ) . LoadFromEnvironment ( ) ) ;프론트 엔드 앱에서 직접 ElevenLabs-Dotnet 또는 Com.Rest.elevenlabs 패키지를 사용하면 API 키 및 기타 민감한 정보를 노출시킬 수 있습니다. 이 위험을 완화하려면 프론트 엔드 앱을 대신하여 11 번 랩을 요청하는 중간 API를 설정하는 것이 좋습니다. 이 라이브러리는 프론트 엔드 및 중개 호스트 구성 모두에 활용하여 ElevenLabs API와의 안전한 통신을 보장 할 수 있습니다.
프론트 엔드 예에서는 선호하는 OAUTH 제공 업체를 사용하여 사용자를 안전하게 인증해야합니다. 사용자가 인증되면 Backend에서 API 키로 사용자 정의 인증 토큰을 교환하십시오.
다음 단계를 따르십시오.
ElevenLabsAuthentication 객체를 만들고 사용자 정의 토큰을 통과하십시오.ElevenLabsSettings 객체를 만들고 중간 API가있는 도메인을 지정하십시오.auth 및 settings 객체를 ElevenLabsClient 생성자로 전달합니다.다음은 프론트 엔드를 설정하는 방법의 예입니다.
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 ) ;이 설정을 사용하면 프론트 엔드 애플리케이션이 엘레 랩스-도트 넷-프로스를 사용하는 백엔드와 안전하게 통신 할 수 있으며,이를 통해 eLEVENLABS API에 요청을 전달합니다. 이를 통해 ElevenLabs API 키 및 기타 민감한 정보가 프로세스 전반에 걸쳐 안전하게 유지되도록합니다.
이 예에서는 새로운 ASP.NET Core Web 앱에서 ElevenLabsProxyStartup 설정하고 사용하는 방법을 보여줍니다. 프록시 서버는 ElevenLabs API에 대한 인증 및 전진 요청을 처리하여 API 키 및 기타 민감한 정보가 안전하게 유지되도록합니다.
Install-Package ElevenLabs-DotNet-Proxydotnet add package ElevenLabs-DotNet-Proxy<PackageReference Include="ElevenLabs-DotNet-Proxy" /> 편집AbstractAuthenticationFilter 에서 상속되는 새 클래스를 작성하고 ValidateAuthenticationAsync 메소드를 무시하십시오. 이렇게하면 내부 서버에 대한 사용자 세션 토큰을 확인하는 데 사용할 IAuthenticationFilter 구현됩니다.Program.cs 에서는 ElevenLabsProxyStartup.CreateDefaultHost 메서드를 호출하여 사용자 정의 AuthenticationFilter 유형 인수로 전달하여 새로운 프록시 웹 애플리케이션을 만듭니다.ElevenLabsAuthentication 및 ElevenLabsClientSettings 만듭니다. 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 ( ) ;
}
}프록시 서버를 설정 한 후에는 최종 사용자가 ElevenLabs API 직접 대신 프록시 API에 인증 된 요청을 할 수 있습니다. 프록시 서버는 ElevenLabs API에 대한 인증 및 전진 요청을 처리하여 API 키 및 기타 민감한 정보가 안전하게 유지되도록합니다.
ElevenLabs 대시 보드를 사용하여 편집기에서 ElevenLabs 웹 사이트에서 동일한 동일한 작업을 모두 수행 할 수 있습니다!
Window/Dashboards/ElevenLabs

ElevenLabs 웹 사이트에서와 마찬가지로 사용 가능한 음성을 사용하여 새로운 오디오 클립을 종합 할 수 있습니다. 이 도구는 클립을 자동으로 다운로드하여 프로젝트에 가져 오면 사용할 수 있으므로 더욱 편리합니다.

ElevenLabs 웹 사이트에서와 마찬가지로 편집자에서 모든 목소리를 직접 관리 할 수 있습니다.

Create New Voice 선택하면 elevenlabs 생성 모델을 사용하여 완전히 새로운 음성을 설계 할 수있는 팝업이 표시됩니다.

또한 샘플 녹음에서 음성을 복제 할 수도 있습니다.

또한 다운로드 할 준비가 된 모든 생성 된 샘플의 전체 목록에 액세스 할 수 있습니다.

텍스트를 음성으로 변환합니다.
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 ) ;참고 : 음성 클립을 프로젝트에 저장하려면 캐시 된 경로에서 프로젝트의 지정된 위치로 복사해야합니다.
voiceClip . CopyIntoProject ( editorDownloadDirectory ) ; 연설에 스트리밍 텍스트.
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 ) ;
} ) ;사용자 또는 엘레브 라브가 만든 목소리에 대한 액세스.
공개 음성 라이브러리에서 공유 음성 목록을 얻습니다.
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 } " ) ;
} 사용 가능한 모든 목소리의 목록을 얻습니다.
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 } " ) ;
} 글로벌 기본 음성 설정을 가져옵니다.
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 } " ) ; 특정 음성에 대한 설정을 편집하십시오.
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 } " ) ; 목소리를 복제 할 때 만들어진 샘플에 대한 액세스.
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 } " ) ;더빙은 오디오 또는 비디오 파일을 주어진 언어로 제공했습니다.
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 ;
}
} ) ) ; 아직 진행 중인지 아닌지를 포함하여 더빙 프로젝트에 대한 메타 데이터를 반환합니다.
var api = new ElevenLabsClient ( ) ;
var metadata = api . await GetDubbingProjectMetadataAsync ( "dubbing - id");Dubed 파일 경로를 다운로드 한 반환.
중요한
비디오는 MP4 형식으로 반환되며 오디오 DUBS 만 MP3로 반환됩니다.
var dubbedClipPath = await ElevenLabsClient . DubbingEndpoint . GetDubbedFileAsync ( metadata . DubbingId , request . TargetLanguage ) ;
var dubbedClip = await Rest . DownloadAudioClipAsync ( $ "file:// { dubbedClipPath } " , AudioType . MPEG ) ;
audioSource . PlayOneShot ( dubbedClip ) ; DUB의 전사 스크립트를 원하는 형식으로 반환합니다.
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 ) ; 더빙 프로젝트를 삭제합니다.
var api = new ElevenLabsClient ( ) ;
await api . DubbingEndpoint . DeleteDubbingProjectAsync ( "dubbing-id" ) ;텍스트를 사운드로 변환하고 가장 고급 AI 오디오 모델을 사용하는 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 ) )
{
Debug . Log ( $ " { 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 ) ; 마지막 100 가지 히스토리 항목 또는 지정된 항목 컬렉션을 다운로드합니다.
var api = new ElevenLabsClient ( ) ;
var voiceClips = await api . HistoryEndpoint . DownloadHistoryItemsAsync ( ) ;참고 : 클립을 프로젝트에 직접 복사하려면 추가로 호출 할 수 있습니다.
VoiceClipUtilities . CopyIntoProject ( editorDownloadDirectory , downloadItems . ToArray ( ) ) ; var api = new ElevenLabsClient ( ) ;
var success = await api . HistoryEndpoint . DeleteHistoryItemAsync ( historyItem ) ;
Debug . Log ( $ "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 ( ) ;