CD / docs /TTS_ROUTE_GUIDANCE_VALIDATION.md
tkadkghdlf's picture
Sync from GitHub via hub-sync
9c47375 verified
|
Raw History Blame Contribute Delete
5.95 kB

TTS ๊ธฐ๋Šฅ ๋ฐ ๊ฒฝ๋กœ ์•ˆ๋‚ด ๊ฒ€์ฆ ๊ธฐ์ค€

1. ์ œ๊ณต TTS์™€ ์ถœ๋ ฅ ๊ธฐ์ค€

๋ชจ๋“  ๋Ÿฌ๋‹ ์Œ์„ฑ์€ ์›น ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ์Œ์„ฑ์ด ์•„๋‹Œ myshell-ai/MeloTTS-Korean์˜ WAV ์‘๋‹ต์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ”„๋ŸฐํŠธ์—”๋“œ๋Š” POST /api/v1/ai/tts/korean์— { "text": "...", "speed": 1.5 }๋ฅผ ์š”์ฒญํ•˜๊ณ , ์‘๋‹ต์„ Object URL๋กœ ์บ์‹œํ•œ ๋’ค ํ•˜๋‚˜์˜ ์žฌ์ƒ ๋Œ€๊ธฐ์—ด์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์žฌ์ƒํ•œ๋‹ค. ๋ชจ๋ธ ์˜ค๋ฅ˜ ์‹œ ํ•ด๋‹น ์•ˆ๋‚ด๋งŒ ๊ฑด๋„ˆ๋›ฐ๋ฉฐ OS TTS๋กœ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ธฐ๋Šฅ ์ถœ๋ ฅ ๊ธฐ์ค€ ์Œ์„ฑ ํ…์ŠคํŠธ
๊ฒฝ๋กœ ๊ฐˆ๋ฆผ๊ธธ ์•ˆ๋‚ด ์ƒ์„ฑ๋œ OSM ๋„๋กœ ๊ทธ๋ž˜ํ”„์—์„œ ์ง„์ž… ๋ฐฉํ–ฅ์„ ์ œ์™ธํ•œ ์„ ํƒ์ง€๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๊ณ , ์„ ํƒ ๊ฒฝ๋กœ๊ฐ€ ์ขŒ/์šฐ๋กœ 30150๋„ ๊บพ์ด๋Š” ์ง€์ ๋งŒ ๋“ฑ๋กํ•œ๋‹ค. ์„ ํƒ ๊ฒฝ๋กœ์—์„œ 250m ์ด๋‚ด์— ๋“ค์–ด์˜ค๋ฉด WAV๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•˜๊ณ , GPS๊ฐ€ ๊ฒฝ๋กœ์—์„œ 45m ์ด๋‚ด์ด๋ฉฐ ํ•ด๋‹น ์ง€์  65m ์ „12m ์ง€๋‚œ ๋ฒ”์œ„์— ์žˆ์„ ๋•Œ 1ํšŒ ์•ˆ๋‚ดํ•œ๋‹ค. 60m ์ด๋‚ด์— ์—ฐ์†๋œ ๋ถ„๊ธฐ์ ์€ ์ค‘๋ณต ๋“ฑ๋กํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž ์‹œ ํ›„ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ์ขŒํšŒ์ „ํ•˜์„ธ์š”. ๋˜๋Š” ์ž ์‹œ ํ›„ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ์šฐํšŒ์ „ํ•˜์„ธ์š”.
์‹ค์‹œ๊ฐ„ ์„ผ์„œ ์ฝ”์นญ ์›Œ์น˜ live-state๋ฅผ 5์ดˆ๋งˆ๋‹ค ์ฝ๋Š”๋‹ค. ๊ฐ™์€ ํ•ญ๋ชฉ์€ 120์ดˆ, ๋‹ค๋ฅธ ํ•ญ๋ชฉ์€ 90์ดˆ ์žฌ์•ˆ๋‚ดํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹ฌ๋ฐ• ์ƒ์Šน โ†’ ์ผ€์ด๋˜์Šค โ†’ ์ขŒ์šฐ ๋น„๋Œ€์นญ โ†’ ์ ‘์ง€ ์‹œ๊ฐ„ โ†’ ์ƒํ•˜ ์›€์ง์ž„ ์ˆœ์„œ๋‹ค. ์•„๋ž˜ ์„ผ์„œ ์ฝ”์นญ ๋ฌธ๊ตฌ ์ฐธ์กฐ
1km ์™„๋ฃŒ ์‹ค์ œ/์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ด๋™ ๊ฑฐ๋ฆฌ๋กœ ์ƒˆ ์ •์ˆ˜ km๋ฅผ ๋„˜์„ ๋•Œ ๊ฐ km๋งˆ๋‹ค 1ํšŒ. {n}ํ‚ฌ๋กœ๋ฏธํ„ฐ๋ฅผ ์™„๋ฃŒํ–ˆ์–ด์š”. ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ {์‹œ๊ฐ„}, ํ‰๊ท  ์†๋„๋Š” {์†๋„}์ž…๋‹ˆ๋‹ค.
์ ˆ๋ฐ˜ ์„ ํƒ ์ฝ”์Šค ๋ชฉํ‘œ ๊ฑฐ๋ฆฌ์˜ 50%๋ฅผ ์ฒ˜์Œ ๋„˜์„ ๋•Œ 1ํšŒ. ์ ˆ๋ฐ˜ ์ง€์ ์— ๋„๋‹ฌํ–ˆ์–ด์š”! ์ง€๊ธˆ์ฒ˜๋Ÿผ๋งŒ ์œ ์ง€ํ•ด์„œ ๋๊นŒ์ง€ ์ด์–ด๊ฐ€๋ณด์„ธ์š”!
๋ชฉํ‘œ 500m ์ „ ๋ชฉํ‘œ ๊ฑฐ๋ฆฌ๊ฐ€ 0.5km๋ณด๋‹ค ๊ธธ๊ณ  ๋ชฉํ‘œ - 0.5km๋ฅผ ์ฒ˜์Œ ๋„˜์„ ๋•Œ 1ํšŒ. ๋ชฉํ‘œ์น˜์— ๊ฑฐ์˜ ๋‹ค ๋„๋‹ฌํ–ˆ์–ด์š”! ์กฐ๊ธˆ๋งŒ ๋” ํž˜๋‚ด์„ธ์š”!
๋ชฉํ‘œ ๋‹ฌ์„ฑ ์„ ํƒ ์ฝ”์Šค ๋ชฉํ‘œ ๊ฑฐ๋ฆฌ๋ฅผ ์ฒ˜์Œ ๋„˜์„ ๋•Œ 1ํšŒ. ์ถ•ํ•˜๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์–ด์š”! ์ด ๊ฑฐ๋ฆฌ {๊ฑฐ๋ฆฌ}, ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ {์‹œ๊ฐ„}, ํ‰๊ท  ์†๋„๋Š” {์†๋„}์ž…๋‹ˆ๋‹ค.

