스크린플레이트에서 멀티보이스 MP3로: Cloudfla... 노트

스크린플레이트에서 멀티보이스 MP3로: Cloudflare Workers의 멀티스피커 TTS API를 위한 스크립트 파싱

저자는 단일 스크립트에서 다중 스피커 오디오를 생성하는 웹 애플리케이션을 개발하여 전통적인 텍스트-음성 변환 제한을 개선했습니다. 이 시스템은 느슨한 텍스트를 정교한 TTS 모델에 맞게 구조화된 형식으로 변환하여 연기 지시와 다중 문자를 수용합니다. 백엔드에는 Cloudflare Worker, 데이터용 D1, MP3 저장용 R2가 Fish Audio의 Drama 3 모델을 활용합니다. 입력 형식은 라디오 스크립트와 유사하며, "Name: line"과 대괄호를 사용해 전달 지시를 표시합니다. 주요 설계 중 하나는 이름 없는 대사는 내레이터로 기본 설정되어 사용자 경험을 향상시킵니다. 파싱은 정규 표현식과 단어 수 휴리스틱으로 화자와 행을 식별하며, 산문에서 콜론을 신중히 고려합니다. 애플리케이션은 사용자 입력에서 제어 태그를 적극적으로 제거하여 의도치 않은 화자 변경이 주입되는 것을 방지합니다. 페이로드 구성은 문자를 고유한 화자 인덱스에 매핑하여 올바른 음성 할당을 보장합니다. 자동 캐스팅 메커니즘은 큐레이션된 풀에서 할당되지 않은 캐릭터에 음성 음성을 할당하여 사용자 선택을 우선시하고 중복을 방지합니다. 중요한 발견 중 하나는 '모델' 헤더가 누락되었거나 잘못되었을 때 TTS 모델이 다른 모델로 조용히 대체하는 것으로, 명시적인 고정과 문서화의 필요성을 강조했습니다. 강력한 오류 처리에는 작은 응답을 거부하고 스크립트 텍스트나 API 키와 같은 민감한 데이터를 절대 기록하지 않는 것이 포함됩니다. 비용 산정은 정확한 페이로드의 UTF-8바이트를 기반으로 하며, 실패 시 보수적인 크레딧 예약과 환불이 적용됩니다. 오디오 시간은 파일 크기와 고정된 비트레이트로 추정되어 오디오 디코더가 필요하지 않습니다. 시스템은 단순화를 위해 동기식 요청 모델을 사용하며, 짧은 스크립트에는 적합하지만 긴 스크립트에는 잠재적 한계가 있습니다. 중요한 '함정' 중 하나는 iOS가 적절한 범위 요청 지원 없이 샘플 MP3를 재생하지 않는 경우(206개의 부분 콘텐츠 응답)였습니다. 저자는 이름 없는 대사를 내레이터로 기본값으로 변경하기, 출연진 목록 미리보기, 제어 태그 제거, 모델 헤더 고정, 정확한 비용 추정, 비트레이트 고정, Range 지원 미디어 제공 등 모범 사례 체크리스트를 제공합니다. 프로젝트는 다중 음성 장면을 경험할 수 있는 무료 체험을 제공합니다.