메인 콘텐츠로 건너뛰기
타입캐스트 API를 위한 공식 PHP 라이브러리입니다. AI 음성을 사용하여 텍스트를 자연스러운 음성으로 변환합니다. Guzzle 7 기반의 안정적인 HTTP 통신. PHP 8.1+ 및 Composer 필요.

Packagist

타입캐스트 PHP SDK

소스 코드

타입캐스트 PHP SDK 소스 코드

설치

Composer로 설치합니다:
composer require neosapience/typecast-php
PHP 8.1 이상 및 Composer가 필요합니다. php -v로 버전을 확인하세요.

빠른 시작

<?php
use Neosapience\Typecast\TypecastClient;
use Neosapience\Typecast\Models\TTSRequest;

// 클라이언트 초기화
$client = new TypecastClient(apiKey: 'YOUR_API_KEY');

// 텍스트를 음성으로 변환
$response = $client->textToSpeech(new TTSRequest(
    voiceId: 'tc_672c5f5ce59fac2a48faeaee',
    text: '안녕하세요! 타입캐스트 PHP SDK입니다.',
    model: 'ssfm-v30',
));

// 오디오 파일 저장
file_put_contents('output.wav', $response->audioData);

echo "재생 시간: {$response->duration}초, 포맷: {$response->format}\n";

기능

  • 다중 음성 모델: 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로 모델, 성별, 나이, 용도별 필터링
  • 스트리밍: 저지연 재생을 위한 실시간 청크 오디오 전송 (콜백 기반)
  • Guzzle 7: 업계 표준 HTTP 클라이언트
  • 타입 안전성: 타입 프로퍼티와 네임드 아규먼트 (PHP 8.1+)

설정

환경변수 또는 직접 API 키를 전달할 수 있습니다:
export TYPECAST_API_KEY="your-api-key-here"

고급 사용법

감정 제어 (ssfm-v30)

ssfm-v30은 두 가지 감정 제어 모드를 제공합니다: 프리셋스마트.
AI가 문맥에서 감정을 추론합니다:
use Neosapience\Typecast\Models\{TTSRequest, SmartPrompt};

$response = $client->textToSpeech(new TTSRequest(
    voiceId: 'tc_672c5f5ce59fac2a48faeaee',
    text: '모든 것이 잘 될 거예요.',
    model: 'ssfm-v30',
    prompt: new SmartPrompt(
        previousText: '방금 최고의 소식을 들었어요!',
        nextText: '축하하고 싶어요!',
    ),
));

오디오 커스터마이징

음량, 피치, 템포, 출력 포맷을 제어합니다:
use Neosapience\Typecast\Models\{TTSRequest, Output};

$response = $client->textToSpeech(new TTSRequest(
    voiceId: 'tc_672c5f5ce59fac2a48faeaee',
    text: '커스터마이징된 오디오 출력!',
    model: 'ssfm-v30',
    output: new Output(
        targetLufs: -14.0,
        audioPitch: 2,
        audioTempo: 1.2,
        audioFormat: 'mp3',
    ),
    seed: 42,
));

file_put_contents('output.mp3', $response->audioData);

보이스 탐색 (V2 API)

향상된 메타데이터와 함께 사용 가능한 보이스를 조회합니다:
use Neosapience\Typecast\Models\VoicesV2Filter;

// 모든 보이스 조회
$voices = $client->getVoicesV2();

// 필터링
$filtered = $client->getVoicesV2(new VoicesV2Filter(
    model: 'ssfm-v30',
    gender: 'female',
    age: 'young_adult',
));

foreach ($voices as $voice) {
    echo "ID: {$voice->voiceId}, 이름: {$voice->voiceName}\n";
}

// 특정 보이스 조회
$voice = $client->getVoiceV2('tc_672c5f5ce59fac2a48faeaee');

스트리밍

콜백을 통해 실시간으로 오디오 청크를 스트리밍합니다:
use Neosapience\Typecast\Models\TTSRequestStream;

$first = true;
$client->textToSpeechStream(
    new TTSRequestStream(
        voiceId: 'tc_672c5f5ce59fac2a48faeaee',
        text: '이 텍스트를 실시간으로 오디오로 스트리밍합니다.',
        model: 'ssfm-v30',
    ),
    function (string $chunk) use (&$first): void {
        if ($first) {
            $chunk = substr($chunk, 44); // 44바이트 WAV 헤더 건너뛰기
            $first = false;
        }
        // $chunk는 32000 Hz 16비트 모노 원시 PCM
        // 오디오 출력으로 전달 또는 ffplay로 파이핑
    },
);
WAV 스트리밍 형식: 32000 Hz, 16비트, 모노 PCM. 첫 번째 청크에 44바이트 WAV 헤더(size = 0xFFFFFFFF)가 포함되며, 이후 청크는 원시 PCM 데이터만 포함합니다. MP3 형식: 320 kbps, 44100 Hz, 각 청크는 독립적으로 디코딩 가능합니다. 스트리밍 엔드포인트는 volumetarget_lufs를 지원하지 않습니다.

지원 언어

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는 HTTP 에러별 구체적인 예외를 발생시킵니다:
use Neosapience\Typecast\Exceptions\{
    TypecastException,
    UnauthorizedException,
    PaymentRequiredException,
    RateLimitException,
};

try {
    $response = $client->textToSpeech($request);
} catch (UnauthorizedException $e) {
    echo "유효하지 않은 API 키: {$e->getMessage()}\n";
} catch (PaymentRequiredException $e) {
    echo "크레딧 부족\n";
} catch (RateLimitException $e) {
    echo "요청 한도 초과 - 잠시 후 재시도\n";
} catch (TypecastException $e) {
    echo "에러: {$e->getMessage()}\n";
}
예외상태 코드설명
BadRequestException400잘못된 요청 파라미터
UnauthorizedException401유효하지 않거나 누락된 API 키
PaymentRequiredException402크레딧 부족
NotFoundException404리소스를 찾을 수 없음
UnprocessableEntityException422유효성 검사 오류
RateLimitException429요청 한도 초과
InternalServerException500서버 오류

API 레퍼런스

TypecastClient 메서드

메서드설명
textToSpeech(TTSRequest)텍스트를 음성 오디오로 변환
textToSpeechStream(TTSRequestStream, callable)콜백을 통한 오디오 청크 스트리밍
getMySubscription()구독 정보 조회
getVoices(?string $model)사용 가능한 보이스 조회 (V1)
getVoicesV2(?VoicesV2Filter)메타데이터와 함께 보이스 조회 (V2)
getVoiceV2(string $voiceId)특정 보이스 조회