์„ผ์„œ ์ฝ”์นญ ๋ฌธ๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ˜„์žฌ ์‹ฌ๋ฐ•์ด ํ‰๊ท ๋ณด๋‹ค 12bpm ์ด์ƒ ๋†’๊ณ  ํ‰๊ท ์ด 120bpm ์ด์ƒ: ํ˜„์žฌ ์‹ฌ๋ฐ•์ด ์ด๋ฒˆ ๋Ÿฌ๋‹ ํ‰๊ท ๋ณด๋‹ค ์˜ฌ๋ผ๊ฐ”์–ด์š”. ๋ณดํญ์„ ์กฐ๊ธˆ ์ค„์ด๊ณ  ํŽธํ•œ ํ˜ธํก์œผ๋กœ ์†๋„๋ฅผ ์กฐ์ ˆํ•ด ๋ณด์„ธ์š”.
  • ํ‰๊ท  ์ผ€์ด๋˜์Šค๊ฐ€ 150spm ๋ฏธ๋งŒ: ๋Ÿฌ๋‹ ๋ฆฌ๋“ฌ์ด ๋А๋ ค์กŒ์–ด์š”. ๋ณดํญ์„ ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋Š˜๋ฆฌ์ง€ ๋ง๊ณ  ๋ฐœ์„ ์งง๊ณ  ๊ฐ€๋ณ๊ฒŒ ์˜ฎ๊ฒจ ๋ณด์„ธ์š”.
  • ์ขŒ์šฐ ๋น„๋Œ€์นญ์ด 8% ์ด์ƒ: ์ขŒ์šฐ ๋ฆฌ๋“ฌ์ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ ๊ธฐ๋ก๋˜๊ณ  ์žˆ์–ด์š”. ์†๋„๋ฅผ ์กฐ๊ธˆ ๋‚ฎ์ถ”๊ณ  ๊ท ํ˜• ์žˆ๋Š” ๋ฐœ๊ฑธ์Œ์„ ํ™•์ธํ•ด ๋ณด์„ธ์š”.
  • ํ‰๊ท  ์ ‘์ง€ ์‹œ๊ฐ„์ด 310ms ์ด์ƒ: ๋ฐœ์ด ์ง€๋ฉด์— ๋จธ๋ฌด๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์กŒ์–ด์š”. ์ง€๋ฉด์„ ๊ฐ€๋ณ๊ฒŒ ๋ฐ€๊ณ  ๋‹ค์Œ ๋ฐœ๋กœ ๋„˜์–ด๊ฐ€ ๋ณด์„ธ์š”.
  • ํ‰๊ท  ์ƒํ•˜ ์›€์ง์ž„์ด 10.5cm ์ด์ƒ: ์œ„์•„๋ž˜ ์›€์ง์ž„์ด ์ปค์กŒ์–ด์š”. ์‹œ์„ ์€ ์ •๋ฉด์— ๋‘๊ณ  ์•ž์œผ๋กœ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋‚˜์•„๊ฐ€ ๋ณด์„ธ์š”.

