ahmadmayahi/php-amazon-polly

Amazon Polly的优雅包装

v1.2.0 2022-11-06 09:29 UTC

README

PHP Google Vision

The Latest Version on Packagist Tests Check & fix styling Test Coverage

需要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();

了解更多关于SSML的信息.

标准与神经网络语音

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)。请参阅许可文件以获取更多信息。