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 @@
+
+
+