텍스트를 음성으로 읽기
또는 자막 텍스트를 붙여넣으세요
처음 실행하면 음성 모델과 음소 변환기를 내려받습니다. 합쳐서 약 98 MB이고 이 사이트가 제공하며 이후에는 브라우저가 캐시합니다. 넣어 둔 자막이나 텍스트는 이 탭을 떠나지 않습니다. MP3나 M4A를 고르면 인코더 31 MB를 더 내려받으며, WAV가 기본값인 이유가 바로 이것입니다.
옵션
목소리는 억양과 음색을, 덜 뚜렷하게는 텍스트를 어떤 음운 체계로 읽을지도 정합니다. 스페인어 목소리에 영어 문장을 붙인다고 실패하지는 않습니다. 영어 단어를 스페인어 소리로 읽을 뿐이고, 그건 오류 메시지보다 나쁩니다. 열두 개가 아니라 일곱 개 언어를 제공하는 이유는, 이 페이지에 딸린 음소 변환기에 일본어와 중국어 목소리가 없기 때문입니다. 긴 파일에 마음을 정하기 전에 짧은 파일로 들어 보세요. 모든 목소리가 같은 모델을 쓰므로 바꾸는 비용은 합성 한 번이지 다운로드 한 번이 아닙니다.
모델이 자연스럽다고 보는 속도 위에 얹히는 읽기 속도입니다. 느림은 0.8배, 빠름은 1.2배입니다. 일부러 온건하게 잡았습니다. 대략 1.5배를 넘으면 모델이 음절을 삼키기 시작해 빨리 말하는 사람이 아니라 쫓기는 사람처럼 들립니다. 자막 블록이 대사에 비해 너무 짧으면 이 페이지가 스스로 최대 1.4배까지 속도를 올린 뒤 자릅니다. 그 상승 폭은 여기서 고른 설정과 곱해집니다.
WAV는 비압축 24 kHz 모노이며 여기서 인코더 없이 씁니다. 그래서 기본값이고 별도로 내려받을 것도 없습니다. MP3와 M4A는 31 MB짜리 영상 엔진으로 압축해야 하지만 크기가 대략 열 배 줄어듭니다. 10분짜리 말이 WAV로 약 28 MB, MP3로 약 2.8 MB입니다. 목소리를 들어 보려면 WAV를, 파일을 누군가에게 보내려면 MP3를 고르세요.
이 페이지는 텍스트를 소리 내어 읽습니다. 문단을 붙여 넣거나 .txt, .srt, .vtt를 비롯한 열두 자막 형식 중 하나를 넣고 열 가지 목소리에서 하나를 고르면, 처음부터 끝까지 읽은 하나의 오디오 파일을 돌려줍니다. 시간을 맞출 대상이 없으므로 아무것도 시간에 맞추지 않습니다. 출력은 화면 아래에 깔리도록 만든 트랙이 아니라 이어지는 한 번의 낭독입니다.
넣은 파일이 자막 파일이면 타임코드는 파싱되어 버려집니다. 읽는 것은 각 블록의 텍스트를 순서대로 이어 문단으로 만든 것입니다. 블록 안의 줄바꿈은 화면에서의 조판 선택이었으므로 공백이 되고, 블록 경계는 아무것도 되지 않습니다. 자막 낭독 페이지와 정반대이고, 두 페이지가 나란히 있는 이유는 선택을 체크박스 뒤에 숨기지 않고 보이게 하기 위해서입니다. 하나는 타임라인을 따르는 소리를 만들고, 다른 하나는 그저 흘러가는 소리를 만듭니다.
텍스트는 한 번에 하나로 합성하지 않고 조각으로 나눠 합성합니다. 모델의 토크나이저는 510 음소를 넘는 부분을 조용히 잘라 냅니다. 2천 단어짜리 기사가 첫 두 문장만 돌아오고도 파일은 완전히 멀쩡해 보일 수 있습니다. 그래서 텍스트를 문단 경계에서 나누고, 다시 문장 끝 구두점에서 나누고, 400자를 넘는 한 문장은 더 단단히 나누고, 조각을 차례로 합성하며 사이에 짧은 쉼을 둡니다. 취소가 효과를 내는 곳도 여기입니다. 발화는 별도 스레드에서 일어나므로 취소 버튼이 현재 문장이 끝나기를 기다리지 않고 곧바로 멈추며, 오디오를 만드는 동안에도 페이지를 계속 쓸 수 있습니다.
목소리는 일곱 언어에 열 가지입니다. 영어(미국·영국), 스페인어, 프랑스어, 이탈리아어, 힌디어, 브라질 포르투갈어입니다. 일본어와 중국어는 제공하지 않습니다. 발음에 쓰는 음소 변환기에 두 언어의 목소리가 없어서, 일본어라고 붙인 옵션은 한자를 영어 글자로 읽고 자신 있게 틀릴 것입니다. 모델과 음소 변환기 약 98MB를 한 번 내려받아 캐시하며, 붙여 넣은 텍스트는 브라우저를 떠나지 않습니다. 문단이 고객의 편지나 진료 기록일 때 중요한 성질입니다.
자주 묻는 질문
.srt 파일을 여기 넣으면 낭독에 타임코드나 블록 번호가 들어가나요?
둘 다 아닙니다. 변환 페이지가 쓰는 것과 같은 형식 계층으로 파싱하고 각 블록의 텍스트만 남깁니다. 인덱스 번호, 00:00:01,000 --> 모양의 시각, <i>나 {\pos()} 같은 인라인 태그는 합성 전에 사라집니다. 듣는 것은 말이 나타난 순서대로의 단어입니다. 시각을 버리지 않고 지키고 싶다면 자막 파일을 각 블록의 시작 시각에 배치해 오디오로 만드는 페이지를 쓰세요.
붙여 넣기 상자에 기사 전체를 넣을 수 있나요, 아니면 한두 문장만인가요?
기사 전체도 괜찮습니다. 텍스트가 모델에 닿기 전에 조각으로 나뉘기 때문입니다. 붙여 넣은 내용은 일반 텍스트 파일로 감싸져 넣은 파일과 같은 대기열로 들어가므로 같은 400자 단위 분할, 같은 진행 표시줄, 같은 취소 버튼을 씁니다. 실질적인 한계는 길이가 아니라 메모리입니다. 긴 기사는 긴 WAV를 만들고, 24kHz 모노 PCM 한 시간은 수백 메가바이트이므로 낭독이 몇 분을 넘는다면 MP3를 고르는 것이 좋습니다.
자막 낭독보다 여기서 문장 사이 쉼이 길게 들리는 이유는 무엇인가요?
연속된 문장이 붙어 들리지 않도록 조각 사이에 4분의 1초 무음을 넣기 때문입니다. 반면 자막 낭독 페이지는 각 줄을 블록의 정확한 시작에 놓고 자막에 이미 있던 빈 구간을 채웁니다. 여기에는 충실히 따를 타임라인이 없어서 내용과 무관하게 250ms로 고정합니다. 한 조각 안의 문장은 모델이 구두점을 처리하며 잇고, 그래서 대략 400자마다 오는 조각 경계에만 추가 쉼이 붙습니다.
스페인어와 포르투갈어에는 어떤 목소리가 있고, 하나인가요 여러 개인가요?
각각 하나입니다. 스페인어는 ef_dora, 브라질 포르투갈어는 pf_dora입니다. 그 밖에 미국 영어 두 가지(af_heart, af_bella), 미국 영어 하나 더(am_michael), 영국 영어 둘(bf_emma, bm_george), 프랑스어 ff_siwis, 힌디어 hf_alpha, 이탈리아어 if_sara가 있습니다. 영어 목소리가 여럿인 이유는 낭독 요청이 가장 많은 곳이 영어이기 때문이고, 다른 언어는 목록을 들어 보기 좋을 만큼 짧게 유지하려고 하나씩입니다. 목소리는 음색뿐 아니라 억양도 정하므로 텍스트를 어느 언어의 음소로 읽을지도 결정합니다.
결과 MP3나 M4A를 팟캐스트 구간으로 공개해도 되나요?
기술적으로는 됩니다. 둘 다 로컬 ffmpeg 빌드가 부호화한 표준 컨테이너이고 오디오는 24kHz 모노로, 말소리에는 충분하고 음악에는 얇습니다. 편집적으로는 공개 전에 들어 보세요. 모델이 마지막 자음을 끊거나 고유명사에 이상한 강세를 두거나 약어를 글자마다 읽는 일이 있습니다. 그동안 아무것도 업로드되지 않고 워터마크나 추적도 들어가지 않지만, 합성 음성은 그 자체로 고지가 없으므로 청중이 사람 낭독자를 기대한다면 어느 쪽인지 밝히세요.