2. ๊ฒฝ๋กœ ์ƒ์„ฑ๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€์˜ ๊ฒ€์ฆ ์‹œ๋‚˜๋ฆฌ์˜ค

  1. /route-results์—์„œ 1km ์ด์ƒ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์š”์ฒญ์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ API ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๊ณ ์ • ์‹œ๊ฐ„์œผ๋กœ ์ทจ์†Œ๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  2. ์ƒ์„ฑ ์‘๋‹ต์˜ ๊ฐ routes[].maneuvers๊ฐ€ id, point, turn, branch_count, distance_from_start_m์„ ๊ฐ–๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. branch_count๋Š” 2 ์ด์ƒ์ด์–ด์•ผ ํ•˜๊ณ  turn์€ left ๋˜๋Š” right์—ฌ์•ผ ํ•œ๋‹ค.
  3. ์ถ”์ฒœ ๊ฒฝ๋กœ ์ƒ์„ธ ํ™”๋ฉด์—์„œ ๋‹ฌ๋ฆฌ๊ธฐ ์‹œ์ž‘์„ ์„ ํƒํ•œ๋‹ค. ์„ ํƒ ๊ฒฝ๋กœ์™€ maneuvers๊ฐ€ sessionStorage์— ํ•จ๊ป˜ ๋ณด๊ด€๋˜๊ณ , TWA/Wear ์ „๋‹ฌ payload์—๋„ ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ์‹ค์ œ GPS ๋˜๋Š” simulate=1์œผ๋กœ ์„ ํƒ ๊ฒฝ๋กœ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ์ฒซ ๊ฐˆ๋ฆผ๊ธธ ์•ฝ 65m ์ „์— ํ•œ ๋ฒˆ๋งŒ ํ•ด๋‹น ์ขŒ/์šฐํšŒ์ „ ์Œ์„ฑ์ด ์žฌ์ƒ๋˜๊ณ , ์ง€๋‚˜๊ฐ„ ๋’ค์—๋Š” ๋Šฆ์€ ์•ˆ๋‚ด๊ฐ€ ์žฌ์ƒ๋˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‹ค์Œ ๊ฐˆ๋ฆผ๊ธธ๋„ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ํ™•์ธํ•œ๋‹ค.
  5. ์›Œ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ live-state๋ฅผ ๋ณด๋‚ด ์„ผ์„œ ์ฝ”์นญ์˜ ์šฐ์„ ์ˆœ์œ„์™€ 90/120์ดˆ ์žฌ์•ˆ๋‚ด ์ œํ•œ์„ ํ™•์ธํ•œ๋‹ค. ๊ฒฝ๋กœ ์•ˆ๋‚ด์™€ ์„ผ์„œ ์•ˆ๋‚ด๊ฐ€ ๊ฒน์น˜๋ฉด WAV ์žฌ์ƒ ๋Œ€๊ธฐ์—ด์—์„œ ์ˆœ์ฐจ ์žฌ์ƒ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  6. 1km, ์ ˆ๋ฐ˜, ๋ชฉํ‘œ 500m ์ „, ๋ชฉํ‘œ ๋‹ฌ์„ฑ ๊ธฐ์ค€์„ ์ฐจ๋ก€๋กœ ๋„˜๊ฒจ ๊ฑฐ๋ฆฌ ์•ˆ๋‚ด ๋ฌธ๊ตฌ์™€ ์‹ค์ œ ํ‘œ์‹œ ๊ฑฐ๋ฆฌ/์‹œ๊ฐ„์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  7. ์ •์ง€ ๋ฒ„ํŠผ์„ ๊ธธ๊ฒŒ ๋ˆŒ๋Ÿฌ ์ข…๋ฃŒํ•œ๋‹ค. TWA/Wear ์‹คํ–‰์€ ์›Œ์น˜์˜ POST /runs ์ €์žฅ๋ณธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ๊ฒฐ๊ณผยท์บ˜๋ฆฐ๋”ยท์‹ค์ œ ์ด๋™ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ run_id๋กœ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

