Am trying to implement microsoft text to speech in php by following the tutorials in the link below.
here is the API Sample post request
POST /cognitiveservices/v1 HTTP/1.1
X-Microsoft-OutputFormat: raw-16khz-16bit-mono-pcm
Content-Type: application/ssml+xml
Host: westus.tts.speech.microsoft.com
Content-Length: 225
Authorization: Bearer [Base64 access_token]
<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Female'
name='en-US-AriaRUS'>
Microsoft Speech Service Text-to-Speech API
</voice></speak>
I have already obtained my access token.
Here is my Issue. How to I added the text that I will be converted to speech. I have tried tried this
$params = "Hello I need to be converted to Voice";
but nothing comes.no error message.
Here is the entire coding so far
$url = 'https://westus.tts.speech.microsoft.com/cognitiveservices/v1';
$curl = curl_init();
$params = "Hello I need to be converted to Voice";
$myApp_name = 'Text-to-Speech-App';
$header = [
"Authorization: Bearer mytoken-goes-here",
"Content-Type: application/ssml+xml",
"X-Microsoft-OutputFormat: raw-16khz-16bit-mono-pcm",
"User-Agent: $myApp_name",
"Content-Length:". strlen($params)
];
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
echo $response = curl_exec($curl);
You can put any string in the body of an HTTP request. No matter if it's URL encoded, JSON, Binary, XML or something else.
For simple cases like this one - you can create a simple string, containing the XML that you need for your request. Like this:
$params = "<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Female' name='en-US-AriaRUS'>Hello I need to be converted to Voice</voice></speak>";
But for more complicated XMLs and to be sure that you're generating valid XML - you can use one of PHP XML libraries like:
https://www.php.net/manual/en/book.simplexml.php
https://www.php.net/manual/en/book.dom.php
Where you can build the XML in a object-oriented way and then convert it to a valid string, making sure there isn't any syntax error.
And the CURL API may be a bit confusing, but the Body of the request goes into CURLOPT_POSTFIELDS
. This is not only for POST url-encoded data.