From 0e86636354d44ca06bef78ff3df036df976ff94b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sun, 8 Mar 2026 14:05:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[sound-logo]=20=EC=95=84=EC=9D=B4=20?= =?UTF-8?q?=EB=AA=A9=EC=86=8C=EB=A6=AC=20=EC=98=B5=EC=85=98=20+=20?= =?UTF-8?q?=EB=A7=90=ED=95=98=EA=B8=B0=20=EC=86=8D=EB=8F=84=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=88=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 스타일 옵션에 어린이(5~7세), 초등학생(8~12세), 청소년(13~18세) 추가 - 말하기 속도 슬라이더 추가 (매우느리게~매우빠르게 5단계) - 속도와 스타일을 TTS 프롬프트 지시문으로 조합하여 Gemini API에 전달 - 음성 목록 여성/남성/중성 순서로 정렬 --- app/Http/Controllers/RdController.php | 25 ++++++++++++++--- resources/views/rd/sound-logo/index.blade.php | 28 ++++++++++++++----- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/RdController.php b/app/Http/Controllers/RdController.php index 3f70fc9a..cfa5ab42 100644 --- a/app/Http/Controllers/RdController.php +++ b/app/Http/Controllers/RdController.php @@ -487,6 +487,7 @@ public function soundLogoTts(Request $request): JsonResponse 'text' => 'required|string|max:200', 'voice_name' => 'nullable|string|max:30', 'voice_style' => 'nullable|string|max:100', + 'voice_speed' => 'nullable|integer|min:1|max:5', ]); $apiKey = config('services.gemini.api_key'); @@ -498,13 +499,29 @@ public function soundLogoTts(Request $request): JsonResponse $voiceName = $request->voice_name ?: 'Kore'; $voiceStyle = $request->voice_style ?: ''; + $voiceSpeed = $request->voice_speed ?: 3; + + // 속도 지시문 매핑 + $speedDirectives = [ + 1 => '아주 천천히 또박또박 말해주세요.', + 2 => '조금 느린 속도로 말해주세요.', + 3 => '', // 보통 — 지시 없음 + 4 => '조금 빠른 속도로 말해주세요.', + 5 => '아주 빠른 속도로 말해주세요.', + ]; // TTS에 전달할 텍스트 구성 - $ttsText = $request->text; - - // 스타일 지시가 있으면 프롬프트로 감싸기 + $directives = []; if ($voiceStyle) { - $ttsText = "{$voiceStyle}: {$ttsText}"; + $directives[] = $voiceStyle; + } + if (! empty($speedDirectives[$voiceSpeed])) { + $directives[] = $speedDirectives[$voiceSpeed]; + } + + $ttsText = $request->text; + if (! empty($directives)) { + $ttsText = implode(' ', $directives)." \n\n{$ttsText}"; } // 짧은 텍스트는 TTS 모델이 텍스트 생성으로 인식할 수 있으므로 발화 컨텍스트 추가 diff --git a/resources/views/rd/sound-logo/index.blade.php b/resources/views/rd/sound-logo/index.blade.php index dd8c7422..bc06582f 100644 --- a/resources/views/rd/sound-logo/index.blade.php +++ b/resources/views/rd/sound-logo/index.blade.php @@ -369,6 +369,16 @@ + +
+
+ 말하기 속도 + +
+ +
+