true,"service"=>"WEVAL Lyria 3","models"=>["lyria-3-clip-preview","lyria-3-pro-preview"],"provider"=>"Google Gemini API","status"=>"active"]); exit; } // POST: Generate music $input = json_decode(file_get_contents('php://input'), true); $prompt = $input['prompt'] ?? $_POST['prompt'] ?? ''; $model = ($input['duration'] ?? $_POST['duration'] ?? 'clip') === 'pro' ? 'lyria-3-pro-preview' : 'lyria-3-clip-preview'; if (!$prompt) { echo json_encode(["ok"=>false,"error"=>"prompt required"]); exit; } // Call Gemini API with Lyria 3 $url = "https://generativelanguage.googleapis.com/v1beta/models/{$model}:generateContent?key={$GEMINI_KEY}"; $payload = json_encode([ "contents" => [["parts" => [["text" => $prompt]]]], "generationConfig" => ["responseModalities" => ["AUDIO", "TEXT"]] ]); $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $payload, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 120, CURLOPT_SSL_VERIFYPEER => false, ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $data = json_decode($resp, true); if ($code !== 200 || !$data) { echo json_encode(["ok"=>false,"error"=>"Lyria API error","http"=>$code,"details"=>$data['error']['message'] ?? substr($resp,0,200)]); exit; } // Extract audio + lyrics from response $audio = null; $lyrics = null; $parts = $data['candidates'][0]['content']['parts'] ?? []; foreach ($parts as $part) { if (isset($part['inlineData'])) { $audio = [ "mime" => $part['inlineData']['mimeType'] ?? 'audio/mpeg', "data" => $part['inlineData']['data'] ?? null, // base64 "size" => strlen($part['inlineData']['data'] ?? '') ]; } if (isset($part['text'])) { $lyrics = ($lyrics ? $lyrics . "\n" : '') . $part['text']; } } if ($audio && $audio['data']) { // Save audio file $filename = 'lyria3_' . date('Ymd_His') . '_' . substr(md5($prompt), 0, 6) . '.mp3'; $path = "/var/www/html/audio/{$filename}"; @mkdir('/var/www/html/audio', 0755, true); file_put_contents($path, base64_decode($audio['data'])); echo json_encode([ "ok" => true, "model" => $model, "prompt" => $prompt, "audio_url" => "/audio/{$filename}", "audio_size" => filesize($path), "lyrics" => $lyrics, "mime" => $audio['mime'] ]); } else { echo json_encode([ "ok" => false, "error" => "No audio in response", "lyrics" => $lyrics, "raw_parts" => count($parts) ]); }