ahmadmayahi / php-amazon-polly
Amazon Polly的优雅包装
Requires
- php: ^8.1
- aws/aws-sdk-php: ^3.208
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^9.5
README

需要PHP 8.1+
如有反馈,请联系我。
PHP Amazon Polly是一个简单而优雅的包装器,围绕Amazon Polly,该服务可以将文本转换为逼真的语音。
内容
安装
您可以通过composer安装此包
composer require ahmadmayahi/php-amazon-polly
用法
首先您需要配置客户端
use AhmadMayahi\Polly\Config; $config = (new Config()) ->setKey('AWS_KEY') ->setSecret('AWS_SECRET') ->setRegion('eu-west-1'); // default is: us-east-1
保存为MP3文件
use AhmadMayahi\Polly\Voices\English\UnitedStates; use AhmadMayahi\Polly\Polly; $polly = Polly::init($config); $speechFile = $polly // Desired voice ->voiceId(UnitedStates::Joanna) // Default is MP3. // Available options: asMp3(), asOgg(), asPcm(), asJson() ->asOgg() // Desired Text ->text('Hello World') // Convert and return the object ->convert();
convert
方法返回一个类型为AhmadMayahi\Polly\Data\SpeechFile
的对象,它有三个属性
file
:输出文件作为SplFileObject
。speechMarks
(如有)。took
:转换文本所需时间。
默认情况下,convert
方法将文件保存到默认的临时目录;如果您想将文件保存到特定的目录,则可能需要提供文件路径作为参数
convert('/path/to/desire/file/voice.mp3');
voiceId()
也接受一个字符串
voiceId('Joanna')
或者,您也可以指定输出格式为enum
或字符串
use AhmadMayahi\Polly\Enums\OutputFormat; use AhmadMayahi\Polly\Polly; $polly = Polly::init($config); $speechFile = $polly ->voiceId(UnitedStates::Joanna) // As enum ->outputFormat(OutputFormat::Ogg) // Or as a string ->outputFormat('ogg') ->text('Hello World') ->convert();
语音标记
您还可以按如下方式请求语音标记类型
use AhmadMayahi\Polly\Enums\SpeechMarkType; use AhmadMayahi\Polly\Voices\English\UnitedStates; use AhmadMayahi\Polly\Polly; $polly = Polly::init($config); $speechFile = $polly ->voiceId(UnitedStates::Joanna) ->text('Hello World') ->withSpeechMarks(SpeechMarkType::Word, SpeechMarkType::Sentence) ->convert();
Array ( [0] => AhmadMayahi\Polly\Data\SpeechMark Object ( [time] => 0 [type] => AhmadMayahi\Polly\Enums\SpeechMarkType Enum:string ( [name] => Sentence [value] => sentence ) [start] => 7 [end] => 18 [value] => Hello World ) [1] => AhmadMayahi\Polly\Data\SpeechMark Object ( [time] => 6 [type] => AhmadMayahi\Polly\Enums\SpeechMarkType Enum:string ( [name] => Word [value] => word ) [start] => 7 [end] => 12 [value] => Hello ) [2] => AhmadMayahi\Polly\Data\SpeechMark Object ( [time] => 273 [type] => AhmadMayahi\Polly\Enums\SpeechMarkType Enum:string ( [name] => Word [value] => word ) [start] => 13 [end] => 18 [value] => World ) )
SSML
如果给定的文本以<spaek>
开头,则在合成时将使用SSML
use AhmadMayahi\Polly\Voices\English\UnitedStates; use AhmadMayahi\Polly\Polly; $text = <<<EOL <speak> He was caught up in the game.<break time="1s"/> In the middle of the 10/3/2014 <sub alias="World Wide Web Consortium">W3C</sub> meeting, he shouted, "Nice job!" quite loudly. When his boss stared at him, he repeated <amazon:effect name="whispered">"Nice job,"</amazon:effect> in a whisper. </speak> EOL; $polly = Polly::init($config); $speechFile = $polly ->voiceId(UnitedStates::Ivy) ->text($text) ->convert();
标准与神经网络语音
Amazon Polly提供两个语音系统标准
和神经网络
。
神经网络
系统可以产生比标准语音更高的质量语音。
默认情况下,此包将始终使用可用的标准
语音,但是,某些语音,如Olivia
(澳大利亚英语),仅作为神经网络
提供。
您可以使用neuralVoice()
或standardVoice()
方法如下
use AhmadMayahi\Polly\Voices\English\UnitedStates; use AhmadMayahi\Polly\Polly; $polly = Polly::init($config); $speechFile = $polly ->voiceId(UnitedStates::Kendra) ->text('Hello World') ->neuralVoice() ->convert();
并非所有语音都支持
nueral
系统,更多信息请访问Amazon Polly中的语音页面。
方便的语音方法
PHP Amazon Polly提供了一种方便的方法来获取适当的语音ID,而无需检查文档。
例如,如果您想使用Joanna
,您可以使用englishUnitedStatesJoanna()
方法如下
use AhmadMayahi\Polly\Polly; $polly = Polly::init($config); $speechFile = $speech ->englishUnitedStatesJoanna($neural = true) ->text('Hello World') ->convert();
如您所注意到的,Joanna
接受一个可选参数$neural
,将其设置为true
以获取神经网络语音。
以下是语音及其等效方法的完整列表
语音枚举
所有Amazon Polly语音都作为枚举支持
例如,如果您想从英语(澳大利亚)获取Nicole
use AhmadMayahi\Polly\Voices\English\Australian; Australian::Nicole;
描述语音
您还可以使用describe
方法描述语音如下
use AhmadMayahi\Polly\Voices\English\Australian; Australian::Nicole->describe();
describe
方法返回一个类型为AhmadMayahi\Polly\Data\DescribeVoice
的对象,具有以下属性
gender
:确定语音的性别。neural
:是否为神经网络语音?standard
:是否为标准语音?双语
:它是双语吗? 阅读更多。新闻播报
:它是否能使用新闻播报的说话风格? 阅读更多儿童
:儿童说话人?
根据Amazon Polly文档,Aditi(印地语)是唯一一个能流利地说印度英语(en-IN)和印地语(hi-IN)的人。
测试
composer test
变更日志
请参阅变更日志,了解最近有哪些变化。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请审查我们的安全策略了解如何报告安全漏洞。
鸣谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。