짧은 녹음과 대본으로 목소리를 복제하고, 대사 사이에 웃음이나 한숨을 넣는 음성 합성 모델이 공개됐다. Lure TTS는 생성이 끝나기 전에 소리를 내보내는 엔진도 제공해, 음성 콘텐츠 개발자가 참조 목소리와 연기 지시를 결합한 서비스를 만들 수 있게 했다.

1. 짧은 참조 음성으로 목소리를 복제

Lure는 파라미터 6억 개 규모의 영어 전용 텍스트 음성 합성 모델이다. 파라미터는 모델이 학습하며 조정하는 수치다. 3~12초 길이의 참조 음성과 해당 녹음의 대본을 주면 새 문장을 그 목소리로 생성한다. 결과는 24kHz 소리 채널이 하나뿐인 모노 오디오다.

모델 카드에 실린 단어 오류율 지표 Seed-TTS WER은 Lure(6억 파라미터)가 1.51, Fish Drama 3(350억 파라미터·전문가 혼합 구조)가 1.54다. 자연스러움을 평가하는 LibriSpeech-PC UTMOS는 Lure가 4.43으로 비교표에서 가장 높고, Qwen3-TTS(6억~17억 파라미터)는 4.41이다. 개발진은 각 평가의 공식 스크립트와 생성 결과를 정하는 방식인 기본 샘플링으로 문장마다 한 번씩 생성했으며, 비교 대상은 각 개발진이 발표한 수치를 실었다.

2. 말하는 도중 효과와 연기 지시

사용자는 대사 중 소리가 필요한 자리에 둥근 괄호 태그를 넣는다. 예를 들어 (sigh)는 한숨, (sharp inhale)은 날카로운 들숨을 나타내며 모델은 이를 말로 읽지 않고 소리로 표현하도록 설계됐다. 모델 카드는 한 문장에 태그를 한두 개 넣도록 권장한다.

별도의 짧은 연기 지시는 감정, 속도, 음높이, 호흡을 조정한다. 배우에게 대본과 함께 연기 메모를 건네는 방식과 비슷하다. 지시는 선택 사항이며, 생략하면 대사와 태그를 바탕으로 연기한다.

3. 여러 환경에서 쓰는 스트리밍 엔진

함께 공개된 엔진은 Mac, NVIDIA GPU, CPU용 실행부를 하나의 파이썬 API와 명령행 도구, OpenAI 호환 서버로 묶는다. 서버는 POST /v1/audio/speech를 제공해 기존 OpenAI 클라이언트에서 사용할 수 있다.

오디오는 약 0.32초 단위로 생성 중 흘러나오며, 긴 입력은 문장별로 나눠 순서대로 스트리밍한다. NVIDIA용 실행부는 동시 요청을 최대 8개까지 묶어 처리한다.

간단한 파이썬 사용 예시는 다음과 같다.

from lure_tts import Lure

tts = Lure.load("models/lure")
voice = tts.make_voice("reference.wav", "Transcript of the reference clip.", name="me")
tts.speak("Wait, you're staying? (sharp inhale) Since when?", voice,
          instruct="Sudden, bright shock, then a caught breath.", out="out.wav")

for pcm in tts.stream("(sigh) Fine. I'm in.", "me"):    # float32 chunks at 24 kHz
    ...

4. H100 성능과 Turbo의 속도

저장소는 H100에서 워밍업 후 기본 디코딩 문맥 72프레임으로 단일 요청을 측정했다. 첫 소리까지의 시간(TTFA)은 한 번에 전송하는 소리 조각인 첫 청크에 모으는 프레임 수에 따라 달라진다. 배치 슬롯은 요청을 담는 자리 수로, 두 슬롯 설정 모두 단일 요청 시험에 사용됐다.

표: H100에서 측정한 스트리밍 성능

조건: H100, 워밍업 후, 기본 디코딩 문맥 72프레임, 한 번에 요청 하나

단위: TTFA는 초, 프레임당 시간은 밀리초

H100 단일 요청 시험의 모델별·배치 슬롯별 생성 시간 비율Lure·1: RTF 0.23; Lure·8: RTF 0.25; Turbo·1: RTF 0.14; Turbo·8: RTF 0.15Lure·10.23Lure·80.25Turbo·10.14Turbo·80.15
H100 단일 요청 시험의 모델별·배치 슬롯별 생성 시간 비율
H100 성능과 Turbo의 속도
모델·배치 슬롯 수첫 청크 4프레임 TTFA첫 청크 1프레임 TTFA첫 프레임 이후 프레임당 시간RTF
Lure·10.2830.22918.40.23
Lure·80.3310.26619.60.25
Turbo·10.1680.14911.40.14
Turbo·80.2000.16712.40.15

RTF는 생성 시간과 오디오 길이의 비율로, 1보다 작으면 재생 시간보다 빠르게 생성한다. H100 표에서는 같은 슬롯 수에서 Turbo의 첫 소리 대기 시간과 프레임당 처리 시간이 모두 짧다.

Turbo는 프레임마다 오디오 코드를 순차 예측하는 횟수를 15회에서 3회로 줄인 변형이다. 오디오 코드는 소리 정보를 부호화한 값이다. 저장소 발표 기준, L4에서 8개 스트림을 묶었을 때 코드 예측 단계가 약 3.4배 빨라진다.

별도 장비의 짧은 문장 측정에서 M5 16GB는 MLX 실행부로 RTF 0.79를 기록했고, 16 vCPU 환경의 CPU 빌드는 6.64를 기록했다. vCPU는 가상으로 배정한 처리 단위다. 전자는 실시간 재생을 따라가고, 후자는 오프라인 생성에 맞는 결과다.

저장소가 같은 목소리와 시드로 13개 사례를 두 번씩 생성한 검사에서, 화자 유사도(ECAPA)는 M5의 MLX가 0.533, cpp Metal이 0.527로 기준 실행(qwen-tts, L4)의 0.575와 통과선 0.545보다 낮았다. MLX는 실시간 속도를 내지만 화자 보존에서는 기준에 못 미쳤으며, 유사도 저하 원인은 아직 확인되지 않았다.

5. 개발 단계에서 고려할 점

짧은 녹음으로 목소리와 표현을 함께 구성할 수 있지만, 입력 준비와 결과 확인에 작업이 든다. 참조 음성은 한 사람이 말하는 깨끗한 녹음으로 고르고 대본은 실제 발화와 정확히 맞춰야 한다. 출력이 참조 음성의 마이크와 방 울림까지 물려받기 때문이다. 모델 카드는 실존 인물의 음성 복제에 동의를 받도록 안내한다.

드문 소리 태그가 빠지면 생성 초기값인 시드를 바꿔 다시 생성하는 방식이 권장된다. 억양·나이·성별을 지시로 바꾸는 능력은 대형 지시 학습 모델보다 약하다.

Lure TTS의 실용적 변화는 목소리 복제와 대사 속 소리 연출을 한 입력 흐름에 묶고, 결과를 스트리밍으로 전달한다는 데 있다.