I have a text to speech module made using google's API, However, it used to work fine (converting user-entered text to speech). But since yesterday I come across this error at Jquery Ajax POST showing error 500 in the console.
The Code goes as : Index Page code:
//On click of speak button after adding text in input fields
$('#speak').click(function (e) {
let _speakBtn = $(this);
// prevent double click
if (_speakBtn.attr('disabled')){
return false;
}
_speakBtn.attr('disabled','disabled');
// validate is content not empty
if ($("#content").val().length < 1 || $.trim($("#content").val()) === ''){
$("#content").addClass('is-invalid');
_speakBtn.prop('disabled',false);
return false;
}else{
$("#content").removeClass('is-invalid');
}
// validate is language not empty
if ($("#language").val().length !== 5 || $.trim($("#language").val()) === ''){
$("#language").addClass('is-invalid');
_speakBtn.prop('disabled',false);
return false;
}else{
$("#language").removeClass('is-invalid');
}
// validate is voice quality not empty
if (($("#voice_quality").val() !== 'WaveNet' && $("#voice_quality").val() !== 'Standard') || $.trim($("#voice_quality").val()) === ''){
$("#voice_quality").addClass('is-invalid');
_speakBtn.prop('disabled',false);
return false;
}else{
$("#voice_quality").removeClass('is-invalid');
}
// validate is gender not empty
if (($("#gender").val() !== 'Female' && $("#gender").val() !== 'Male') || $.trim($("#gender").val()) === ''){
$("#gender").addClass('is-invalid');
_speakBtn.prop('disabled',false);
return false;
}else{
$("#gender").removeClass('is-invalid');
}
// validate is artist not empty
if ($("#artist_name").val().length < 2 || $.trim($("#artist_name").val()) === ''){
$("#artist_name").addClass('is-invalid');
_speakBtn.prop('disabled',false);
return false;
}else{
$("#artist_name").removeClass('is-invalid');
}
$.post('<?= rtrim(TTS_APP_BASE_URL,'/') ?>/ajax.php', $('.ajax_post').serialize(), function (_response) {
try {
_response = JSON.parse(_response);
if (_response.success){
//download audio _response.data.link
$('#downloadBtn').attr('data-toggle', 'modal');
$('#downloadForm').attr('action', _response.data.down_link);
//play audio
$('#rk_player').prop('hidden', false);
$('#rk_player #rk_source').attr('src', _response.data.play_link);
$('#rk_player').get(0).load();
$('#rk_player').get(0).play();
}else{
alert(_response.message);
}
}catch (e) {
console.error(e);
}
_speakBtn.prop('disabled',false);
});
});
In the above form the error occured at $.post('<?= rtrim(TTS_APP_BASE_URL,'/') ?>/ajax.php', $('.ajax_post').serialize(), function (_response) { line as the data is not being posted to ajax.php
The Ajax.PHP code :
/*
if($_SERVER['REQUEST_METHOD'] !== 'POST'){
http_response_code(404);
die();
}
*/
define('HAS_ACCESS', TRUE);
require_once 'tts_app.php';
tts_app.php code goes as:
//disable direct access to this file
defined('HAS_ACCESS') or die('silence is golden');
require 'partials/bootstrap.php';
use Classes\HandleResponseClass;
use Google\Cloud\TextToSpeech\V1\AudioConfig;
use Google\Cloud\TextToSpeech\V1\AudioEncoding;
use Google\Cloud\TextToSpeech\V1\SynthesisInput;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
use Google\Cloud\TextToSpeech\V1\VoiceSelectionParams;
// Authenticating with keyfile data.
/*echo "<br>";
print_r( $_ENV);
exit();*/
require_once 'config.php';
$text = trim($_POST['text']);
$language_code = trim($_POST['language']);
$voiceList = TTS_APP_VOICES_LIST;
$selectLanguage = isset($voiceList[$language_code]) ? $voiceList[$language_code]:'';
$artisteName = trim($_POST['artist_name']);
$gender = trim($_POST['gender']);
if(empty($_POST['rate'])) {
$rate = 1;
} else {
$rate = $_POST['rate'];
}
if(empty($_POST['pitch'])) {
$pitch = 1;
} else {
$pitch = $_POST['pitch'];
}
$voice_quality = $_POST['voice_quality'];
$u_id = $_POST['u_id'];
// validate request
if (empty($text) || empty($selectLanguage) || empty($voice_quality) || empty($gender) || empty($artisteName) || empty($rate) || empty($pitch)){
$response['success'] = false;
$response['message'] = 'Required fields are empty';
$response['data'] = [];
echo json_encode($response);
exit();
}
$textToSpeechClient = new TextToSpeechClient();
$input = new SynthesisInput();
$input->setText($text);
$voice = new VoiceSelectionParams();
$voice->setLanguageCode($language_code);
if (!empty($artisteName)){
$voice->setName($artisteName);
}
if (!empty($gender)){
$voice->setSsmlGender($gender == 'Female' ? 2:1);
}
$audioConfig = new AudioConfig();
if (!empty($rate)){
$audioConfig->setSpeakingRate($rate);
}
if (!empty($pitch)){
$audioConfig->setPitch($pitch);
}
$audioConfig->setAudioEncoding($voice_quality == 'WaveNet' ? AudioEncoding::OGG_OPUS:AudioEncoding::MP3);
$resp = $textToSpeechClient->synthesizeSpeech($input, $voice, $audioConfig);
// handle response file
$responseClass = new HandleResponseClass($resp);
$responseClass->saveFiles(TTS_APP_BASE_PATH);
/*=-=-= sending response -=-=-*/
$response = [
'success' => false,
'message' => 'something went wrong, please check your internet connection and try again later',
'data' => [],
];
if($responseClass->fileSaved()) {
$response['success'] = true;
$response['message'] = '';
$response['data'] = [
'down_link' => rtrim(TTS_APP_BASE_URL,'/').'/download.php?file='.urlencode($responseClass->getFileName()),
'play_link' => rtrim(TTS_APP_BASE_URL,'/').'/'.$responseClass->getDirName().'/'.$responseClass->getFileName().'.mp3',
];
echo json_encode($response);
exit();
}
echo json_encode($response);
exit();
The error I m getting :
jquery-3.5.1.min.js:2 POST https://vdofy.com/tts-test/ajax.php 500
send @ jquery-3.5.1.min.js:2
ajax @ jquery-3.5.1.min.js:2
S.<computed> @ jquery-3.5.1.min.js:2
(anonymous) @ index?content_get= Test to speech tesing:1496
dispatch @ jquery-3.5.1.min.js:2
v.handle @ jquery-3.5.1.min.js:2
Not sure why am I getting this error as I have not changed anything since it was working fine. Please share your thoughts on what could have gone wrong.
from Jquery AJAX POST is returning ERROR 500 - Google Text to Speech Module
No comments:
Post a Comment