본문 바로가기
Yappy 다운로드
언어: ko

다른 앱은 보여 주지 않는 부분

글에서 말로.

소리 내어 읽는 일은 철자 풀기가 아니라 해석이다. “1492”는 “천사백구십이”로 읽고, “헨리 8세”는 “헨리 팔세”로 읽는다. 프랑스어 “Louis XIV”는 “루이 카토르즈”로. “CD”는 로마 숫자로 읽으면 400이지만, 보통은 그냥 씨디다. FBI는 철자를 하나씩 읽고, NASA는 한 단어로 발음한다. Yappy는 첫 음절 하나를 합성하기도 전에 텍스트를 낭독 대본으로 바꿔 둔다. 목소리가 실제로 말할 내용의 악보다.

대본 만들기

여기서 바로 써 볼 수 있다: 앱에 들어 있는 바로 그 Rust를 브라우저용으로 컴파일한 것이다.

여기에 대본이 나타난다. 변환된 부분은 밑줄로 표시된다.

한 번에 열두 가지 일.

날짜

“24/5/1533”은 통째로 읽습니다. 언어마다 다른 어순과 문법에 맞춰서요.

시각

“14:05”는 시계가 읽는 식이 아니라 사람이 말하는 식으로 읽습니다.

화폐

“3.50 €”는 “3유로 50센트”로 읽습니다. 단위와 형태까지 알맞게.

백분율

“7%”는 “칠 퍼센트”로 읽습니다. 그리고 “0.5%”는 “영점오”로 끝나지 않습니다.

단위

“230 °C”는 “섭씨 이백삼십 도”로 읽습니다.

서수

“3.ª”는 “tercera”로 읽습니다. 성과 격이 있는 언어라면 그에 맞춥니다.

로마 숫자와 판단

“20세기”는 기수로, “Enrique VIII”는 서수로 읽습니다. “EL CID”는 숫자가 아닙니다.

두문자어와 발음

FBI는 한 글자씩 읽고, NASA는 한 단어로 읽습니다. 규칙을 정하는 것은 목록이 아니라 소리입니다.

약어

“etc.”, “pág.”, “S. XIX”: 언어마다 표가 하나씩 있습니다.

큰 수

Unicode CLDR의 RBNF 문법으로, 성과 격 굴절까지 읽어 냅니다.

31개 언어

규칙은 같습니다. 문법만 각 언어의 것입니다. 손으로 쓴 목록은 없습니다.

리듬

제목은 말을 마친 다음에 숨을 쉽니다. 목록은 저마다 박자를 맞춥니다. 쉼은 우연이 아니라 대본의 일부입니다.

자주 묻는 질문

RBNF 문법이란 무엇인가요?
RBNF는 Rule-Based Number Format의 약자입니다. Unicode CLDR이 언어마다 숫자를 어떻게 말하는지 기술해 놓은 규칙입니다. 천 낱말짜리 표가 아니라 문법입니다. 그래서 스페인어로는 “doscientas páginas”라고 말하지 “doscientos páginas”라고 말하지 않는다는 것, 러시아어는 수사를 격에 맞춰 굴절시킨다는 것, 프랑스어는 90까지를 스무 단위로 센다는 것을 압니다. Yappy는 이 규칙을 순수 Rust로 해석합니다. 손으로 쓴 목록은 없습니다.
왜 대본 작성기가 필요한가요? 음성이 혼자 하지 않나요?
아니요, 일부러입니다. Yappy의 음성 모델은 글자 단위로 작동합니다. 적힌 그대로 발음합니다. 덕분에 빠르고 가볍습니다. 그런데 “1492”가 들어오면 그대로 한 글자씩 읽으려 합니다. 이런 모델에서 정규화는 발음입니다. 대본 작성기는 모든 숫자와 두문자어와 기호를, 사람이라면 말했을 단어로 바꾸는 부품입니다.
몇 개 언어에서 작동하나요?
음성이 말하는 31개 언어 전부입니다. 그리고 언어마다 규칙이 따로입니다. 날짜의 순서, 화폐의 이음말, 서수, 약어, 로마 숫자가 다릅니다. 15세기는 스페인어로 “siglo quince”, 영어로 “fifteenth century”입니다. “Louis XIV”는 “Louis quatorze”이지 “Louis fourteenth”가 아닙니다. 작업은 열두 가지가 같고, 문법은 서른하나입니다.
카라오케는 왜 항상 정확한 단어에 맞아떨어질까요?
스크립트는 단순히 변환된 텍스트가 아닙니다. 쓰인 텍스트와 읽힌 말 사이의 대응 관계를 함께 저장합니다. 음성이 “천사백구십이”라고 읽을 때, 스크립트는 이 말이 “1492”라는 숫자에서 왔음을 알고, 밑줄이 밀리지 않고 정확히 제자리에 얹힙니다. 텍스트를 비춰 주는 것과 찍어서 맞히는 것, 그 차이입니다.
단어 하나를 잘못 읽습니다. 고칠 수 있나요?
지금 시점에서는 사용자 발음 사전이 없습니다. 모델은 글자를 그대로 읽기 때문에, 가장 빠른 방법은 편집기에서 그 단어를 소리 나는 대로 써 넣고 다시 들어 보는 것입니다. 특정 단어가 아니라 일반적인 패턴(약어, 두문자어, 단위)이 문제라면 GitHub 이슈에 알려 주세요. 스크립트 변환기의 규칙 표는 그런 사례들로 늘어납니다.
이 페이지의 스크립트 변환기는 앱에 들어 있는 것과 같은 건가요?
같은 코드를 WebAssembly로 컴파일해 브라우저에서 돌리는 것입니다. 여기에 쓴 내용은 탭 밖으로 나가지 않습니다. 프로젝트 전체가 공개되어 있으니, 규칙을 하나하나 리포지토리에서 직접 읽을 수도 있습니다.

대본은 이야기의 절반입니다. 나머지 절반은 귀의 몫입니다.

샘플 듣기