타입캐스트 API 를 위한 공식 C# 라이브러리입니다. AI 기반 음성을 사용하여 텍스트를 생동감 있는 음성으로 변환하세요.
.NET Standard 2.0+, .NET 6+, Unity(NuGetForUnity를 통해), Blazor 애플리케이션을 지원합니다. 동기 대안과 함께 완전한 async/await를 지원합니다.
패키지 NuGet의 Typecast C# SDK
소스 코드 Typecast C# SDK 소스 코드
사전 요구 사항
.NET SDK 설치
Homebrew 사용 (권장) # .NET 8 SDK 설치
brew install dotnet@8
# PATH에 추가
export PATH = "/opt/homebrew/opt/dotnet@8/bin: $PATH "
# 설치 확인
dotnet --version
공식 설치 프로그램 사용 dotnet.microsoft.com/download 에서 다운로드하고 .pkg 설치 프로그램을 실행하세요.winget 사용 winget install Microsoft.DotNet.SDK. 8
dotnet -- version
Chocolatey 사용 choco install dotnet - sdk
dotnet -- version
또는 dotnet.microsoft.com/download 에서 다운로드하세요. # Ubuntu/Debian
wget https://packages.microsoft.com/config/ubuntu/ $( lsb_release -rs ) /packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update
sudo apt-get install -y dotnet-sdk-8.0
dotnet --version
.NET CLI
Package Manager
Unity (NuGetForUnity)
dotnet add package typecast-csharp
Install-Package typecast - csharp
NuGetForUnity 설치:
Package Manager 열기 (Window > Package Manager)
”+” 클릭 > “Add package from git URL”
입력: https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity
NuGet 창 열기 (NuGet > Manage NuGet Packages)
“typecast-csharp” 검색 후 설치
최신 버전이 설치되어 있는지 확인하세요. dotnet list package로 확인할 수 있습니다. dotnet add package typecast-csharp로 최신 버전을 가져오세요.
빠른 시작
using Typecast ;
using Typecast . Models ;
// 클라이언트 초기화
using var client = new TypecastClient ( "YOUR_API_KEY" );
// 텍스트를 음성으로 변환
var request = new TTSRequest (
text : "안녕하세요! 저는 텍스트 음성 변환 에이전트입니다." ,
voiceId : "tc_672c5f5ce59fac2a48faeaee" ,
model : TTSModel . SsfmV30
);
var response = await client . TextToSpeechAsync ( request );
// 오디오 파일 저장
await response . SaveToFileAsync ( "output.wav" );
Console . WriteLine ( $"Audio saved! Duration: { response . Duration } s, Format: { response . Format } " );
Typecast C# SDK는 텍스트 음성 변환을 위한 강력한 기능을 제공합니다:
다중 음성 모델 : ssfm-v30(최신) 및 ssfm-v21 AI 음성 모델 지원
다국어 지원 : 영어, 한국어, 스페인어, 일본어, 중국어 등 37개 언어 지원
감정 제어 : 이모션 프리셋(normal, happy, sad, angry, whisper, toneup, tonedown) 또는 스마트 문맥 인식 추론
오디오 사용자 정의 : 라우드니스 (LUFS -70 to 0), 피치(-12 to +12 반음), 템포(0.5x to 2.0x), 형식(WAV/MP3) 제어
음성 탐색 : 모델, 성별, 나이, 사용 사례별 필터링이 가능한 V2 Voices API
Unity 지원 : NuGetForUnity를 통해 Unity와 호환
Blazor 지원 : Blazor Server 및 WebAssembly와 함께 작동
스트리밍 : 저지연 재생을 위한 실시간 청크 오디오 전송
Async/Sync API : 동기 대안과 함께 완전한 async/await 지원
환경 변수 또는 생성자를 통해 API 키를 설정하세요:
// 환경 변수 사용 (TYPECAST_API_KEY)
using var client = new TypecastClient ();
// 또는 직접 전달
using var client = new TypecastClient ( "your-api-key-here" );
// 또는 구성 객체 사용
var config = new TypecastClientConfig
{
ApiKey = "your-api-key-here" ,
TimeoutSeconds = 60 // 선택 사항, 기본값: 30
};
using var client = new TypecastClient ( config );
고급 사용법
감정 제어 (ssfm-v30)
ssfm-v30은 두 가지 감정 제어 모드를 제공합니다: 프리셋 및 스마트 .
AI가 문맥에서 감정을 추론하도록 합니다: var request = new TTSRequest ( "모든 것이 잘 될 거예요." , voiceId , TTSModel . SsfmV30 )
{
Language = LanguageCode . Korean ,
Prompt = new SmartPrompt (
previousText : "방금 최고의 소식을 들었어요!" ,
nextText : "축하할 수 있어서 너무 기다려져요!"
)
};
var response = await client . TextToSpeechAsync ( request );
프리셋 값으로 감정을 명시적으로 설정합니다: var request = new TTSRequest ( "이 기능들을 보여드리게 되어 정말 기대됩니다!" , voiceId , TTSModel . SsfmV30 )
{
Language = LanguageCode . Korean ,
Prompt = new PresetPrompt (
emotionPreset : EmotionPreset . Happy ,
emotionIntensity : 1.5 // 범위: 0.0 ~ 2.0
)
};
var response = await client . TextToSpeechAsync ( request );
오디오 사용자 정의
라우드니스, 피치, 템포 및 출력 형식을 제어합니다:
var request = new TTSRequest ( "사용자 정의 오디오 출력!" , voiceId , TTSModel . SsfmV30 )
{
Language = LanguageCode . Korean ,
Output = new Output (
targetLufs : - 14.0 , // 범위: -70 ~ 0 (LUFS)
audioPitch : 2 , // 범위: -12 to +12 반음
audioTempo : 1.2 , // 범위: 0.5x to 2.0x
audioFormat : AudioFormat . Mp3 // 옵션: Wav, Mp3
),
Seed = 42 // 재현 가능한 결과를 위해
};
var response = await client . TextToSpeechAsync ( request );
await response . SaveToFileAsync ( $"output { response . FileExtension } " );
Console . WriteLine ( $"Duration: { response . Duration } s, Format: { response . Format } " );
음성 탐색 (V2 API)
향상된 메타데이터로 사용 가능한 음성을 나열하고 필터링합니다:
// 모든 음성 가져오기
var voices = await client . GetVoicesV2Async ();
// 기준으로 필터링
var filtered = await client . GetVoicesV2Async ( new VoicesV2Filter
{
Model = TTSModel . SsfmV30 ,
Gender = GenderEnum . Female ,
Age = AgeEnum . YoungAdult
});
// 음성 정보 표시
foreach ( var voice in voices )
{
Console . WriteLine ( $"ID: { voice . VoiceId } , Name: { voice . VoiceName } " );
Console . WriteLine ( $"Gender: { voice . Gender } , Age: { voice . Age } " );
Console . WriteLine ( $"Models: { string . Join ( ", " , voice . Models . Select ( m => m . Version ))} " );
Console . WriteLine ( $"Use cases: { string . Join ( ", " , voice . UseCases ?? new List < string >())} " );
}
스트리밍
저지연 재생을 위한 실시간 오디오 청크 스트리밍:
// 원시 PCM 추출 (44바이트 WAV 헤더 건너뛰기)
using var stream = await client . TextToSpeechStreamAsync ( request );
var buffer = new byte [ 8192 ];
bool first = true ;
while ( true )
{
int bytesRead = await stream . ReadAsync ( buffer );
if ( bytesRead == 0 ) break ;
ReadOnlySpan < byte > pcm = buffer . AsSpan ( 0 , bytesRead );
if ( first )
{
pcm = pcm [ 44 .. ]; // WAV 헤더 건너뛰기
first = false ;
}
// pcm은 32000 Hz 16비트 모노 원시 PCM
// 오디오 출력으로 전달 (예: NAudio)
}
WAV 스트리밍 형식: 32000 Hz, 16비트, 모노 PCM. 첫 번째 청크에 44바이트 WAV 헤더(size = 0xFFFFFFFF)가 포함되며, 이후 청크는 원시 PCM 데이터만 포함합니다. MP3 형식: 320 kbps, 44100 Hz, 각 청크는 독립적으로 디코딩 가능합니다. 스트리밍 엔드포인트는 Volume 및 TargetLufs를 지원하지 않습니다.
지원 언어
SDK는 자동 언어 감지와 함께 37개 언어를 지원합니다:
코드 언어 코드 언어 코드 언어 eng영어 jpn일본어 ukr우크라이나어 kor한국어 ell그리스어 ind인도네시아어 spa스페인어 tam타밀어 dan덴마크어 deu독일어 tgl타갈로그어 swe스웨덴어 fra프랑스어 fin핀란드어 msa말레이어 ita이탈리아어 zho중국어 ces체코어 pol폴란드어 slk슬로바키아어 por포르투갈어 nld네덜란드어 ara아랍어 bul불가리아어 rus러시아어 hrv크로아티아어 ron루마니아어 ben벵골어 hin힌디어 hun헝가리어 nan민난어 nor노르웨이어 pan펀자브어 tha태국어 tur터키어 vie베트남어 yue광둥어
지정하지 않으면 입력 텍스트에서 언어가 자동으로 감지됩니다.
오류 처리
SDK는 API 오류 처리를 위한 특정 예외 타입을 제공합니다:
using Typecast ;
using Typecast . Exceptions ;
try
{
var response = await client . TextToSpeechAsync ( request );
}
catch ( UnauthorizedException )
{
Console . WriteLine ( "Invalid or missing API key" );
}
catch ( PaymentRequiredException )
{
Console . WriteLine ( "Insufficient credits" );
}
catch ( UnprocessableEntityException ex )
{
Console . WriteLine ( $"Validation error: { ex . ResponseBody } " );
}
catch ( RateLimitException )
{
Console . WriteLine ( "Rate limit exceeded - please try again later" );
}
catch ( TypecastException ex )
{
Console . WriteLine ( $"API error ( { ex . StatusCode } ): { ex . Message } " );
}
동기 API
async가 선호되지 않는 시나리오의 경우 동기 메서드를 사용하세요:
// 동기 텍스트 음성 변환
var response = client . TextToSpeech ( request );
response . SaveToFile ( "output.wav" );
// 동기 음성 목록
var voices = client . GetVoicesV2 ();
var voice = client . GetVoiceV2 ( "voice_id" );