3. ํ˜„์žฌ ๊ฒ€์ฆ ์ƒํƒœ

  • ํ”„๋ŸฐํŠธ์—”๋“œ npm run build: ํ†ต๊ณผ.
  • ๊ฒฝ๋กœ ์•ˆ๋‚ด ํŒ๋‹จ๊ณผ TTS ํ˜ธ์ถœ ์—ฐ๊ฒฐ: TypeScript ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ ํ†ต๊ณผ.
  • ๋กœ์ปฌ API ๊ฒŒ์ดํŠธ์›จ์ด ๊ฒฝ๋กœ ์ƒ์„ฑ: HTTP 200์œผ๋กœ ๊ฒฝ๋กœ 2๊ฐœ์™€ maneuvers 15๊ฐœ๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค. ํ‘œ๋ณธ์˜ ๋ชจ๋“  ๊ฐˆ๋ฆผ๊ธธ์€ branch_count 2 ์ด์ƒ, turn์€ left ๋˜๋Š” right์˜€๋‹ค.
  • MeloTTS: ์ž ์‹œ ํ›„ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ์šฐํšŒ์ „ํ•˜์„ธ์š”. ์š”์ฒญ์ด audio/wav(222,120๋ฐ”์ดํŠธ)๋กœ ์ •์ƒ ์‘๋‹ตํ–ˆ๋‹ค.
  • ๋ฐฐํฌ API ๊ฒŒ์ดํŠธ์›จ์ด ๊ฒฝ๋กœ ์ƒ์„ฑ: HTTP 200์œผ๋กœ ๊ฒฝ๋กœ 1๊ฐœ์™€ ์ขŒ 1ยท์šฐ 2, ์ด 3๊ฐœ์˜ ๊ฐˆ๋ฆผ๊ธธ์„ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.
  • ๋ฐฐํฌ MeloTTS: ์ž ์‹œ ํ›„ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ์ขŒํšŒ์ „ํ•˜์„ธ์š”. ์š”์ฒญ์ด audio/wav(225,192๋ฐ”์ดํŠธ)๋กœ ์ •์ƒ ์‘๋‹ตํ–ˆ๋‹ค.
  • ์›Œ์น˜-ํœด๋Œ€ํฐ Data Layer: Galaxy Watch6 ์—ฐ๊ฒฐ, ๋Ÿฌ๋‹ ์‹œ์ž‘ ๋ช…๋ น ๋ฐ ์ง„ํ–‰ ์ƒํƒœ ์ˆ˜์‹ ์„ ์‹ค๊ธฐ๊ธฐ๋กœ ํ™•์ธํ–ˆ๋‹ค.
  • ์›Œ์น˜ ์ข…๋ฃŒ: ์ž ๊ธˆ์„ ์šฐํšŒํ•˜์ง€ ์•Š๋Š” ๊ณต์‹ Data Layer ์ œ์–ด ๋”ฅ๋งํฌ๋กœ stop ๋ช…๋ น์„ ์ „์†กํ–ˆ๋‹ค. ๋‹ค๋งŒ ํœด๋Œ€ํฐ์ด ๋ณด์•ˆ ์ž ๊ธˆ ์ƒํƒœ๊ฐ€ ๋˜์–ด ์ข…๋ฃŒ ํ™”๋ฉดยท์š”์•ฝ ์—…๋กœ๋“œ ์™„๋ฃŒ ACK์™€ ์‹ค์ œ GPS ๊ฐˆ๋ฆผ๊ธธ์—์„œ์˜ ์Šคํ”ผ์ปค ์ฒญ์ทจ๋Š” ์ด ์„ธ์…˜์—์„œ ํŒ์ •ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ์ด ๋‘ ํ•ญ๋ชฉ๋งŒ ๋‹ค์Œ ์ž ๊ธˆ ํ•ด์ œ ์ƒํƒœ์˜ ์‹ค์™ธ ๋Ÿฌ๋‹์—์„œ ์œ„ ์‹œ๋‚˜๋ฆฌ์˜ค 4~7๋‹จ๊ณ„๋กœ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.