PHP와 워드프레스에서 오프라인 텍스트 음성 변환
PHP에는 자체 음성 합성이 없어서, 대부분의 튜토리얼은 텍스트를 클라우드 API로 보내고 글자마다 돈을 냅니다. 모든 기사에 듣기 버전을 달거나, 알림을 소리로 내거나, 쇼핑몰에 오디오를 넣으려는 사이트라면 그 청구서는 글이 늘 때마다 커지고, 모든 텍스트가 서버 밖으로 나갑니다.
이 가이드에서는 무료 SuperClonica 엔진을 로컬 HTTP 서버로 띄워 PHP에서 호출하는 방법을 소개합니다. 자연스러운 목소리, 내 손에 남는 WAV 파일, 요청당 요금 없음.
PHP가 말하는 방법
오디오는 텍스트 버전마다 한 번 만들어 파일로 제공하고, 페이지를 볼 때마다 합성하지 마세요.
- 클라우드 API: 자연스러운 목소리지만 계정, 키, 글자 수 요금, 그리고 텍스트가 남의 서버로.
- SuperClonica: 사이트 옆에서 돌아가는 로컬 HTTP 서버. 자연스러운 목소리, 캐릭터·맞춤 목소리를 오프라인으로.
- 어느 쪽이든 PHP는 JSON을 보내고 오디오를 받을 뿐, 바뀌는 건 주소뿐입니다.
- 31개 언어를 말합니다. 중국어는 아직 지원하지 않습니다.
목소리를 무료로 들어 보기
코드를 쓰기 전에 아무 목소리 페이지에서 30~100자 문장을 입력하고 언어를 고른 뒤 생성 버튼을 누르세요. 몇 초 만에 사이트가 가질 수 있는 목소리를 들을 수 있습니다. 계정은 필요 없습니다.
음성 서버 시작
NVIDIA 그래픽 카드가 있으면 cuda 이미지로 더 빨라지지만, 일반 CPU로도 충분합니다.
- 같은 서버나 비공개 서버에서 서버 시작: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu.
- 첫 실행 때 Supertonic 3 모델(약 385MB)을 볼륨에 내려받습니다. 준비 여부는 GET /health로 확인합니다.
- POST /synthesize는 text, voice, lang, seed, normalize가 담긴 JSON을 받아 16비트 모노 WAV로 답합니다.
- voice는 기본 이름 M1~M5, F1~F5이거나 목소리 파일을 디코딩한 내용입니다.
PHP에서 호출
표준 함수 외에 확장은 필요 없습니다: $voice = json_decode(file_get_contents('voice.json'), true); $body = json_encode(['text' => 'PHP에서 안녕하세요!', 'voice' => $voice, 'lang' => 'ko', 'seed' => 7]); $wav = file_get_contents('http://localhost:8000/synthesize', false, stream_context_create(['http' => ['method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => $body]])); file_put_contents('hello.wav', $wav); 같은 요청은 cURL 확장이나 Guzzle 같은 HTTP 클라이언트로도 됩니다. 기본 목소리라면 디코딩한 파일 대신 'voice' => 'F1'을 넘기세요. 웹용으로 더 작은 파일이 필요하면 ffmpeg로 WAV를 MP3로 변환하세요.
워드프레스와 운영 습관
워드프레스에서는 발행 훅이나 백그라운드 작업에서 오디오를 만들고, uploads 폴더에 저장해 게시물에 첨부하세요. 방문자는 합성을 기다리지 않고 파일을 내려받습니다. 포트 8000을 인터넷에 열지 마세요. SUPERCLONICA_API_KEY를 설정해 Bearer 토큰으로 보내거나, 서버를 localhost에 두세요. 게시물에는 중립적인 기본 목소리를 고르고, 오디오가 생성된 것임을 알리고, 글 기사도 계속 읽기 쉽게 두세요.