์์ฑ ํฉ์ฑ ๋งํฌ์ ์ธ์ด(SSML)๋ฅผ Text-to-Speech ์์ฒญ์ผ๋ก ์ ์กํ์ฌ ๋๋ฌธ์์ด, ๋ ์ง, ์๊ฐ, ์ฝ์ด ๋๋ ๊ฒ์ด๋์ด์ผ ํ๋ ํ ์คํธ์ ์ค๋์ค ํ์๊ณผ ๋์ด ์ฝ๊ธฐ์ ๋ํ ์ธ๋ถ์ ๋ณด๋ฅผ ์ ๋ ฅํด ์ค๋์ค ์๋ต์ ์์ธํ๊ฒ ๋ง์ถค์ค์ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ๊ณผ ์ฝ๋ ์ํ์ Text-to-Speech SSML ํํ ๋ฆฌ์ผ์ ์ฐธ์กฐํ์ธ์.
๋ค์์ SSML ๋งํฌ์ ์ ์์๋ก, ์ด ํ ์คํธ๋ฅผ Text-to-Speech๋ก ํฉ์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
<speak> Here are <say-as interpret-as="characters">SSML</say-as> samples. I can pause <break time="3s"/>. I can play a sound <audio src="https://www.example.com/MY_MP3_FILE.mp3">didn't get your MP3 audio file</audio>. I can speak in cardinals. Your number is <say-as interpret-as="cardinal">10</say-as>. Or I can speak in ordinals. You are <say-as interpret-as="ordinal">10</say-as> in line. Or I can even speak in digits. The digits for ten are <say-as interpret-as="characters">10</say-as>. I can also substitute phrases, like the <sub alias="World Wide Web Consortium">W3C</sub>. Finally, I can speak a paragraph with two sentences. <p><s>This is sentence one.</s><s>This is sentence two.</s></p> </speak>
๋ค์์ SSML ์์ ๋ฌธ์๋ฅผ ํฉ์ฑํ ํ ์คํธ์ ๋๋ค.
Here are S S M L samples. I can pause [3 second pause]. I can play a sound [audio file plays]. I can speak in cardinals. Your number is ten. Or I can speak in ordinals. You are tenth in line. Or I can even speak in digits. The digits for ten are one oh. I can also substitute phrases, like the World Wide Web Consortium. Finally, I can speak a paragraph with two sentences. This is sentence one. This is sentence two.
Text-to-Speech๋ ์ฌ์ฉ ๊ฐ๋ฅํ SSML ํ๊ทธ์ ์ผ๋ถ๋ฅผ ์ง์ํ๋ฉฐ ์ด ์ฃผ์ ์์๋ ์ง์๋๋ ํ๊ทธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
Text-to-Speech๋ฅผ ์ฌ์ฉํ์ฌ SSML ์ ๋ ฅ์ผ๋ก ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ฑ ์ค๋์ค ํ์ผ ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
SSML ์ฌ์ฉ ํ
๊ตฌํ์ ๋ฐ๋ผ Text-to-Speech๋ก ๋ณด๋ด๋ SSML ํ์ด๋ก๋์์ ๋ฐ์ดํ๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํด์ผ ํ ์ ์์ต๋๋ค. ๋ค์ ์์์์๋ JSON ๊ฐ์ฒด ๋ด์ ํฌํจ๋ SSML ์ ๋ ฅ ํ์ ์ง์ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
"{ 'input':{ 'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard <break time=\"1s\"/>is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>' }, 'voice':{ 'languageCode':'en-us', 'name':'en-US-Standard-B', 'ssmlGender':'MALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }"
์์ฝ ๋ฌธ์
์ค๋์ค๋ก ๋ณํํ ํ ์คํธ์ SSML ์์ฝ ๋ฌธ์๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. SSML ์์ฝ ๋ฌธ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ์ด์ค์ผ์ดํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๊ฐ ์ฝ๋๋ก ์ฝํ์ง์ง ์๋๋ก ๋ฐฉ์งํ์ธ์. ๋ค์ ํ์์๋ ์์ฝ๋ SSML ๋ฌธ์์ ์ฐ๊ด๋ ์ด์ค์ผ์ดํ ์ฝ๋๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋ฌธ์ | ์ด์ค์ผ์ดํ ์ฝ๋ |
---|---|
" | " |
& | & |
' | ' |
< | < |
> | > |
์์ฑ ์ ํ
VoiceSelectionParams
๊ฐ์ฒด์ ์์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. VoiceSelectionParams
๊ฐ์ฒด ์ฌ์ฉ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋ ์ํ์ ๋ณด๋ ค๋ฉด Text-to-Speech SSML ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
<voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์์ฑ์ผ๋ก SSML์ ์ฝ์ ์ ์์ง๋ง VoiceSelectionParams
์ด๋ฆ์ ํธํ๋๋ ์์ฑ์ผ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์์ฒญ๋ ์์ฑ ์ ํ | <voice> ํ๊ทธ์์ ์ง์๋๋ ์์ฑ ์ ํ | ||||
---|---|---|---|---|---|
Neural2 | Studio | Wavenet | ๋ด์ค | Standard | |
Neural2 | โ | โ | โ | ||
Studio | โ | โ | โ | ||
Wavenet | โ | โ | โ | ||
Standard | โ | โ | โ | ||
๋ด์ค | โ | โ | โ |
SSML ์์ ์ง์
๋ค์ ์น์ ์์๋ ์์ ์ ์ฌ์ฉํ ์ ์๋ SSML ์์์ ์ต์ ์ ์ค๋ช ํฉ๋๋ค.
<speak>
SSML ์๋ต์ ๋ฃจํธ ์์.
speak
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
<speak> my SSML content </speak>
<break>
๋จ์ด ์ฌ์ด์ ๋์ด ์ฝ๊ธฐ ๋๋ ๊ธฐํ ์ด์จ์ ๊ฒฝ๊ณ๋ฅผ ์ ์ดํ๋ ๋น ์์. ํ ํฐ ์ ๊ฐ์ <break>
์ฌ์ฉ์ ์ ํ์ฌํญ์
๋๋ค. ์ด ์์๊ฐ ๋จ์ด ์ฌ์ด์ ์์ผ๋ฉด ์์ฑ ์ค์ง๋ ์ธ์ด์ ๋งฅ๋ฝ์ ๋ฐ๋ผ ์๋์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
break
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์์ฑ
์์ฑ | ์ค๋ช |
---|---|
time |
์ด๋ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์์ฑ ์ค์ง์ ๊ธธ์ด๋ฅผ ์ค์ ํฉ๋๋ค(์: '3s' ๋๋ '250ms'). |
strength |
์ถ๋ ฅ ์์ฑ์ ์ด์จ์ ์ค์ง์ ๊ฐ๋๋ฅผ ์๋์ ์ฉ์ด๋ก ์ค์ ํฉ๋๋ค. ์ ํจํ ๊ฐ์ 'x-weak', 'weak', 'medium', 'strong', 'x-strong'์ ๋๋ค. 'none' ๊ฐ์ ์ด์จ์ ์ค์ง ๊ฒฝ๊ณ๊ฐ ์ถ๋ ฅ๋์ด์๋ ์ ๋จ์ ๋ํ๋ด๋ฉฐ, ์ค์ ๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ํ๋ก์ธ์๊ฐ ์์ฑํ๋ ์ด์จ์ ์ค์ง๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฐ์ ํ ํฐ ์ฌ์ด์ ์ ์ฆ์ ์ธ(๋จ์กฐ ๋น๊ฐ์) ์ค์ง ๊ฐ๋๋ฅผ ๋ํ๋ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ง ๊ฒฝ๊ณ๊ฐ ๋๋ ทํ๋ฉด ๋์ด ์ฝ๊ธฐ๊ฐ ๋ฉ๋๋ค. |
์
๋ค์ ์์๋ <break>
์์๋ฅผ ์ฌ์ฉํ์ฌ ๋จ๊ณ๊ฐ์ ์ผ์ ์ค์งํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
<speak> Step 1, take a deep breath. <break time="200ms"/> Step 2, exhale. Step 3, take a deep breath again. <break strength="weak"/> Step 4, exhale. </speak>
<sayโas>
์ด ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๋ด์ ํฌํจ ๋ ํ ์คํธ ๊ตฌ๋ฌธ ์ ํ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค. ๋ํ ํฌํจ๋ ํ ์คํธ ๋ ๋๋ง์ ์ธ๋ถ ์์ค์ ์ง์ ํ๋ ๋ฐ๋ ๋์์ด ๋ฉ๋๋ค.
<sayโas>
์์์๋ ๊ฐ์ ๋งํ๋ ํ์์ ๊ฒฐ์ ํ๋ ํ์ ์์ฑ์ธ interpret-as
๊ฐ ์์ต๋๋ค. ํน์ interpret-as
๊ฐ์ ๋ฐ๋ผ ์ ํ์ ์์ฑ ์ธ format
๋ฐ detail
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์
interpret-as
์์ฑ์ ๋ค์ ๊ฐ์ ์ง์ํฉ๋๋ค.
-
currency
๋ค์ ์์๋ 'forty two dollars and one cent'๋ผ๊ณ ๋งํฉ๋๋ค. ์ธ์ด ์์ฑ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ ํ์ฌ ์ธ์ด๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
<speak> <say-as interpret-as='currency' language='en-US'>$42.01</say-as> </speak>
-
telephone
W3C SSML 1.0 say-as attribute values WG ๋ฉ๋ชจ์์
interpret-as='telephone'
์ค๋ช ์ ์ฐธ์กฐํ์ธ์.๋ค์ ์์๋ '18002021212'๋ก ๋งํฉ๋๋ค. 'google:style' ์์ฑ์ด ์๋ต๋ ๊ฒฝ์ฐ ๋ฌธ์ O๊ฐ 0์ผ๋ก ํ์๋ฉ๋๋ค.
'google:style='zero-as-zero' ์์ฑ์ ํ์ฌ EN ์ธ์ด๋ก๋ง ์๋ํฉ๋๋ค.
<speak> <say-as interpret-as='telephone' google:style='zero-as-zero'>1800-202-1212</say-as> </speak>
-
verbatim
๋๋spell-out
๋ค์ ์๋ ํ ๊ธ์์ฉ ์ฒ ์๋ฅผ ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="verbatim">abcdefg</say-as> </speak>
-
date
format
์์ฑ์ ์ผ๋ จ์ ๋ ์ง ํ๋ ๋ฌธ์ ์ฝ๋์ ๋๋ค.format
์์ ์ง์๋๋ ํ๋ ๋ฌธ์ ์ฝ๋๋ ๊ฐ๊ฐ ์ฐ๋, ์, ์ผ์ ํด๋นํ๋ {y
,m
,d
}์ ๋๋ค. ์ฐ๋, ์, ์ผ์ ํ๋ ์ฝ๋๊ฐ ํ ๋ฒ์ฉ ํ์๋ ๊ฒฝ์ฐ ์์ ์๋ฆฟ์๋ ๊ฐ๊ฐ 4์๋ฆฌ, 2์๋ฆฌ, 2์๋ฆฌ์ ๋๋ค. ํ๋ ์ฝ๋๊ฐ ๋ฐ๋ณต๋ ๊ฒฝ์ฐ ์์ ์๋ฆฟ์๋ ์ฝ๋์ ๋ฐ๋ณต ํ์์ ๋๋ค. ๋ ์ง ํ ์คํธ์ ํ๋๋ ๊ตฌ๋์ ๋๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์ ์์ต๋๋ค.detail
์์ฑ์ ๋ ์ง๋ฅผ ์ฝ๋ ๋ฐฉ์์ ์ ์ดํฉ๋๋ค.detail='1'
์ ๊ฒฝ์ฐ ์์ด๋ ์ฐ๋ ํ๋ ์ค ํ๋์ ์ผ ํ๋๊ฐ ํ์ ํญ๋ชฉ์ด์ง๋ง ์๊ณผ ์ฐ๋ ํ๋ ๋ ๋ค ์ ๋ ฅํด๋ ๋ฉ๋๋ค. ์ด๋ 3๊ฐ ๋ฏธ๋ง์ ํ๋๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. ๋งํ๋ ํ์์ '{๋ช ์}์ {๋ฉฐ์น ์งธ ๋ }, {๋ช ๋ ๋}'(์์ด ๊ธฐ์ค)์ ๋๋ค.๋ค์ ์๋ '9์์ ์ด์งธ ๋ , 1960๋ ' ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="date" format="yyyymmdd" detail="1"> 1960-09-10 </say-as> </speak>
๋ค์ ์๋ '9์์ ์ด์งธ ๋ ' ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="date" format="dm">10-9</say-as> </speak>
detail='2'
์ ๊ฒฝ์ฐ ์ผ, ์, ์ฐ๋ ํ๋๊ฐ ํ์ํ๋ฉฐ, ์ธ ํ๋๊ฐ ๋ชจ๋ ์ ๋ ฅ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ํด๋นํฉ๋๋ค. ๋งํ๋ ํ์์ '{๋ช ์} {๋ฉฐ์น ์งธ ๋ }, {๋ช ๋ ๋}'(์์ด ๊ธฐ์ค)์ ๋๋ค.๋ค์ ์๋ '9์ ์ด์งธ ๋ , 1960๋ ' ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="date" format="dmy" detail="2"> 10-9-1960 </say-as> </speak>
-
characters
๋ค์ ์๋ ํ ๊ธ์์ฉ ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="characters">can</say-as> </speak>
-
cardinal
๋ค์ ์์๋ ์ซ์๋ฅผ ๊ธฐ์ ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="cardinal">12345</say-as> </speak>
-
ordinal
๋ค์ ์๋ ์ซ์๋ฅผ ์์ ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="ordinal">1</say-as> </speak>
-
fraction
๋ค์ ์๋ ์ซ์๋ฅผ ๋ถ์ ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="fraction">5+1/2</say-as> </speak>
-
expletive
๋๋bleep
๋ค์ ์์๋ ํ ์คํธ๊ฐ ๊ฒ์ด๋ ๊ฒ์ฒ๋ผ ์ ์๋ฆฌ๊ฐ ๋ฉ๋๋ค.
<speak> <say-as interpret-as="expletive">censor this</say-as> </speak>
-
unit
์ซ์์ ๋ฐ๋ผ ๋จ์๋ฅผ ๋จ์ ๋๋ ๋ณต์๋ก ๋ณํํฉ๋๋ค. ๋ค์ ์๋ ๋จ์ํ ๋จ์๋ฅผ ๋ณต์ํ์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="unit">10 foot</say-as> </speak>
-
time
๋ค์ ์๋ '2์ 30๋ถ P.M.' ํ์์ผ๋ก ๋งํฉ๋๋ค.
<speak> <say-as interpret-as="time" format="hms12">2:30pm</say-as> </speak>
format
์์ฑ์ ์ผ๋ จ์ ์๊ฐ ํ๋ ๋ฌธ์ ์ฝ๋์ ๋๋ค.format
์์ ์ง์๋๋ ํ๋ ๋ฌธ์ ์ฝ๋๋ ๊ฐ๊ฐ ์๊ฐ, ๋ถ, ์ด, ์๊ฐ๋, 12์๊ฐ์ , 24์๊ฐ์ ์ ํด๋นํ๋ {h
,m
,s
,Z
,12
,24
}์ ๋๋ค. ์๊ฐ, ๋ถ, ์ด์ ํ๋ ์ฝ๋๊ฐ ํ ๋ฒ์ฉ ํ์๋ ๊ฒฝ์ฐ ์์ ์๋ฆฟ์๋ ๊ฐ๊ฐ 1์๋ฆฌ, 2์๋ฆฌ, 2์๋ฆฌ์ ๋๋ค. ํ๋ ์ฝ๋๊ฐ ๋ฐ๋ณต๋ ๊ฒฝ์ฐ ์์ ์๋ฆฟ์๋ ์ฝ๋์ ๋ฐ๋ณต ํ์์ ๋๋ค. ์๊ฐ ํ ์คํธ์ ํ๋๋ ๊ตฌ๋์ ๋๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์ ์์ต๋๋ค. ์๊ฐ, ๋ถ, ์ด๊ฐ ์ด ํ์์ผ๋ก ์ง์ ๋์ง ์๊ฑฐ๋ ์ผ์นํ๋ ์๋ฆฟ์๊ฐ ์์ ๊ฒฝ์ฐ ํ๋ ๊ฐ์ด 0์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค. ๊ธฐ๋ณธformat
์ 'hms12'์ ๋๋ค.detail
์์ฑ์ ์๊ฐ์ ๋งํ๋ ํ์์ 12์๊ฐ์ ๋๋ 24์๊ฐ์ ๋ก ์ง์ ํฉ๋๋ค.detail='1'
๋๋detail
์ด ๋๋ฝ๋์ด ์๊ณ ์๊ฐ ํ์์ด 24์๊ฐ์ธ ๊ฒฝ์ฐ ๋งํ๋ ํ์์ 24์๊ฐ์ ์ ๋๋ค.detail='2'
๋๋detail
์ด ๋๋ฝ๋์ด ์๊ณ ์๊ฐ ํ์์ด 12์๊ฐ์ธ ๊ฒฝ์ฐ ๋งํ๋ ํ์์ 12์๊ฐ์ ์ ๋๋ค.
say-as
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
<audio>
ํฉ์ฑ๋ ์์ฑ ์ถ๋ ฅ๊ณผ ํจ๊ป ๋ น์๋ ์ค๋์ค ํ์ผ์ ์ฝ์ ๊ณผ ๊ธฐํ ์ค๋์ค ํ์์ ์ฝ์ ์ ์ง์ํฉ๋๋ค.
์์ฑ
์์ฑ | ํ์ | ๊ธฐ๋ณธ๊ฐ | ๊ฐ |
---|---|---|---|
src |
์ | ํด๋น ์ฌํญ ์์ | ์ค๋์ค ๋ฏธ๋์ด ์์ค๋ฅผ ์ฐธ์กฐํ๋ URI. ์ง์๋๋ ํ๋กํ ์ฝ์ https ์
๋๋ค. |
clipBegin |
์๋์ | 0 | ์ฌ์ ์์ ์ง์ ์ ๊ฒฐ์ ํ๋ฉฐ, ์ค๋์ค ์์ค์ ์์ ๋ถ๋ถ์ ์ฝ์ ๋๋ ์คํ์ ๊ฐ์ธ TimeDesignation. ์ด ๊ฐ์ด ์ค๋์ค ์์ค์ ์ค์ ์ง์ ์๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ ์ค๋์ค๊ฐ ์ฝ์ ๋์ง ์์ต๋๋ค. |
clipEnd |
์๋์ | ๋ฌดํ๋ | ์ฌ์ ์ข
๋ฃ ์ง์ ์ ๊ฒฐ์ ํ๋ฉฐ, ์ค๋์ค ์์ค์ ์์ ๋ถ๋ถ์ ์ฝ์
๋๋ ์คํ์
๊ฐ์ธ TimeDesignation. ์ค๋์ค ์์ค์ ์ค์ ์ง์ ์๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ง์ ๋ ์๊ฐ์ ์ฌ์์ด ์ข
๋ฃ๋ฉ๋๋ค. clipBegin ์ด clipEnd ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ค๋์ค๊ฐ ์ฝ์
๋์ง ์์ต๋๋ค. |
speed |
์๋์ | 100% | ์ ์ ์ ๋ ฅ ์๋ ๋๋น ์ถ๋ ฅ ์ฌ์ ์๋์ ๋น์จ์ ๋ฐฑ๋ถ์จ๋ก ํํํ ๊ฐ. ์์ ์ค์ ๋ค์์ %๊ฐ ์ค๋ ํ์์ ๋๋ค. ํ์ฌ ์ง์๋๋ ๋ฒ์๋ [50%(์ ์ - 0.5๋ฐฐ์), 200%(๊ณ ์ - 2๋ฐฐ์)]์ ๋๋ค. ์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฐ์ ์ด ๋ฒ์์ ๋ง๊ฒ ์กฐ์ ๋๊ฑฐ๋ ์กฐ์ ๋์ง ์์ ์ ์์ต๋๋ค. |
repeatCount |
์๋์ | repeatDur ์ด ์ค์ ๋ ๊ฒฝ์ฐ 1 ๋๋ 10 |
clipBegin ๋๋ clipEnd ๋ก ์๋ผ๋ธ ํ ์ค๋์ค๋ฅผ ์ฝ์
ํ ํ์๋ฅผ ์ง์ ํ๋ ์ค์. ์์ ๋ฐ๋ณต์ ์ง์๋์ง ์์ผ๋ฏ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์๋ก ๊ฐ์ด ๋ฐ์ฌ๋ฆผ๋ฉ๋๋ค. 0์ ์ ํจํ ๊ฐ์ด ์๋๋ฏ๋ก ์ง์ ๋์ง ์์ ๊ฒ์ผ๋ก ์ทจ๊ธ๋๋ฉฐ ์ด ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ด ์ค์ ๋ฉ๋๋ค. |
repeatDur |
์๋์ | ๋ฌดํ๋ | ์์ค์ clipBegin , clipEnd , repeatCount , speed ์์ฑ์ด ์ฒ๋ฆฌ๋ ํ ์ฝ์
๋๋ ์ค๋์ค์ ์ง์ ์๊ฐ(์ผ๋ฐ์ ์ธ ์ฌ์ ์๊ฐ๊ณผ ๋ค๋ฆ)์ ์ ํํ๋ TimeDesignation. ์ฒ๋ฆฌ๋ ์ค๋์ค์ ์ง์ ์๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ง์ ๋ ์๊ฐ์ ์ฌ์์ด ์ข
๋ฃ๋ฉ๋๋ค. |
soundLevel |
์๋์ | +0dB | soundLevel ๋ฐ์๋ฒจ์ ์ฌ์ฉํ์ฌ ์ค๋์ค์ ์ฌ์ด๋ ๋ ๋ฒจ์ ์กฐ์ ํฉ๋๋ค. ์ต๋ ๋ฒ์๋ +/-40dB์ด์ง๋ง ์ค์ ๋ฒ์๋ ์ค์ง์ ์ผ๋ก ๋ ์์ผ๋ฉฐ, ์ ์ฒด ๋ฒ์์์ ์ถ๋ ฅ ํ์ง์ด ์ข์ง ์์ ์ ์์ต๋๋ค. |
๋ค์์ ํ์ฌ ์ค๋์ค์ ์ง์๋๋ ์ค์ ์ ๋๋ค.
- ํ์: MP3(MPEG v2)
- ์ด๋น 24K ์ํ
- ์ด๋น 24K~96K ๋นํธ, ๊ณ ์ ์๋
- ํ์: Ogg์ Opus
- ์ด๋น 24K ์ํ(์ด๊ด๋์ญ)
- ์ด๋น 24K~96K ๋นํธ, ๊ณ ์ ์๋
- ํ์(์ง์ ์ค๋จ๋จ): WAV(RIFF)
- PCM 16๋นํธ ๋ถํธ Little Endian
- ์ด๋น 24K ์ํ
- ๋ชจ๋ ํ์์ ํด๋น:
- ๋จ์ผ ์ฑ๋์ด ๊ถ์ฅ๋์ง๋ง ์คํ ๋ ์ค๊ฐ ํ์ฉ๋ฉ๋๋ค.
- ์ต๋ ์ง์ ์๊ฐ: 240์ด. ์ด๋ณด๋ค ์ค๋ ์๊ฐ ๋์ ์ค๋์ค๋ฅผ ์ฌ์ํ๋ ค๋ฉด ๋ฏธ๋์ด ์๋ต์ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ํ์ผ ํฌ๊ธฐ ์ ํ: 5MB
- ์์ค URL์ HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์ค๋์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ UserAgent๋ 'Google-Speech-Actions'์ ๋๋ค.
<audio>
์์์ ์ฝํ
์ธ ๋ ์ ํ์ฌํญ์ด๋ฉฐ ์ค๋์ค ํ์ผ์ ์ฌ์ํ ์ ์๊ฑฐ๋ ์ถ๋ ฅ ๊ธฐ๊ธฐ๊ฐ ์ค๋์ค๋ฅผ ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ด์ฉ์๋ <desc>
์์๊ฐ ํฌํจ๋ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ํด๋น ์์์ ํ
์คํธ ๋ด์ฉ์ด ํ๋ฉด์ ํ์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ต ์ฒดํฌ๋ฆฌ์คํธ์ ๋
น์๋ ์ค๋์ค ์น์
์ ์ฐธ์กฐํ์ธ์.
๋ํ src
URL์ https URL์ด์ด์ผ ํฉ๋๋ค(Google Cloud Storage๋ https URL์ ์ค๋์ค ํ์ผ์ ํธ์คํ
ํ ์ ์์).
๋ฏธ๋์ด ์๋ต์ ์์ธํ ์์๋ณด๋ ค๋ฉด ์๋ต ๊ฐ์ด๋์ ๋ฏธ๋์ด ์๋ต ์น์ ์ ์ฐธ์กฐํ์ธ์.
audio
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
<speak> <audio src="cat_purr_close.ogg"> <desc>a cat purring</desc> PURR (sound didn't load) </audio> </speak>
<p>,<s>
๋ฌธ์ฅ๊ณผ ๋จ๋ฝ ์์์ ๋๋ค.
p
๋ฐ s
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
<p><s>This is sentence one.</s><s>This is sentence two.</s></p>
๊ถ์ฅ์ฌํญ
- ํนํ prosody๋ฅผ ๋ณ๊ฒฝํ๋ SSML ์์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ ์ฒด ๋ฌธ์ฅ์ ๋ํํ๋ ค๋ฉด <s> ... </s> ํ๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค(์: <audio>, <break>, <emphasis>, <par>, <prosody>, <say-as>, <seq>, <sub>).
- ์์ฑ ๋ด ๊ตฌ๋ถ์ ๋ค์ ์ ์๋๋ก ์ถฉ๋ถํ๊ฒ ๊ธธ๊ฒ ํ๋ ค๋ฉด <s> ... </s> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ฅ ์ฌ์ด์ ์ค ๋ฐ๊ฟ์ ์ฝ์ ํฉ๋๋ค.
<sub>
alias ์์ฑ ๊ฐ์ ํ ์คํธ๋ ํฌํจ๋ ํ ์คํธ์ ๋ฐ์์ ๋์ฒดํ๋ค๋ ๊ฒ์ ๋ํ๋ ๋๋ค.
sub
์์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ์ด๋ ค์ด ๋จ์ด์ ์ฌ์ด ๋ฐ์์ ์ ๊ณตํ ์๋ ์์ต๋๋ค. ๋ง์ง๋ง ์์๋ ์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ผ๋ณธ์ด ๋ฒ์ ์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
sub
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์์
<sub alias="World Wide Web Consortium">W3C</sub>
<sub alias="ใซใฃใฝใใฐใ">ๆฅๆฌๆฉ</sub>
<mark>
ํ ์คํธ ๋๋ ํ๊ทธ ์ํ์ค์ ๋ง์ปค๋ฅผ ๋ฐฐ์นํ๋ ๋น ์์์ ๋๋ค. ์ํ์ค์ ํน์ ์์น๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ๋น๋๊ธฐ ์๋ฆผ์ ์ฌ์ฉ๋๋ ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ง์ปค๋ฅผ ์ฝ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
mark
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
<speak> Go from <mark name="here"/> here, to <mark name="there"/> there! </speak>
<prosody>
์์์ ํฌํจ๋ ํ
์คํธ์ ๋๋ฎ์ด, ๋งํ๊ธฐ ์๋, ๋ณผ๋ฅจ์ ๋ง์ถค์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ฌ rate
, pitch
, volume
์์ฑ์ด ์ง์๋ฉ๋๋ค.
W3 ์ฌ์์ ๋ฐ๋ผ rate
๋ฐ volume
์์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. pitch
์์ฑ ๊ฐ์ ์ค์ ํ๋ ๋ฐ ์ธ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
์์ฑ | ์ค๋ช |
---|---|
name |
๊ฐ ํ์์ ๋ฌธ์์ด ID์ ๋๋ค. |
์ต์ | ์ค๋ช |
---|---|
์น์ฒ | ์๋ ๊ฐ(์: 'low', 'medium', 'high' ๋ฑ)์ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์ 'medium'์ ๊ธฐ๋ณธ ๋๋ฎ์ด์ ๋๋ค. |
๋ฐ์ | '+Nst' ๋๋ '-Nst'๋ฅผ ๊ฐ๊ฐ ์ฌ์ฉํ์ฌ 'N' ๋ฐ์์ฉ ๋๋ฎ์ด๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ด๋ฆฝ๋๋ค. '+/-' ๋ฐ 'st'๋ ํ์์ ๋๋ค. |
๋น์จ | '+N%' ๋๋ '-N%'๋ฅผ ๊ฐ๊ฐ ์ฌ์ฉํ์ฌ 'N' ํผ์ผํธ์ฉ ๋๋ฎ์ด๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ด๋ฆฝ๋๋ค. '%'๋ ํ์์ด์ง๋ง '+/-'๋ ์ ํ์ฌํญ์ ๋๋ค. |
prosody
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
๋ค์ ์์์์๋ <prosody>
์์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋ณด๋ค 2๋ฐ์ ๋ฎ์ถ์ด ๋๋ฆฌ๊ฒ ๋งํฉ๋๋ค.
<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<emphasis>
์์์ ํฌํจ๋ ํ
์คํธ์์ ๊ฐ์ธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. <emphasis>
์์๋ <prosody>
์ ์ ์ฌํ๊ฒ ์์ฑ์ ์์ ํ์ง๋ง ๊ฐ๋ณ ์์ฑ ์์ฑ์ ์ค์ ํ ํ์๊ฐ ์์ต๋๋ค.
์ด ์์๋ ๋ค์์ ์ ํจํ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ ํ์ 'level' ์์ฑ์ ์ง์ํฉ๋๋ค.
strong
moderate
none
reduced
emphasis
์์์ ๋ํ ์์ธํ ๋ด์ฉ์ W3 ์ฌ์์ ์ฐธ์กฐํ์ธ์.
์
๋ค์ ์์์์๋ <emphasis>
์์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์งํฉ๋๋ค.
<emphasis level="moderate">This is an important announcement</emphasis>
<par>
์ฌ๋ฌ ๋ฏธ๋์ด ์์๋ฅผ ํ ๋ฒ์ ์ฌ์ํ ์ ์๊ฒ ํด์ฃผ๋ ๋ณ๋ ฌ ๋ฏธ๋์ด ์ปจํ
์ด๋์
๋๋ค. ์ ์ผํ๊ฒ ํ์ฉ๋๋ ์ฝํ
์ธ ๋ <par>
, <seq>
, <media>
์์ ํ ๊ฐ ์ด์์ผ๋ก ๊ตฌ์ฑ๋ ์ธํธ์
๋๋ค. <media>
์์์ ์์๋ ์ค์ํ์ง ์์ต๋๋ค.
ํ์ ์์๊ฐ ๋ค๋ฅธ ์์ ์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด ์์์ ์๋ฌต์ ์์ ์๊ฐ์ <par>
์ปจํ
์ด๋์ ์์ ์๊ฐ๊ณผ ๋์ผํฉ๋๋ค. ํ์ ์์์ begin ๋๋ end ์์ฑ์ ์ค์ ๋ ์คํ์
๊ฐ์ด ์์ผ๋ฉด ์์์ ์คํ์
์ <par>
์ปจํ
์ด๋์ ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. ๋ฃจํธ <par>
์์์ ๊ฒฝ์ฐ begin ์์ฑ์ด ๋ฌด์๋๋ฉฐ, ์์ ์๊ฐ์ SSML ์์ฑ ํฉ์ฑ ํ๋ก์ธ์ค์์ ๋ฃจํธ <par>
์์(์ฆ, ์ฌ์ค์ '0' ์๊ฐ)์ ์ถ๋ ฅ ์์ฑ์ ์์ํ๋ ์๊ฐ์
๋๋ค.
์
<speak> <par> <media xml:id="question" begin="0.5s"> <speak>Who invented the Internet?</speak> </media> <media xml:id="answer" begin="question.end+2.0s"> <speak>The Internet was invented by cats.</speak> </media> <media begin="answer.end-0.2s" soundLevel="-6dB"> <audio src="https://actions.google.com/.../cartoon_boing.ogg"/> </media> <media repeatCount="3" soundLevel="+2.28dB" fadeInDur="2s" fadeOutDur="0.2s"> <audio src="https://actions.google.com/.../cat_purr_close.ogg"/> </media> </par> </speak>
<seq>
๋ฏธ๋์ด ์์๋ฅผ ํ๋์ฉ ์ฌ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์์ฐจ์ ๋ฏธ๋์ด ์ปจํ
์ด๋์
๋๋ค. ์ ์ผํ๊ฒ ํ์ฉ๋๋ ์ฝํ
์ธ ๋ <seq>
, <par>
, <media>
์์ ํ ๊ฐ ์ด์์ผ๋ก ๊ตฌ์ฑ๋ ์ธํธ์
๋๋ค. ๋ฏธ๋์ด ์์์ ์์๋ ๋ ๋๋ง๋๋ ์์์ ๊ฐ์ต๋๋ค.
ํ์ ์์์ begin ๋ฐ end ์์ฑ์ ์คํ์
๊ฐ์ผ๋ก ์ค์ ๋ ์ ์์ต๋๋ค(์๋์ ์๊ฐ ์ฌ์ ์ฐธ์กฐ). ์ด๋ฌํ ํ์ ์์์ ์คํ์
๊ฐ์ ์ํ์ค์์ ์ด์ ์์์ ๋ ์ง์ ์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. ์ํ์ค์ ์ฒซ ๋ฒ์งธ ์์์ ๊ฒฝ์ฐ <seq>
์ปจํ
์ด๋์ ์์ ์ง์ ์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
์
<speak> <seq> <media begin="0.5s"> <speak>Who invented the Internet?</speak> </media> <media begin="2.0s"> <speak>The Internet was invented by cats.</speak> </media> <media soundLevel="-6dB"> <audio src="https://actions.google.com/.../cartoon_boing.ogg"/> </media> <media repeatCount="3" soundLevel="+2.28dB" fadeInDur="2s" fadeOutDur="0.2s"> <audio src="https://actions.google.com/.../cat_purr_close.ogg"/> </media> </seq> </speak>
<media>
<par>
๋๋ <seq>
์์ ๋ด ๋ฏธ๋์ด ๋ ์ด์ด๋ฅผ ๋ํ๋
๋๋ค. <media>
์์์์ ํ์ฉ๋๋ ์ฝํ
์ธ ๋ SSML <speak>
๋๋ <audio>
์์์
๋๋ค. ๋ค์ ํ์์๋ <media>
์์์ ์ ํจํ ์์ฑ์ ์ค๋ช
ํฉ๋๋ค.
์์ฑ
์์ฑ | ํ์ | ๊ธฐ๋ณธ๊ฐ | ๊ฐ |
---|---|---|---|
xml:id | ์๋์ | ๊ฐ ์์ | ์ด ์์์ ๊ณ ์ ํ XML ์๋ณ์. ์ธ์ฝ๋ฉ๋ ํญ๋ชฉ์ ์ง์๋์ง ์์ต๋๋ค. ํ์ฉ๋๋ ์๋ณ์ ๊ฐ์ ์ ๊ท ํํ์ "([-_#]|\p{L}|\p{D})+" ์ ์ผ์นํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ XML-ID๋ฅผ ์ฐธ์กฐํ์ธ์. |
begin | ์๋์ | 0 | ์ด ๋ฏธ๋์ด ์ปจํ ์ด๋์ ์์ ์๊ฐ. ๋ฃจํธ ๋ฏธ๋์ด ์ปจํ ์ด๋ ์์(๊ธฐ๋ณธ๊ฐ '0'๊ณผ ๋์ผํ๊ฒ ์ทจ๊ธ๋จ)์ด๋ฉด ๋ฌด์๋ฉ๋๋ค. ์ ํจํ ๋ฌธ์์ด ๊ฐ์ ์๋์ ์๊ฐ ์ฌ์ ์น์ ์ ์ฐธ์กฐํ์ธ์. |
end | ์๋์ | ๊ฐ ์์ | ์ด ๋ฏธ๋์ด ์ปจํ ์ด๋์ ์ข ๋ฃ ์๊ฐ์ ๋ํ ์ฌ์. ์ ํจํ ๋ฌธ์์ด ๊ฐ์ ์๋์ ์๊ฐ ์ฌ์ ์น์ ์ ์ฐธ์กฐํ์ธ์. |
repeatCount | ์๋์ | 1 | ๋ฏธ๋์ด ์ฝ์ ํ์๋ฅผ ์ง์ ํ๋ ์ค์. ์์ ๋ฐ๋ณต์ ์ง์๋์ง ์์ผ๋ฏ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ์ ์๋ก ๊ฐ์ด ๋ฐ์ฌ๋ฆผ๋ฉ๋๋ค. 0์ ์ ํจํ ๊ฐ์ด ์๋๋ฏ๋ก ์ง์ ๋์ง ์์ ๊ฒ์ผ๋ก ์ทจ๊ธ๋๋ฉฐ ์ด ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ด ์ค์ ๋ฉ๋๋ค. |
repeatDur | ์๋์ | ๊ฐ ์์ | ์ฝ์ ๋ ๋ฏธ๋์ด์ ์ง์ ์๊ฐ์ ์ ํํ๋ TimeDesignation. ๋ฏธ๋์ด์ ์ง์ ์๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ง์ ๋ ์๊ฐ์ ์ฌ์์ด ์ข ๋ฃ๋ฉ๋๋ค. |
soundLevel | ์๋์ | +0dB | soundLevel ๋ฐ์๋ฒจ์ ์ฌ์ฉํ์ฌ ์ค๋์ค์ ์ฌ์ด๋ ๋ ๋ฒจ์ ์กฐ์ ํฉ๋๋ค. ์ต๋ ๋ฒ์๋ +/-40dB์ด์ง๋ง ์ค์ ๋ฒ์๋ ์ค์ง์ ์ผ๋ก ๋ ์์ผ๋ฉฐ, ์ ์ฒด ๋ฒ์์์ ์ถ๋ ฅ ํ์ง์ด ์ข์ง ์์ ์ ์์ต๋๋ค. |
fadeInDur | ์๋์ | 0์ด | ๋ฏธ๋์ด๊ฐ ๋ฌด์์์ ์์ํด ์ ํ์ ์ผ๋ก ์ง์ ๋ soundLevel ๋ก ํ์ด๋ ์ธํ๋ TimeDesignation. ๋ฏธ๋์ด์ ์ง์ ์๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ฌ์ ์ข
๋ฃ ์ ํ์ด๋ ์ธ์ด ์ค์ง๋๊ณ ์ฌ์ด๋ ๋ ๋ฒจ์ด ์ง์ ๋ ์ฌ์ด๋ ๋ ๋ฒจ์ ๋๋ฌํ์ง ์์ต๋๋ค. |
fadeOutDur | ์๋์ | 0์ด | ๋ฏธ๋์ด๊ฐ ์ ํ์ ์ผ๋ก ์ง์ ๋ soundLevel ์์ ์์ํด ๋ฌด์์ด ๋ ๋๊น์ง ํ์ด๋ ์์ํ๋ TimeDesignation. ๋ฏธ๋์ด์ ์ง์ ์๊ฐ์ด ์ด ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ฌ์ ์ข
๋ฃ ์ ๋ฌด์์ ๋๋ฌํ ์ ์๋๋ก ์ฌ์ด๋ ๋ ๋ฒจ์ด ๋ ๋ฎ์ ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. |
์๊ฐ ์ฌ์
<media>
์์์ ๋ฏธ๋์ด ์ปจํ
์ด๋(<par>
๋ฐ <seq>
์์)์ `begin`๊ณผ `end` ์์ฑ ๊ฐ์ ์ฌ์ฉ๋๋ ์๊ฐ ์ฌ์์ ์คํ์
๊ฐ(์: +2.5s
) ๋๋ syncbase ๊ฐ(์: foo_id.end-250ms
)์
๋๋ค.
- ์คํ์
๊ฐ - ์๊ฐ ์คํ์
๊ฐ์ ์ ๊ท ํํ์
"\s\*(+|-)?\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"
์ ์ผ์นํ๋ ๊ฐ์ ํ์ฉํ๋ SMIL Timecount ๊ฐ์ ๋๋ค.์ฒซ ๋ฒ์งธ ์ซ์ ๋ฌธ์์ด์ ์ญ์ง์์ ์ ์ฒด ๋ถ๋ถ์ด๊ณ ๋ ๋ฒ์งธ ์ซ์ ๋ฌธ์์ด์ ์ญ์ง์์ ์์ ๋ถ๋ถ์ ๋๋ค. ๊ธฐ๋ณธ ๊ธฐํธ(์: '(+|-)?')๋ '+'์ ๋๋ค. ๋จ์ ๊ฐ์ ๊ฐ๊ฐ ์, ๋ถ, ์ด, ๋ฐ๋ฆฌ์ด์ ํด๋นํฉ๋๋ค. ๋จ์์ ๊ธฐ๋ณธ๊ฐ์ 's'(์ด)์ ๋๋ค.
- Syncbase ๊ฐ - syncbase ๊ฐ์ ์ ๊ท ํํ์
"([-_#]|\p{L}|\p{D})+\.(begin|end)\s\*(+|-)\s\*(\d+)(\.\d+)?(h|min|s|ms)?\s\*"
์ ์ผ์นํ๋ ๊ฐ์ ํ์ฉํ๋ SMIL syncbase ๊ฐ์ ๋๋ค.์ซ์์ ๋จ์๋ ์คํ์ ๊ฐ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํด์๋ฉ๋๋ค.
<phoneme>
<phoneme>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ด์ ์ปค์คํ
๋ฐ์์ ์ธ๋ผ์ธ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. Text-to-Speech์๋ IPA ๋ฐ X-SAMPA ์์ฑ ๊ธฐํธ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ง์๋๋ ์ธ์ด ๋ฐ ์์ ๋ชฉ๋ก์ ์์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
<phoneme>
ํ๊ทธ๋ฅผ ํ ๋ฒ์ฉ ์ ์ฉํ์ฌ ๋จ์ผ ๋จ์ด์ ์์ฑ์ ์ง์ ํฉ๋๋ค.
<phoneme alphabet="ipa" ph="หmรฆnษชหtoสbษ">manitoba</phoneme> <phoneme alphabet="x-sampa" ph='m@"hA:g@%ni:'>mahogany</phoneme>
๊ฐ์ธ ํ์
์คํฌ๋ฆฝํธ์๋ ์ต๋ 3๊ฐ์ ๊ฐ์ธ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
- ์ฃผ ๊ฐ์ธ: IPA์ ๊ฒฝ์ฐ /ห/, X-SAMPA์ ๊ฒฝ์ฐ์๋ /"/๋ก ํ์๋ฉ๋๋ค.
- ๋ถ ๊ฐ์ธ: IPA์ ๊ฒฝ์ฐ /ห/, X-SAMPA์ ๊ฒฝ์ฐ์๋ /%/๋ก ํ์๋ฉ๋๋ค.
- ๊ฐ์ธ ์์: ๊ธฐํธ ๋๋ ํน์ ํ๊ธฐ๋ฒ์ผ๋ก ํ์๋์ง ์์ต๋๋ค.
์ผ๋ถ ์ธ์ด๋ ๊ฐ์ธ๊ฐ 3๊ฐ ๋ฏธ๋ง์ด๊ฑฐ๋ ๊ฐ์ธ ํ์๊ฐ ์ ํ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค. ํด๋น ์ธ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ธ๋ฅผ ๋ณด๋ ค๋ฉด ์์ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์. ๊ฐ์ธ ํ์๋ ๊ฐ์ธ๊ฐ ์๋ ๊ฐ ์์ ์ ์์ ๋ถ๋ถ์ ๋ฐฐ์น๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฏธ๊ตญ ์์ด์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๋จ์ด | IPA | X-SAMPA |
---|---|---|
water | หwษหtษ | "wA:t@` |
underwater | หสndษหwษหtษ | %Vnd@"wA:t@ |
ํฌ๊ด์ ํ๊ธฐ์ ํ์์ ํ๊ธฐ
์ผ๋ฐ์ ์ผ๋ก ํ๊ธฐ๋ ํฌ๊ด์ ์ด๊ณ ์์ฐ์ ์ธ ์์ฑ์ผ๋ก ํํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฏธ๊ตญ ์์ด์์๋ ํ์ค์์ ์ฌ์ฉํ๋ ๋์ ๋ชจ์ ์ฌ์ด์ ์ค๋ /t/๋ฅผ ํ๊ธฐํฉ๋๋ค.
์์ ๋จ์ด | IPA | X-SAMPA |
---|---|---|
butter | หbสษพษ ๋์ หbสtษ | "bV4@` ๋์ "bVt@` |
์ผ๋ถ ๊ฒฝ์ฐ์๋ ์์ฑ ํํ์ ์ฌ์ฉํจ์ผ๋ก์จ TTS ๊ฒฐ๊ณผ๊ฐ ๋ถ์์ฐ์ค๋ฝ๊ฒ ๋ค๋ฆด ์ ์์ต๋๋ค(์: ์ผ๋ จ์ ์์๊ฐ ํด๋ถํ์ ์ผ๋ก ๋ฐ์ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ).
์ด์ ๋ํ ํ ๊ฐ์ง ์๋ก ์์ด์์ /s/์ ๋ํํ์์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฌํ ๋ํํ์์ ํ๊ธฐ์ ๋ฐ์ํด์ผ ํฉ๋๋ค.
์์ ๋จ์ด | IPA | X-SAMPA |
---|---|---|
๊ณ ์์ด | หkรฆts | "k{ts |
๊ฐ | หdษหgs ๋์ หdษหgz | "dA:gs ๋์ "dA:gz |
์ ๊ฐ
๋ชจ๋ ์์ ์ ํ๋(๊ทธ๋ฆฌ๊ณ ๋จ ํ๋)์ ๋ชจ์์ ํฌํจํด์ผ ํฉ๋๋ค. ์ฆ ์์ ์์ ์ฌ์ฉ์ ํผํ๊ณ ๋์ ์ด๋ฅผ ์ฝํ๋ ๋ชจ์์ผ๋ก ํ๊ธฐํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๋จ์ด | IPA | X-SAMPA |
---|---|---|
kitten | หkษชtn ๋์ หkษชtษn | "kitn ๋์ "kIt@n |
kettle | หkษtl ๋์ หkษtษl | "kEtl ๋์ "kEt@l |
์์ ๊ตฌ๋ถ
์ ํ์ ์ผ๋ก /./๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๊ฒฝ๊ณ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๊ฐ ์์ ์ ํ๋(๊ทธ๋ฆฌ๊ณ ๋จ ํ๋)์ ๋ชจ์์ ํฌํจํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๋จ์ด | IPA | X-SAMPA |
---|---|---|
๊ฐ๋ ์ฑ | หษนiห.dษ.หbษช.lษ.tiห | %r\i:.d@."bI.l@.ti: |
์ปค์คํ ๋ฐ์ ์ฌ์
phoneme
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์์ ์ธ๋ผ์ธ์ผ๋ก ์ ๊ณตํ๋ ๋์ ์์ฑ ํฉ์ฑ RPC์ ์ปค์คํ
๋ฐ์ ์ฌ์ ์ ์ ๊ณตํ์ธ์. ์ปค์คํ
๋ฐ์ ์ฌ์ ์ด ์์ฒญ์ ํฌํจ๋ ๊ฒฝ์ฐ SSML phoneme
ํ๊ทธ์ ๋ฐ๋ผ ์
๋ ฅ ํ
์คํธ๊ฐ ์๋์ผ๋ก ์กฐ์ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ ์คํธ ์ ๋ ฅ๊ณผ ์ปค์คํ ๋ฐ์์ด ํฌํจ๋ ๋ค์ ์์ฒญ์ ์๋ ํ์๋ SSML์ ๋ง๊ฒ ์๋์ผ๋ก ๋ณํ๋ฉ๋๋ค.
์๋ ์ ๋ ฅ:
input: { text: 'Hello world! It is indeed a beautiful world!', custom_pronunciations: { pronunciations: { phrase: 'world' phonetic_encoding: PHONETIC_ENCODING_IPA pronunciation: 'wษหld' } } }
๋ณํ๋ ์ ๋ ฅ:
input: { ssml: '<speak>Hello <phoneme alphabet="ipa" ph="wษหld">world</phoneme>! It is indeed a beautiful <phoneme alphabet="ipa" ph="wษหld">world</phoneme>!</speak>' }
๊ธฐ๊ฐ
Text-to-Speech๋ <say-as interpret-as="duration">
์ ์ง์ํ์ฌ ๊ธฐ๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์ ์์๋ "five hours and thirty minutes"๋ก ์์ฑ ๋ณํ๋ฉ๋๋ค.
<say-as interpret-as="duration" format="h:m">5:30</say-as>
ํ์ ๋ฌธ์์ด์๋ ๋ค์ ๊ฐ์ด ์ง์๋ฉ๋๋ค.
์ฝ์ด | ๊ฐ |
---|---|
h | ์๊ฐ |
m | ๋ถ |
s | ์ด |
ms | ๋ฐ๋ฆฌ์ด |
<voice>
<voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ผ SSML ์์ฒญ์ ์์ฑ์ ๋ ๊ฐ์ง ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์ ์์์์ ๊ธฐ๋ณธ ์์ฑ์ ๋จ์ ์์ด ์์ฑ์
๋๋ค.
์ด ์์ฑ์์๋ ์ฌ์ ์์ฑ์ผ๋ก ํ๋์ค์ด๋ก ๋ฐ์๋๋ "qu'est-ce qui t'amรจne ici"๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๋จ์ด๊ฐ ๊ธฐ๋ณธ ์ธ์ด(์์ด) ๋ฐ ์ฑ๋ณ(๋จ์ฑ)๋ก ํฉ์ฑ๋ฉ๋๋ค.
<speak>And then she asked, <voice language="fr-FR" gender="female">qu'est-ce qui t'amรจne ici</voice><break time="250ms"/> in her sweet and gentle voice.</speak>
๋๋ language
๋๋ gender
๋ฅผ ์ง์ ํ๋ ๋์ <voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ์์ฑ(์ง์๋๋ ์์ฑ ํ์ด์ง์ ์์ฑ ์ด๋ฆ)์ ์ง์ ํ ์ ์์ต๋๋ค.
<speak>The dog is friendly<voice name="fr-CA-Wavenet-B">mais la chat est mignon</voice><break time="250ms"/> said a pet shop owner</speak>
<voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋ Text-to-Speech๋ name
(์ฌ์ฉํ๋ ค๋ ์์ฑ ์ด๋ฆ) ๋๋ ๋ค์ ์์ฑ์ ์กฐํฉ์ด ์
๋ ฅ๋๊ธฐ๋ฅผ ์์ํฉ๋๋ค. ์ธ ๊ฐ์ง ์์ฑ ๋ชจ๋ ์ ํ์ฌํญ์ด์ง๋ง name
์ ์ ๊ณตํ์ง ์์ ๊ฒฝ์ฐ ์ต์ํ ์
์ค ํ๋๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
gender
: "male", "female", "neutral" ์ค ํ๋์ ๋๋ค.variant
: ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ์์ฑ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๊ฒฐ์ ์๋ก ์ฌ์ฉ๋ฉ๋๋ค.language
: ์ํ๋ ์ธ์ด์ ๋๋ค. ์ ๊ณต๋<voice>
ํ๊ทธ์ ์ธ์ด๋ฅผ ํ๋๋ง ์ง์ ํ ์ ์์ต๋๋ค. ์ธ์ด๋ BCP-47 ํ์์ผ๋ก ์ง์ ํฉ๋๋ค. ์ง์๋๋ ์์ฑ ๋ฐ ์ธ์ด ํ์ด์ง์ ์ธ์ด ์ฝ๋ ์ด์์ ํด๋น ์ธ์ด์ BCP-47 ์ฝ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋ํ ๋ ๊ฐ์ง ์ถ๊ฐ ํ๊ทธ์ธ required
๋ฐ ordering
์ ์ฌ์ฉํ์ฌ gender
, variant
, language
์์ฑ์ ์๋์ ์ฐ์ ์์๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
required
: ์์ฑ์ดrequired
๋ก ์ง์ ๋์๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ง ์์์ผ๋ฉด ์์ฒญ์ด ์คํจํฉ๋๋ค.ordering
:ordering
ํ๊ทธ๊ฐ ํ์๊ฐ ์๋ ์ ํธ ์์ฑ์ผ๋ก ๊ฐ์ฃผ๋ ๋ค์์ ๋์ด๋๋ ๋ชจ๋ ์์ฑ์ ๋๋ค. ์ ํธ ์์ฑ์ ๋ํด Text-to-Speech API๋ordering
ํ๊ทธ ๋ค์์ ๋์ด๋ ์์๋ก ๊ฐ๋ฅํ ๋ถ๋ถ๊น์ง ์ต๋ํ ์ ํธ ์์ฑ์ ์ ์ฉํฉ๋๋ค. ์ ํธ ์์ฑ์ด ์๋ชป ๊ตฌ์ฑ๋์์ผ๋ฉด Text-to-Speech๊ฐ ์๋ชป๋ ์์ฑ์ ๋ฐํํ ์ ์๋๋ผ๋, ์๋ชป๋ ๊ตฌ์ฑ์ด ์ญ์ ๋ฉ๋๋ค.
required
๋ฐ ordering
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์:
<speak>And there it was <voice language="en-GB" gender="male" required="gender" ordering="gender language">a flying bird </voice>roaring in the skies for the first time.</speak>
<speak>Today is supposed to be <voice language="en-GB" gender="female" ordering="language gender">Sunday Funday.</voice></speak>
<lang>
<lang>
์ ์ฌ์ฉํ๋ฉด ๋์ผํ SSML ์์ฒญ ๋ด์์ ์ฌ๋ฌ ์ธ์ด๋ก ํ
์คํธ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. <voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ๋ช
์์ ์ผ๋ก ๋ณ๊ฒฝํ์ง ์๋ ํ ๋ชจ๋ ์ธ์ด๊ฐ ๋์ผํ ์์ฑ์ ํฉ์ฑ๋ฉ๋๋ค. xml:lang
๋ฌธ์์ด์๋ ๋์ฐฉ์ด๊ฐ BCP-47 ํ์(์ด ๊ฐ์ ์ง์๋๋ ์์ฑ ํ
์ด๋ธ์์ "์ธ์ด ์ฝ๋"๋ก ๋์ด๋จ)์ผ๋ก ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๋ค์ ์์์์ "chat"๋ ๊ธฐ๋ณธ ์ธ์ด(์์ด) ๋์ ํ๋์ค์ด๋ก ์์ฑ ๋ณํ๋ฉ๋๋ค.
<speak>The french word for cat is <lang xml:lang="fr-FR">chat</lang></speak>
Text-to-Speech๋ ๊ฐ๋ฅํ ๋ถ๋ถ๊น์ง ์ต๋ํ์ผ๋ก <lang>
ํ๊ทธ๋ฅผ ์ง์ํฉ๋๋ค. ๋์ผํ SSML ์์ฒญ์ ์ง์ ๋์๋๋ผ๋ ๋ชจ๋ ์ธ์ด ์กฐํฉ์ด ๋์ผํ ํ์ง ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง๋ ์์ต๋๋ค. ์ผ๋ถ ๊ฒฝ์ฐ์๋ ์ธ์ด ์กฐํฉ์ผ๋ก ์ธํด ๊ฐ์งํ ์ ์์ง๋ง ๋ฏธ๋ฌํ๊ฑฐ๋ ๋ถ์ ์ ์ผ๋ก ์ธ์๋๋ ํจ๊ณผ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ์๋ ค์ง ๋ฌธ์ :
- ๊ฐ์ง ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ณธ์ด๋
<lang>
ํ๊ทธ๊ฐ ์ง์๋์ง ์์ต๋๋ค. ์ ๋ ฅ์ ํ์๋ก ์์ญ๋๊ณ ์ฝํ์ง๋๋ค. - ์๋์ด, ํ๋ธ๋ฆฌ์ด, ํ๋ฅด์์์ด์ ๊ฐ์ ์
์กฑ ์ด๊ตฐ์ ์ธ์ด๋
<lang>
ํ๊ทธ๊ฐ ์ง์๋์ง ์์ผ๋ฉฐ ๋ฌด์ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด๋ฌํ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด<voice>
ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ์ํ๋ ์ธ์ด๋ก ๋ฐ์๋๋(๊ฐ๋ฅํ ๊ฒฝ์ฐ) ์์ฑ์ผ๋ก ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
SSML ํ์ํฌ์ธํธ
Text-to-Speech API๋ ์์ฑ๋ ์ค๋์ค ๋ฐ์ดํฐ์์ ํ์ํฌ์ธํธ ์ฌ์ฉ์ ์ง์ํฉ๋๋ค. ํ์ํฌ์ธํธ๋ ์คํฌ๋ฆฝํธ์ ์ง์ ๋ ์ง์ ์ ํด๋นํ๋ ํ์์คํฌํ์
๋๋ค. ์์ฑ๋ ์ค๋์ค์ ์์ ๋ถ๋ถ๋ถํฐ ์ด ๋จ์๋ก ์ธก์ ๋ฉ๋๋ค. <mark>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ์ ํ์ํฌ์ธํธ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์ค๋์ค๊ฐ ์์ฑ๋๋ฉด API๋ ์ค๋์ค ์์ ๋ถ๋ถ๊ณผ ํ์ํฌ์ธํธ ๊ฐ์ ํ์์คํฌํ๋ฅผ ๋ฐํํฉ๋๋ค.
ํ์ํฌ์ธํธ๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ ๋จ๊ณ๋ฅผ ์ํํด์ผ ํฉ๋๋ค.
- ์คํฌ๋ฆฝํธ์์ ํ์์คํฌํ๋ฅผ ์ค์ ํ๋ ค๋ ์์ ์
<mark>
SSML ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค. - TimepointType์
SSML_MARK
๋ก ์ค์ ํฉ๋๋ค. ์ด ํ๋๊ฐ ์ค์ ๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํฌ์ธํธ๊ฐ ๋ฐํ๋์ง ์์ต๋๋ค.
๋ค์ ์์๋ ๋ ๊ฐ์ง ํ์ํฌ์ธํธ๋ฅผ ๋ฐํํฉ๋๋ค.
- timepoint_1: "Mark" ๋จ์ด๊ฐ ์์ฑ๋ ์ค๋์ค์ ๋ํ๋๋ ์๊ฐ(์ด)์ ๋ํ๋ ๋๋ค.
- timepoint_2: "see" ๋จ์ด๊ฐ ์์ฑ๋ ์ค๋์ค์ ๋ํ๋๋ ์๊ฐ(์ด)์ ๋ํ๋ ๋๋ค.
<speak>Hello <mark name="timepoint_1"/> Mark. Good to <mark name="timepoint_2"/> see you.</speak>
์คํ์ผ
๋ค์ ์์ฑ์ ์ฌ๋ฌ ์คํ์ผ๋ก ๋งํ ์ ์์ต๋๋ค.- en-US-Neural2-F
- en-US-Neural2-J
<google:style>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์คํ์ผ์ ์ ์ดํฉ๋๋ค. ์ ์ฒด ๋ฌธ์ฅ์๋ง ํ๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์:
<speak><google:style name="lively">Hello I'm so happy today!</google:style></speak>
name
ํ๋๋ ๋ค์ ๊ฐ์ ์ง์ํฉ๋๋ค.
apologetic
calm
empathetic
firm
lively