PHPackages                             ekandreas/sayit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ekandreas/sayit

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ekandreas/sayit
===============

Converts text to speech via AWS and place it in a S3 bucket folder

1.3(3y ago)193MITPHPPHP ^8.0

Since Jul 16Pushed 3y ago1 watchersCompare

[ Source](https://github.com/ekandreas/sayit)[ Packagist](https://packagist.org/packages/ekandreas/sayit)[ Docs](https://github.com/ekandreas/sayit)[ GitHub Sponsors](https://github.com/ekandreas)[ RSS](/packages/ekandreas-sayit/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (8)Versions (5)Used By (0)

Sayit
=====

[](#sayit)

[![Latest Version on Packagist](https://camo.githubusercontent.com/b0fa81b8c2d211e1b7dd4e2003919e093e384d5feceb4053fef48903b4a4d627/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f656b616e64726561732f73617969742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ekandreas/sayit)[![GitHub Tests Action Status](https://camo.githubusercontent.com/1b423ce19c5b61c27342201e2ddf9e059984ae2d00bfc21c72f29bffd498bd48/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f656b616e64726561732f73617969742f72756e2d74657374733f6c6162656c3d7465737473)](https://github.com/ekandreas/sayit/actions?query=workflow%3ATests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/25e60371c5f55b47a436ef4b2b60aa89af28f99532fbab327319deb86a3f2ac3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f776f726b666c6f772f7374617475732f656b616e64726561732f73617969742f436865636b253230262532306669782532307374796c696e673f6c6162656c3d636f64652532307374796c65)](https://github.com/ekandreas/sayit/actions?query=workflow%3A%22Check+%26+fix+styling%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/cc2a0e67da2490c519f7885d22b09516ac60c0d479a17243aad8902778580986/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f656b616e64726561732f73617969742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/ekandreas/sayit)

---

Converts text to speech via AWS and place it in a S3 bucket folder This package is PHP agnostic. Follow these steps to get started:

1. `composer require ekandreas/sayit`
2. Register an IAM programmatic account and set policy S3 full access and Polly Full Access to it.
3. Use the key, secret, region and bucket name with the factory helper.
4. Open a public folder in your S3 bucket and create a folder in it.

---

Code example:

```
$factory = TextToSpeech::make(
    $aws_key,
    $aws_secret,
    $aws_region,
    $aws_bucket
)
    ->voice("Elin")
    ->engine('neural')
    ->generate("Hej på dig, det här kommer att läsas upp i en mp3 efter generering.")
    ->store("your-folder");

// the url now points to a public s3 folder "your-folder" with a unique mp3 file generated from the text above.
$url = $factory->url();
```

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require ekandreas/sayit
```

Testing
-------

[](#testing)

```
composer test
```

Credits
-------

[](#credits)

- [Andreas Ek](https://github.com/ekandreas)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

27

—

LowBetter than 47% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity11

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~176 days

Total

4

Last Release

1273d ago

PHP version history (2 changes)v1.0.0PHP ^7.4|^8.0

1.3PHP ^8.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1794603?v=4)[Andreas Ek](/maintainers/EkAndreas)[@ekandreas](https://github.com/ekandreas)

---

Top Contributors

[![ekandreas](https://avatars.githubusercontent.com/u/1794603?v=4)](https://github.com/ekandreas "ekandreas (26 commits)")

---

Tags

ekandreassayit

###  Code Quality

TestsPest

Static AnalysisPsalm

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ekandreas-sayit/health.svg)

```
[![Health](https://phpackages.com/badges/ekandreas-sayit/health.svg)](https://phpackages.com/packages/ekandreas-sayit)
```

###  Alternatives

[roundcube/roundcubemail

The Roundcube Webmail suite

7.0k1.4k3](/packages/roundcube-roundcubemail)[spatie/laravel-export

Create a static site bundle from a Laravel app

672139.5k6](/packages/spatie-laravel-export)[ellaisys/aws-cognito

AWS Cognito package that allows Auth and other related features using the AWS SDK for PHP

121242.9k1](/packages/ellaisys-aws-cognito)[keboola/storage-api-client

Keboola Storage API PHP Client

10397.4k31](/packages/keboola-storage-api-client)[jasara/php-amzn-selling-partner-api

A fluent interface for Amazon's Selling Partner API in PHP

1348.1k1](/packages/jasara-php-amzn-selling-partner-api)[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

252.5k](/packages/eslazarev-wildberries-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
