diff --git a/app/Http/Controllers/RdController.php b/app/Http/Controllers/RdController.php index 16d93c82..4418a935 100644 --- a/app/Http/Controllers/RdController.php +++ b/app/Http/Controllers/RdController.php @@ -408,6 +408,7 @@ public function soundLogoGenerate(Request $request): JsonResponse - 카테고리 특성에 맞는 synth와 ADSR 선택 - 음악적으로 조화롭고 기억에 남는 멜로디 설계 - 최소 2개, 최대 12개 음표 사용 +- name은 10자 이내, desc는 30자 이내로 간결하게 작성 PROMPT; try { @@ -418,8 +419,8 @@ public function soundLogoGenerate(Request $request): JsonResponse ['parts' => [['text' => $prompt]]], ], 'generationConfig' => [ - 'temperature' => 0.9, - 'maxOutputTokens' => 2048, + 'temperature' => 0.7, + 'maxOutputTokens' => 4096, 'responseMimeType' => 'application/json', ], ] @@ -469,12 +470,18 @@ public function soundLogoTts(Request $request): JsonResponse return response()->json(['success' => false, 'error' => 'Gemini API 키가 설정되지 않았습니다.'], 500); } + // 짧은 텍스트는 TTS 모델이 텍스트 생성으로 인식할 수 있으므로 발화 컨텍스트 추가 + $ttsText = $request->text; + if (mb_strlen($ttsText) < 4) { + $ttsText = "'{$ttsText}' "; + } + try { $response = Http::timeout(30)->post( "{$baseUrl}/models/gemini-2.5-flash-preview-tts:generateContent?key={$apiKey}", [ 'contents' => [ - ['parts' => [['text' => $request->text]]], + ['parts' => [['text' => $ttsText]]], ], 'generationConfig' => [ 'responseModalities' => ['AUDIO'], @@ -495,7 +502,11 @@ public function soundLogoTts(Request $request): JsonResponse } if (! $response->successful()) { - return response()->json(['success' => false, 'error' => 'TTS 생성 실패: '.$response->status()], 500); + $body = $response->json(); + $msg = $body['error']['message'] ?? ('TTS 생성 실패: '.$response->status()); + Log::warning('SoundLogo TTS API 에러', ['status' => $response->status(), 'body' => $msg]); + + return response()->json(['success' => false, 'error' => $msg], $response->status()); } $data = $response->json();