I’m trying to upload my Amazon Polly speech files to s3. They upload successfully, so no errors that I can work with but they don’t play.
I have an array of objects which include lyrics which are strings. I loop them and create a mp3 file then upload to s3.
Data structure:
Array
(
    [0] => stdClass Object
        (
            [lyrics] => sample lyrics
        )
    [1] => stdClass Object
        (
            [lyrics] => sample lyrics
        )
    [2] => stdClass Object
        (
            [lyrics] => sample lyrics
        )
)
.
Polly and S3 Function:
foreach($final as $key=>$f){
    $pollySpeech = $polly->synthesizeSpeech([
        'OutputFormat' => 'mp3',
        'Text' => $f->lyrics,
        'TextType' => 'text',
        'VoiceId' => 'Salli',
    ]);
    print_r($pollySpeech);
    try {
        $s3->putObject([
                'Bucket' => 'testbucket'
                'Key'    => $key.'.mp3',
                'Body'   => $pollySpeech,
                'ContentType' => 'audio/mpeg',
            'ACL'    => 'public-read',
        ]);
    } catch (AwsS3ExceptionS3Exception $e) {
        echo "There was an error uploading the file.n";
    }
}
Polly response:
AwsResult Object
(
    [data:AwsResult:private] => Array
        (
            [AudioStream] => GuzzleHttpPsr7Stream Object
                (
                    [stream:GuzzleHttpPsr7Stream:private] => Resource id #264
                    [size:GuzzleHttpPsr7Stream:private] => 
                    [seekable:GuzzleHttpPsr7Stream:private] => 1
                    [readable:GuzzleHttpPsr7Stream:private] => 1
                    [writable:GuzzleHttpPsr7Stream:private] => 1
                    [uri:GuzzleHttpPsr7Stream:private] => php://temp
                    [customMetadata:GuzzleHttpPsr7Stream:private] => Array
                        (
                        )
                )
            [ContentType] => audio/mpeg
            [RequestCharacters] => 90
            [@metadata] => Array
                (
                    [statusCode] => 200
                    [effectiveUri] => https://polly.eu-west-1.amazonaws.com/v1/speech
                    [headers] => Array
                        (
                            [x-amzn-requestid] => fc1a7ebf-4f8c-11e7-a1a3-555e1409e93f
                            [x-amzn-requestcharacters] => 90
                            [content-type] => audio/mpeg
                            [transfer-encoding] => chunked
                            [date] => Mon, 12 Jun 2017 16:34:20 GMT
                        )
                    [transferStats] => Array
                        (
                            [http] => Array
                                (
                                    [0] => Array
                                        (
                                        )
                                )
                        )
                )
        )
)
Advertisement
Answer
$pollySpeech->get('AudioStream')->getContents();
So it seems like I tried to upload the whole object to S3. The line above lets me upload the audio stream properly.
foreach($final as $key=>$f){
    $pollySpeech = $polly->synthesizeSpeech([
        'OutputFormat' => 'mp3',
        'Text' => $f->lyrics,
        'TextType' => 'text',
        'VoiceId' => 'Salli',
    ]);
    print_r($pollySpeech);
    try {
        $s3->putObject([
                'Bucket' => 'testbucket'
                'Key'    => $key.'.mp3',
                'Body'   =>  $pollySpeech->get('AudioStream')->getContents(),
                'ContentType' => 'audio/mpeg',
            'ACL'    => 'public-read',
        ]);
    } catch (AwsS3ExceptionS3Exception $e) {
        echo "There was an error uploading the file.n";
    }
}