2

我需要一个脚本来获取我的文本,使用 AWS Polly API 将其转换为语音并将其作为 mp3 文件保存在我的服务器上。

目前,当我加载页面时,会出现一个播放器并播放语音剪辑,但没有下载文件。

我错过了什么?

require '../../../include/lib/aws/aws-autoloader.php';

// Creating Amazon Polly Client

use Aws\Polly\PollyClient;

$config = [
    'version' => 'latest',
    'region' => 'us-west-2', //region
    'credentials' => [
        'key' => 'MY_KEY',
        'secret' => 'my_AWS_secret',
    ]];

$client = new PollyClient($config);

// Converting Text to Speech via Polly API

$args = [
    'OutputFormat' => 'mp3',
    'Text' => "<speak><prosody rate='medium'>My text goes here..</prosody></speak>",
    'TextType' => 'ssml',
    'VoiceId' => "Joanna",
];

$result = $client->synthesizeSpeech($args);

$resultData = $result->get('AudioStream')->getContents();

// Listening the text
$size   = strlen($resultData); // File size
$length = $size;           // Content length
$start  = 0;               // Start byte
$end    = $size - 1;       // End byte
header('Content-Transfer-Encoding:chunked');
header("Content-Type: audio/mpeg");
header("Accept-Ranges: 0-$length");
header("Content-Range: bytes $start-$end/$size");
header("Content-Length: $length");
echo $resultData;


// Download the Text to Speech in MP3 Format

header('Content-length: ' . strlen($resultData));
header('Content-Disposition: attachment; filename="./myfile.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
echo $resultData;
4

2 回答 2

2

您一个接一个地发送 2 个响应。第一个将被处理,第二个最有可能将被忽略。

基本上你不能在你已经发送内容之后发送标题。重构您的代码,以便每个请求只发送 1 个响应。

于 2018-07-16T15:39:04.960 回答
0

只需将输出保存在一个新文件中:

file_put_contents("output.mp3", $resultData);
于 2019-10-12T21:23:47.943 回答