/text-to-speech-converter

A serverless application that converts blobs of text to speech in an audio file

Primary LanguageJavaScript

text-to-speech-converter

Summary

This is an application that takes in text and outputs an audio file of that text. Written with US-English in mind, so it might not convert as expected for other languages.

My deployed version here. Feel free to add your own things to convert to audio, download files, and delete files.

Technologies Used

Architecture Diagram

text-to-speech-architecture

Directions To Run

  1. Clone this repo (note: this script is designed to work with public Github repos, it might possibly also work with public Bitbucket and public Gitlab repos, but it hasn't been tested)
  2. Deploy the stack via the AWS SAM CLI. Getting started directions here. TL;DR run sam build and sam deploy --guided.
  3. Navigate to the url for your frontend. It'll be in the CloudFormation stack Outputs...should be something like: http://{your stack name}-frontend.s3-website-{your region}.amazonaws.com/

Backend API Endpoints

GET /voices

Populates the voices dropdown list

GET /file

Gets all files and fills the table with existing text to speech conversations

DELETE /file/{id}

Deletes a file

POST /file

Creates a new text to speech conversion

Running the Frontend Locally against a Deployed Backend

  1. Deploy the app
  2. cd src/frontend && npm install
  3. create a new file under src/frontend/src and name it config.js. Find you ApiURL from the CloudFormation stack Outputs...should look something like https://6wpbpyxfgf.execute-api.us-east-1.amazonaws.com. Add the following to the file
const apiRef =  {
  backendAPI: 'Add your backend API URL here'
};

export default apiRef;
  1. npm start

Known Limitations For Larger Requests

  • Lambda has limits for the /tmp directory storage. Currently the template is set to the default value which is 512mb. For an extra cost, you can up this value by adding the EphemeralStorage property with the storage value that you want to the CreateNewFile function.
  • Pagination is not in place for ListFiles, but you probably don't want to scan a very very large dynamoDB table and return all the results anyway bc it can get very $$$.

Outstanding TODO Items / Open Bugs

See open issues

Logging Issues

If you find a bug or have a question, feel free to open a new issue and our maintainers will reply as soon as they possibly can. Please describe the issue including steps to reproduce if there are any.

Pull Request Process

  1. Fork the respository
  2. Make any changes you'd like
  3. Open a new PR against main with a description of the proposed changes as well as any other information you find relevant.
  4. If your PR fixes an open issue be sure to write fixes #[ issue number here ]

Finding Help

Please send a direct message to @deeheber on Twitter if any of your questions have not been addressed by the documentation in this repository.