【问题标题】:Amazon Polly AudioStream is always emptyAmazon Polly AudioStream 始终为空
【发布时间】:2021-09-18 06:11:43
【问题描述】:

我正在尝试让 Polly 使用 PHP 为我阅读一些内容。

我创建了一个新项目,安装了 Amazon composer require aws/aws-sdk-php,然后使用来自 SDK documentation example 的代码创建了一个文件,并修改了一些小东西,例如将凭据从默认值更改为值,var_dump 到 var_export,最后保存了流到文件

<?php
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Polly\PollyClient;
use Aws\Credentials\Credentials;

// Create a PollyClient
$client = new Aws\Polly\PollyClient([
    //'profile' => 'default',
    'credentials' => new Credentials('XXXXXXXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'),
    'version' => '2016-06-10',
    'region' => 'us-east-2'
]);

try {
    $result = $client->synthesizeSpeech([
        'Text' => 'Hello',
        'OutputFormat' => 'json', //json|mp3|ogg_vorbis|pcm
        'VoiceId' => 'Joanna',
    ]);
    var_export($result);

    $data = $result->get('AudioStream')->getContents();
    echo "\n\n";
    var_export($data);
    $file = fopen('test.txt','w+');
    fwrite($file,$data);
    fclose($file);

} catch (AwsException $e) {
    echo $e->getMessage() . "\n";
}

我得到的结果如下

Aws\Result::__set_state(array(
    'data' => array (
        'AudioStream' => GuzzleHttp\Psr7\Stream::__set_state(array(
            'stream' => NULL,
            'size' => NULL,
            'seekable' => true,
            'readable' => true,
            'writable' => true,
            'uri' => 'php://temp',
            'customMetadata' => array (),
        )),
        'ContentType' => 'application/x-json-stream',
        'RequestCharacters' => '5',
        '@metadata' => array (
            'statusCode' => 200,
            'effectiveUri' => 'https://polly.us-east-2.amazonaws.com/v1/speech',
            'headers' => array (
                'x-amzn-requestid' => 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
                'x-amzn-requestcharacters' => '5',
                'content-type' => 'application/x-json-stream',
                'transfer-encoding' => 'chunked',
                'date' => 'Sat, 18 Sep 2021 05:11:20 GMT',
            ),
            'transferStats' => array (
                'http' => array (
                    0 => array (),
                ),
            ),
        ),
    ),
    'monitoringEvents' => array (),
))

''

正如您所见,AudioStream 的大小为空(其中没有任何内容),并且创建的文件也是空的,因为流中没有任何内容可供读取。

如果我将凭据更改为无效字符串,我会收到错误,并且如果凭据有效,状态码是 200,这让我相信我的请求是成功的。 我将voiceId更改为任何其他有效或无效的ID,甚至将区域更改为其他有效值获得状态200并且无效值获得错误消息的区域,但我仍然没有从polly中得到任何东西,感觉不想说话!

注意:当我运行$arr_voices = $polly-&gt;describeVoices();时,我可以正确读取声音列表。

注意:我也遇到了与 .NET SDK 相同的问题,这让我认为我的请求有问题,或者 API 中缺少一些错误消息。

问题

我做错了什么?

【问题讨论】:

    标签: php amazon-web-services amazon-polly


    【解决方案1】:

    您没有做错任何事情,但如果您正在寻找语音标记,它只会输出 JSON。尝试切换到 MP3 等音频输出格式,如下所示。

        $result = $client->synthesizeSpeech([
            'Text' => 'Hello',
            'OutputFormat' => 'mp3', //json|mp3|ogg_vorbis|pcm
            'VoiceId' => 'Joanna',
        ]);
    

    如果您正在寻找语音标记 - 将要合成的语音元数据 - 您需要指定 SpeechMarkTypes,如下所示https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-polly-2016-06-10.html#synthesizespeech

    【讨论】:

    • 我意识到了这一点。即使文档(您已链接的同一文档)清楚地表明 json 是有效的输出格式。选择 json 时不会生成任何内容。
    猜你喜欢
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2017-07-31
    • 2019-07-18
    • 2019-08-18
    • 2011-12-29
    • 2019-07-02
    • 2019-05-04
    相关资源
    最近更新 更多