使用PHP调用Amazon Polly返回的AudioStream始终为空问题求助
问题根因
你调用synthesizeSpeech接口时指定的OutputFormat参数为json,但未同时传入SpeechMarkTypes参数指定需要返回的语音标记类型,因此接口返回空的音频流。json格式输出仅用于返回语音标记元数据(如单词边界、句子边界、音素时间戳等),并非直接返回可播放的音频内容,使用该格式时必须搭配SpeechMarkTypes参数指定要获取的标记类型,否则接口不会返回任何有效内容。
修复方案
场景1:需要生成可播放的音频文件
将OutputFormat参数修改为mp3/ogg_vorbis/pcm这类音频格式即可,对应修改保存文件的后缀,示例修改代码:
try { $result = $client->synthesizeSpeech([ 'Text' => 'Hello', 'OutputFormat' => 'mp3', // 替换原有json值 'VoiceId' => 'Joanna', ]); $data = $result->get('AudioStream')->getContents(); $file = fopen('test.mp3','w+'); fwrite($file,$data); fclose($file); } catch (AwsException $e) { echo $e->getMessage() . "\n"; }
场景2:确实需要获取json格式的语音标记
补充SpeechMarkTypes参数指定需要的标记类型即可,可选值包括word、sentence、ssml、viseme,示例修改代码:
$result = $client->synthesizeSpeech([ 'Text' => 'Hello', 'OutputFormat' => 'json', 'VoiceId' => 'Joanna', 'SpeechMarkTypes' => ['word', 'sentence'] // 补充该参数 ]);
你在.NET SDK下遇到的相同问题也是同样的参数配置错误,调整对应参数即可正常获取返回内容。
内容的提问来源于stack exchange,提问作者AaA
相关产品推荐
相关产品推荐

