Log in to leave a comment
No posts yet
매달 결제되는 ElevenLabs나 OpenAI의 TTS 청구서를 보면 한숨이 나옵니다. 인디 게임 개발자에게 API 호출 비용은 프로젝트의 숨통을 조이는 고정 지출입니다. Kokoro 82M은 Apache 2.0 라이선스를 가진 오픈소스 모델로, 로컬 환경에서 상용 수준의 음성을 뽑아냅니다. 8,200만 개의 파라미터로 구성된 이 가벼운 모델을 내 PC에 올리면 더 이상 외부 서버의 정책 변화에 휘둘릴 필요가 없습니다.
로컬 모델을 돌릴 때 가장 큰 걱정은 게임 프레임이 뚝뚝 끊기는 현상입니다. 음성 합성 시 발생하는 CPU 부하를 방지하려면 연산 스레드를 강제로 제어해야 합니다. Kokoro 82M은 StyleTTS 2 구조를 따르고 있어 ONNX 런타임으로 구동할 때 가장 효율적입니다.
SessionOptions에서 intra_op_num_threads를 전체 코어의 절반 이하로 제한하십시오. 8코어 CPU라면 2~4개만 할당해도 충분합니다.enable_cpu_mem_arena를 켜서 메모리 파편화를 막아야 합니다. 이는 백그라운드에서 오디오를 생성할 때 발생하는 미세한 렉을 잡아줍니다.asyncio 큐를 사용해 첫 번째 데이터 덩어리가 나오는 즉시 오디오 장치로 쏴줘야 합니다.이 설정을 거치면 첫 음성이 나오기까지 걸리는 시간(TTFA)을 0.5초 밑으로 떨어뜨릴 수 있습니다.
Kokoro 82M이 아무리 훌륭해도 'API'를 '아피'라고 읽거나 '10%'를 제대로 처리 못 하면 몰입감이 깨집니다. 이 모델은 국제 음성 기호(IPA)를 기반으로 학습되었기 때문에 입력 텍스트를 정규화하는 과정이 필수입니다.
단순히 텍스트를 집어넣지 말고 정규표현식 매핑 딕셔너리를 만드십시오. r'\bAPI\b'는 '에이피아이'로, 숫자는 '한 개', '일 퍼센트'처럼 문맥에 맞게 한글로 풀어서 전달해야 합니다. 특히 한국어 특유의 연음 법칙은 korean-text-normalizer 같은 라이브러리를 보조로 쓰면 해결됩니다. 수동으로 음성 파일을 편집하며 밤을 새우던 시간을 주당 5시간은 아낄 수 있습니다.
기존에 사용하던 OpenAI SDK 코드를 전부 뜯어고칠 필요는 없습니다. 로컬 호스트에 FastAPI로 경량 서버를 띄우면 엔드포인트 주소 한 줄 수정만으로 유료 API를 대체합니다.
/v1/audio/speech 경로를 생성하고 OpenAI 규격의 JSON 데이터를 받도록 설계합니다.INT8 양자화 모델을 로드하십시오. 추론 속도가 일반 모델보다 3배 이상 빠르면서도 귀로 듣는 음질 차이는 미미합니다.pydub으로 가공해 .mp3나 .wav로 즉시 반환합니다.이렇게 하면 유료 서비스에 의존하던 코드 베이스를 그대로 유지하면서 매달 나가는 구독료만 깔끔하게 제거할 수 있습니다.
경량 모델은 500자 이상의 긴 문장을 한 번에 처리할 때 뒷부분 발음이 꼬이거나 기계음이 섞이는 한계가 있습니다. 이를 해결하려면 문장을 지능적으로 쪼개야 합니다.
마침표와 쉼표를 기준으로 문장을 분할한 뒤, AudioSegment.silent를 활용해 문장 사이에 200~500ms의 무음을 강제로 삽입하십시오. 인간의 호흡 주기를 시뮬레이션하는 것만으로도 모델의 어색함이 사라집니다. 단순히 텍스트를 나누는 것이 아니라, 오디오 조각들을 자연스럽게 이어 붙이는 심리스 재생 로직이 핵심입니다. 이 과정을 자동화하면 긴 대사도 끊김 없이 자연스러운 연기가 가능해집니다.