Architecture
The system was designed to be simple, modular, and scalable. The architecture is based on a microservices approach, with each component responsible for a specific task. This allows for easy integration of new components and updates on existing ones. The system is designed to be able to run on a large variety of hardware, from small devices to large cloud servers.
In the diagram above, it is possible to see the main components of the system:
- Black Arrows: Represent the flow of "text" between the components.
- Blue Arrows: Represent the flow of audio between the components.
- Components:
- Frontend: The user interface, responsible for sending requests to the api and displaying the results.
- API: One of the possible interfaces of the system, responsible for processing requests from the frontend and sending them to the server.
- Client: The client is a Terminal-based interface that allows users to interact with the system without being dependent on the API.
- Proxy: The proxy is responsible for routing requests to the server and returning the results to the client and/or API.
- Server: The server is responsible for processing requests from the proxy and generating the audio output.
- Normalizer: The normalizer is responsible for processing the input text and preparing it for synthesis.
Docker
Each component is incapsulated in a Docker container, allowing for easy deployment and scaling. The provided docker-compose file allows for easy deployment of the system on a single machine.