[英]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.