16-05-2023 , 23-02-2024
The API is only available after you have funded your account.
JSON API voices https://speechgen.io/index.php?r=api/voices.
There are 2 text voiceover options available via the API:
1 option - quick voice-over of short texts.
2 option - setting a voice-over task.
Discover how to streamline voice content creation by integrating SpeechGen.io's with the automation service MAKE. This guide covers the automation of text-to-speech processes, making it simpler and more efficient to generate voice content for various applications.
Url for variant 1: https://speechgen.io/index.php?r=api/text
This option has a maximum limit of 2000 characters. And also a maximum of 2 voice changes. If the limits are exceeded, you will get an error (status = -1).
$data = [
'token'=>'SekretKeyInYourProfile',
'email'=>'yourMail@gmail.com',
'voice'=>'John',
'text'=>"Text for text to Speech",
'format'=>'mp3',
'speed'=>1.1,
'pitch'=>0.8,
'emotion'=>'good',
'pause_sentence'=>300,
'pause_paragraph'=>400,
'bitrate'=>48000,
];
'token' - 'SekretKeyInYourProfile'
'email' - 'yourMail@gmail.com'
'voice' - 'Voice'
'text' - 'Text for text to Speech'
'format' - format of the resulting file, by default = mp3, possible values ( 'mp3', 'wav', 'ogg')
'speed' - playback speed, by default 1, (range from 0.1 to 2.0)
'pitch'- voice pitch, by default 0, (range from -20 to 20)
'emotion' - emotion of voice , by default 'good', possible values ( 'good', 'evil', 'neutral').
'pause_sentence' - The size of the pause between sentences in milliseconds.
'pause_paragraph' - The size of the pause between paragraphs in milliseconds.
'bitrate'=>48000 - Bitrate from 8000 to 192000 Hz.
Emotion Not available for all voices, look it here.
{
"id":"4153594",
"status":"0",
"file":"result.mp3",
"file_cors":"result_cors.mp3",
"parts":"5",
"parts_done":"2",
"duration":"0",
"format":"mp3",
"error":"",
"balans":"3331.2720000314",
"cost":"0.06"
}
"id" - unique voice ID
"status" - current voiceover status. Available from 3 values:
0 - process
1 - completed successfully
-1 - error
"file" - audio file path, available if status= 1
"file_cors" - audio file path CORS
"error" - error text, in the event of, if status = -1
"parts" - number of voiceovers
"parts_done" - number of pieces completed
"duration" - audio file duration in seconds, available if status = 1
"format" - audio file format
"balans" - limit balance
"cost" - voiceover costs. (is increased as the voice parts are dubbed)
$data = [
'token' => '123456',
'email' => 'mail@mail.com',
'voice' => 'John',
'text' => "Text",
'format' => 'mp3',
'speed' => 1.1,
'pitch' => 0,
'emotion' => 'good',
];
$url = "https://speechgen.io/index.php?r=api/text";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
var_dump($response);
$response = json_decode($response, true);
if (curl_errno($ch)) {
var_dump("Connection error with text recognition server, " . curl_error($ch));
} else {
var_dump($response);
if ($response["status"] == 1) {
//Copy
echo " ok " . $response["file"];
copy($response["file"], 'Filename.' . $response["format"]);
} else {
//Error, no voiceover possible
echo $response["error"];
}
}
curl_close($ch);
Step 1: Text is sent to the API and a unique voice ID is obtained(id).
Step 2: Request the result of the dubbing by sending the dubbing identifier (id).
This method has no limitations and allows text dubbing of up to 1,000,000 characters. The dubbing takes place in order of priority (first come, first served) and can take from 1 to several minutes, depending on the length of the text.
$data = [
'token'=>'SekretKeyInYourProfile',
'email'=>'yourMail@gmail.com',
'voice'=>'John',
'text'=>"Text",
'format'=>'mp3',
'speed'=>1.1,
'pitch'=>0.8,
'emotion'=>'good',
'pause_sentence'=>300,
'pause_paragraph'=>400,
'bitrate'=>48000,
];
'token' - 'SekretKeyInYourProfile'
'email' - 'yourMail@gmail.com'
'voice' - 'Voice'
'text' - 'Text'
'format' - format of the resulting file, by default = mp3, possible values( 'mp3', 'wav', 'ogg')
'speed' - speed, by default 1, (range from 0.1 to 2.0)
'pitch'- voice pitch, by default 0, (range from -20 to 20)
'emotion' - emotional coloration, by default 'good', possible values ( 'good', 'evil', 'neutral').
'pause_sentence' - The size of the pause between sentences in milliseconds.
'pause_paragraph' - The size of the pause between paragraphs in milliseconds.
'bitrate'=>48000 - Bitrate from 8000 to 192000 Hz.
Not available for all voices, look here.
{
"id":"4153594",
"status":"0",
"parts":"5",
"parts_done":"0",
"format":"mp3",
"error":"",
"balans":"3331.2720000314",
"cost":"0.00"
}
"id" - unique voice ID
"status" - current voiceover status. Available from 2 values:
1 - task added successfully
-1 - error
"error" - error text, in case of, if status = -1
"parts" - number of voiceovers
"parts_done" - number of pieces completed
"format" - audio file format
"balans" - the balance of the account limits
"cost" - voiceover costs. ( is increased as the voice parts are dubbed)
Step 2. After creating a task and obtaining an identifier (id), a request must be sent to https://speechgen.io/index.php?r=api/result, to find out the result.
$data = [
'token'=>'SekretKeyInYourProfile',
'email'=>'yourMail@gmail.com',
'id'=>4153594,
];
'token' - SekretKeyInYourProfile
'email' - yourMail@gmail.com
'id' - Unique voice ID obtained in step 1
{
"id":"4153594",
"status":"0",
"file":"result.mp3",
"cuts":["result_1.mp3","result_2.mp3",...],
"parts":"5",
"parts_done":"0",
"format":"mp3",
"error":"",
"balans":"3331.2720000314",
"cost":"0.00"
}
"id" - unique voice ID
"status" - current voiceover status. Available from 3 values:
0 - in the midst of
1 - completed successfully
-1 - error
"file" - audio file path, available if status = 1
"error" - error text, in case of, if status = -1
"parts" - number of voiceovers
"parts_done" - number of pieces completed
"duration" - audio file duration in seconds, available if status = 1
"format" - audio file format
"balans" - the balance of the account limits
"cost" - voiceover costs. ( is increased as the voice parts are dubbed)
"cuts" - Array of fragments, if the "cut" tag is used in the text
//STEP 1
$data = [
'token' => '123456',
'email' => 'mail@mail.com',
'voice' => 'John',
'text' => "Text",
'format' => 'mp3',
'speed' => 1.1,
'pitch' => 0,
'emotion' => 'good',
];
$url = "https://speechgen.io/index.php?r=api/longtext";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
var_dump($response);
$response = json_decode($response, true);
$resultId = 0;
if (curl_errno($ch)) {
var_dump("Error in connecting to the text recognition server, " . curl_error($ch));
} else {
var_dump($response);
if ($response["status"] == 1) {
//Copy
echo " ok " . $response["file"];
copy($response["file"], 'FileName.' . $response["format"]);
} elseif ($response["status"] == 0) {
//Remember the voice ID, and ask for the result later
$resultId = $response["id"];
} else {
//Error, no voiceover possible
echo $response["error"];
}
}
curl_close($ch);
//STEP 2
// Every minute we make a query-check of the result
if($resultId){
$data = [
'token'=>'123456',
'email'=>'mail@mail.com',
'id'=>$resultId,
];
$url = "https://speechgen.io/index.php?r=api/result";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
var_dump($response);
$response = json_decode($response,true);
if (curl_errno($ch)) {
var_dump("Error in connecting to the text recognition server, ".curl_error($ch));
}else{
var_dump($response);
if($response["status"] == 1){
//Copy
echo " ok ".$response["file"];
copy($response["file"], 'FileMane.' . $response["format"]);
}elseif($response["status"] == 0){
//Not ready yet, we will ask for the result later
echo "In process...";
}else{
//Error, no voiceover possible
echo $response["error"];
}
}
curl_close($ch);
}