From cb0094561240766ecc001e1a1a4b99d50bca8c9e Mon Sep 17 00:00:00 2001 From: jwkim Date: Thu, 27 Aug 2026 10:24:12 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=80=EC=82=AC=20=ED=95=9C=EA=B8=80?= =?UTF-8?q?=ED=99=94=EC=97=90=EC=84=9C=20[=EC=84=B9=EC=85=98=20=ED=83=9C?= =?UTF-8?q?=EA=B7=B8]=20=EC=A0=9C=EC=99=B8=20=E2=80=94=20Suno=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=9D=B8=EC=8B=9D=20=EB=B3=B4=EC=A1=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- backend/app/services/songs.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/app/services/songs.py b/backend/app/services/songs.py index 24557d9..64aaa3b 100644 --- a/backend/app/services/songs.py +++ b/backend/app/services/songs.py @@ -506,10 +506,18 @@ def _native(n: int) -> str: def hangulize_numbers(text: str) -> str: - """가사 속 아라비아 숫자를 전부 한글 발음으로 치환. + """가사 속 아라비아 숫자를 한글 발음으로 치환 (Suno 전송본 전용). 1승→일승, 78승→칠십팔승, 7게임→일곱 게임, 5:3→오 대 삼, 0.312→영점삼일이. + [Verse 1] 같은 섹션 태그는 Suno 구조 인식용이라 건드리지 않는다. """ + parts = re.split(r"(\[[^\]]*\])", text) + return "".join( + p if p.startswith("[") else _hangulize_plain(p) for p in parts + ) + + +def _hangulize_plain(text: str) -> str: # 소수(타율 등): 0.312 → 영점삼일이 (소수부는 자리별 낭독) text = re.sub( r"(\d)\.(\d+)",