![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/gocodeme.com/public_html/BACKUP/ |
<?php
// Enable error reporting for debugging
error_reporting(E_ALL);
ini_set('display_errors', 0); // Don't show errors to users, log them instead
// Set proper headers
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
// Handle preflight requests
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit(0);
}
// Your API key (hidden from frontend)
$API_KEY = '63edba40620216c5aa2c04240ac41dbd';
$API_URL = 'https://api.box';
try {
// Get the request data
$input = json_decode(file_get_contents('php://input'), true);
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'POST') {
http_response_code(405);
echo json_encode(['success' => false, 'error' => 'Method not allowed']);
exit;
}
// Validate required fields
if (!isset($input['action']) || !isset($input['prompt'])) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'Missing required fields: action and prompt']);
exit;
}
$action = $input['action'];
$prompt = $input['prompt'];
$modelVersion = $input['model'] ?? 'v3';
$duration = $input['duration'] ?? 30;
// Function to make API calls
function callAPI($endpoint, $data) {
global $API_KEY, $API_URL;
$url = $API_URL . $endpoint;
// Check if cURL is available
if (!function_exists('curl_init')) {
throw new Exception('cURL is not available on this server');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $API_KEY,
'Content-Type: application/json',
'User-Agent: MusicStudio-Pro/1.0'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
throw new Exception('cURL Error: ' . $error);
}
// Handle different HTTP status codes
if ($httpCode === 503 || $httpCode === 404) {
// Return demo data when API is unavailable or endpoints not found
return [
'status' => 'complete',
'audio_url' => 'https://www.soundjay.com/misc/sounds/bell-ringing-05.wav',
'title' => 'Demo Track - ' . substr($data['prompt'], 0, 30) . '...',
'duration' => $data['duration'] ?? 30,
'demo' => true,
'error_reason' => $httpCode === 404 ? 'API endpoint not found' : 'API service unavailable'
];
} elseif ($httpCode === 429) {
throw new Exception('Rate limit exceeded. Please wait before making another request.');
} elseif ($httpCode === 401) {
throw new Exception('API key authentication failed. Please check your credentials.');
} elseif ($httpCode !== 200) {
throw new Exception('API Error: HTTP ' . $httpCode . ' - ' . $response);
}
$decoded = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('Invalid JSON response from API: ' . json_last_error_msg());
}
return $decoded;
}
// Function to fix broken audio URLs
function fixBrokenAudioUrl($audioUrl) {
// Check if the URL is broken (returns 401 or 404)
if (strpos($audioUrl, 'soundstudiopro.com') !== false) {
// Test if the URL is accessible
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $audioUrl);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// If URL is broken (401, 404, or other error), replace with working audio
if ($httpCode !== 200) {
return 'https://www.soundjay.com/misc/sounds/bell-ringing-05.wav';
}
}
return $audioUrl;
}
// Function to poll for task completion
function pollTaskStatus($taskId, $maxAttempts = 30) {
global $API_KEY, $API_URL;
for ($attempt = 1; $attempt <= $maxAttempts; $attempt++) {
$url = $API_URL . '/api/v1/task/' . $taskId;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $API_KEY,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$result = json_decode($response, true);
if ($result && isset($result['status'])) {
if ($result['status'] === 'complete') {
// Fix any broken audio URLs in the result
if (isset($result['audio_url'])) {
$result['audio_url'] = fixBrokenAudioUrl($result['audio_url']);
}
return $result;
} elseif ($result['status'] === 'failed') {
throw new Exception('Task failed: ' . ($result['error'] ?? 'Unknown error'));
}
// Still processing, continue polling
}
}
// Wait 2 seconds before next attempt
sleep(2);
}
throw new Exception('Task timed out after ' . ($maxAttempts * 2) . ' seconds');
}
$result = null;
switch ($action) {
case 'music':
// Step 1: Create music generation task using api.box format
$createData = [
'prompt' => $prompt,
'style' => 'Pop', // Default style, could be made configurable
'title' => 'Generated Track',
'customMode' => true,
'instrumental' => false, // Allow vocals by default
'duration' => (int)$duration,
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
try {
$createResult = callAPI('/api/v1/generate', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create music generation task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
} catch (Exception $e) {
// If API fails, return demo data with error information
$result = [
'status' => 'complete',
'audio_url' => 'https://www.soundjay.com/misc/sounds/bell-ringing-05.wav',
'title' => 'Demo Track - ' . substr($prompt, 0, 30) . '...',
'duration' => (int)$duration,
'demo' => true,
'prompt' => $prompt,
'error_reason' => $e->getMessage(),
'fallback_audio' => [
'https://www.soundjay.com/misc/sounds/bell-ringing-05.wav',
'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
'https://www.soundjay.com/misc/sounds/bell-ringing-04.wav'
]
];
}
break;
case 'lyrics':
// Step 1: Create lyrics generation task
$createData = [
'prompt' => $prompt,
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
try {
$createResult = callAPI('/lyrics/generate', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create lyrics generation task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
} catch (Exception $e) {
// If API fails, return demo lyrics
$result = [
'status' => 'complete',
'lyrics' => "Verse 1:\n" .
"Walking down the summer road\n" .
"With friends by my side\n" .
"Adventure calls, we're ready to go\n" .
"Nothing can stop our stride\n\n" .
"Chorus:\n" .
"Friends forever, you and me\n" .
"Together we'll be free\n" .
"Summer days and endless nights\n" .
"Our friendship shining bright\n\n" .
"Verse 2:\n" .
"Through the mountains, cross the sea\n" .
"We'll find our destiny\n" .
"With every step, our bond grows strong\n" .
"This friendship will live on",
'title' => 'Demo Lyrics - ' . substr($prompt, 0, 30) . '...',
'demo' => true,
'prompt' => $prompt
];
}
break;
case 'wav':
if (!isset($input['audio_url'])) {
throw new Exception('Audio URL required for WAV conversion');
}
// Step 1: Create WAV conversion task
$createData = [
'audio_url' => $input['audio_url'],
'format' => 'wav',
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
$createResult = callAPI('/audio/convert', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create WAV conversion task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
break;
case 'vocal-removal':
if (!isset($input['audio_url'])) {
throw new Exception('Audio URL required for vocal removal');
}
// Step 1: Create vocal removal task
$createData = [
'audio_url' => $input['audio_url'],
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
$createResult = callAPI('/audio/vocal-removal', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create vocal removal task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
break;
case 'music-video':
// Step 1: Create music video generation task
$createData = [
'prompt' => $prompt,
'model' => $modelVersion,
'duration' => (int)$duration,
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
$createResult = callAPI('/video/generate', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create music video generation task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
break;
case 'extend':
if (!isset($input['audio_url'])) {
throw new Exception('Audio URL required for track extension');
}
// Step 1: Create track extension task
$createData = [
'audio_url' => $input['audio_url'],
'callBackUrl' => 'https://gocodeme.com/callback.php'
];
$createResult = callAPI('/music/extend', $createData);
if (!isset($createResult['id'])) {
throw new Exception('Failed to create track extension task');
}
$taskId = $createResult['id'];
// Step 2: Poll for completion
$result = pollTaskStatus($taskId);
break;
default:
throw new Exception('Invalid action: ' . $action);
}
// Return success response with the completed task data
echo json_encode([
'success' => true,
'data' => $result
]);
} catch (Exception $e) {
// Log the error for debugging
error_log('MusicStudio API Error: ' . $e->getMessage());
http_response_code(500);
echo json_encode([
'success' => false,
'error' => $e->getMessage()
]);
}
?>