使用 PHP 开发工具包的 Amazon Polly 实施



我正在尝试使用 Amazon 的 PHP SDK 将 Amazon Polly Web 服务集成到我的一个项目中。但是当我使用 PollyClient SDK 时,客户端createSynthesizeSpeechPreSignedUrl()中只实现了一种方法,它返回一个 url,而不是音频剪辑。当我尝试将 url 粘贴到浏览器窗口中时,出现以下错误:"message": "The security token included in the request is invalid."

请参阅我的代码片段:

error_reporting(E_ALL);
ini_set('display_errors', 1);
header('Content-Type: text/plain; charset=utf-8');
require_once 'app/aws/aws-autoloader.php';
use AwsPollyPollyClient;
class TestPolly extends Base {
    public function newPolly () {
        $connection = [
            'region'      => 'us-west-2',
            'version'     => 'latest',
            'debug'       => true,
            'scheme'      => 'http',
            'credentials' => [
                'key'    => 'XXXXX',
                'secret' => 'XXXXXX',
            ],
        ];
        $client     = new PollyClient($connection);
        $polly_args = [
            'OutputFormat' => 'mp3',
            'Text'         => 'My Input text',
            'TextType'     => 'text',
            'VoiceId'      => 'Brain',
        ];
        $result     = $client->synthesizeSpeech($polly_args);
        echo '<pre>';
        print_r($result);
        exit;
    }
}

我得到的PHP错误是:

Fatal error Uncaught exception 'AwsPollyExceptionPollyException' with message 'Error executing &quot;SynthesizeSpeech on http://polly.us-west-2.amazonaws.com/v1/speech
 AWS HTTP error: cURL error 7: Failed to connect to polly.us-west-2.amazonaws.com port 80: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'
exception 'GuzzleHttpExceptionConnectException' with message 'cURL error 7: Failed to connect to polly.us-west-2.amazonaws.com port 80: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)' in D:xampphtdocssim_awsawsGuzzleHttpHandlerCurlFactory.php:186
Stack trace:

有趣的是,我能够使用 Node.js SDK 生成音频剪辑,所以我非常确定访问密钥和密钥工作正常。

如果有人能指出如何将 PHP SDK 与示例代码或有用的链接一起使用,那就太好了。

这里有一些示例代码,用于在浏览器中将TTS下载为.mp3文件,关键部分是$result->get('AudioStream')->getContents(),这是获取实际.mp3数据的原因。

require_once 'app/aws/aws-autoloader.php';
$awsAccessKeyId = 'XXXXXXX';
$awsSecretKey   = 'XXXXXXX';
$credentials    = new AwsCredentialsCredentials($awsAccessKeyId, $awsSecretKey);
$client         = new AwsPollyPollyClient([
    'version'     => '2016-06-10',
    'credentials' => $credentials,
    'region'      => 'us-east-1',
]);
$result         = $client->synthesizeSpeech([
    'OutputFormat' => 'mp3',
    'Text'         => "My input text",
    'TextType'     => 'text',
    'VoiceId'      => 'Joanna',
]);
$resultData     = $result->get('AudioStream')->getContents();
header('Content-Transfer-Encoding: binary');
header('Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3');
header('Content-length: ' . strlen($resultData));
header('Content-Disposition: attachment; filename="pollyTTS.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
echo $resultData;

至于链接,这里有一些:

  • 波莉文档:http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-polly-2016-06-10.html
  • 波莉定价:https://aws.amazon.com/polly/pricing/
  • 开始使用 AWS PHP SDK:
  • http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/

最新更新