簡體   English   中英

Amazon Polly AudioStream 始終為空

[英]Amazon Polly AudioStream is always empty

我試圖讓 Polly 使用 PHP 為我讀一些東西。

我創建了一個新項目,安裝了 Amazon composer require aws/aws-sdk-php ,然后使用SDK 文檔示例中的代碼創建了一個文件,並修改了一些小事情,例如將憑據從默認值更改為值,將 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->describeVoices(); ,我可以毫無錯誤地閱讀聲音列表。

注意:我在 .NET SDK 上也遇到了同樣的問題,這讓我覺得我的請求有問題,或者 API 中缺少一些錯誤消息。

我做錯了什么?

您沒有做錯任何事情,但如果您正在尋找語音標記,它只會輸出 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM