markokosticdev / cloud_text_to_speech_flutter

Single interface to Google, Microsoft, and Amazon Text-To-Speech.
https://pub.dev/packages/cloud_text_to_speech
BSD 2-Clause "Simplified" License
4 stars 2 forks source link
amazon-tts aws azure google-cloud google-tts microsoft-tts text-to-speech tts universal-tts

Cloud Text-To-Speech

Pub Version Pub Likes Pub Popularity Pub Points GitHub License GitHub Sponsor Buy Me a Coffee

Single interface to Google, Microsoft, and Amazon Text-To-Speech. Flutter implementation of:

Features

Feature Requests

We welcome and value your ideas and suggestions to improve this project! To submit and vote for feature requests, please visit our Feature Requests Board.

On the board, you can:

Thank you for contributing to the development and improvement of Cloud Text-To-Speech!

Getting Started

There are essentially two ways to use Cloud Text-To-Speech:

Universal(Single)

To init configuration use:

//Do init once and run it before any other method
TtsUniversal.init(
  provider: TtsProviders.amazon,
  googleParams: InitParamsGoogle(apiKey: 'API-KEY'),
  microsoftParams: InitParamsMicrosoft(
  subscriptionKey: 'SUBSCRIPTION-KEY', region: 'eastus'),
  amazonParams: InitParamsAmazon(
  keyId: 'KEY-ID', accessKey: 'ACCESS-KEY', region: 'us-east-1'),
  withLogs: true
);

To change provider use:

TtsUniversal.setProvider(TtsProviders.microsoft);

To get the list of all voices use:

//Get voices
final voicesResponse = await TtsUniversal.getVoices();

final voices = voicesResponse.voices;

//Print all available voices
print(voices);

//Pick an English Voice
final voice = voices
    .where((element) => element.locale.code.startsWith("en-"))
    .toList(growable: false)
    .first;

To convert TTS and get audio use:

//Generate Audio for a text
const text = "Amazon, Microsoft and Google Text-to-Speech API are awesome";

final ttsParams = TtsParamsUniversal(
        voice: voice, 
        audioFormat: AudioOutputFormatUniversal.mp3_64k, 
        text: text, 
        rate: 'slow', //optional
        pitch: 'default' //optional
      );

final ttsResponse = await TtsUniversal.convertTts(ttsParams);

//Get the audio bytes.
final audioBytes = ttsResponse.audio.buffer.asByteData();

Universal(Combine)

To init configuration use:

//Do init once and run it before any other method
TtsUniversal.init(
  provider: TtsProviders.combine,
  googleParams: InitParamsGoogle(apiKey: 'API-KEY'),
  microsoftParams: InitParamsMicrosoft(
  subscriptionKey: 'SUBSCRIPTION-KEY', region: 'eastus'),
  amazonParams: InitParamsAmazon(
  keyId: 'KEY-ID', accessKey: 'ACCESS-KEY', region: 'us-east-1'),
  withLogs: true
);

To change provider use:

TtsUniversal.setProvider(TtsProviders.combine);

To get the list of all voices use:

//Get voices
final voicesResponse = await TtsUniversal.getVoices();

final voices = voicesResponse.voices;

//Print all available voices
print(voices);

//Pick an English Voice
final voice = voices
    .where((element) => element.locale.code.startsWith("en-"))
    .toList(growable: false)
    .first;

To convert TTS and get audio use:

//Generate Audio for a text
const text = "Amazon, Microsoft and Google Text-to-Speech API are awesome";

final ttsParams = TtsParamsUniversal(
        voice: voice, 
        audioFormat: AudioOutputFormatUniversal.mp3_64k, 
        text: text, 
        rate: 'slow', //optional
        pitch: 'default' //optional
);

final ttsResponse = await TtsUniversal.convertTts(ttsParams);

//Get the audio bytes.
final audioBytes = ttsResponse.audio.buffer.asByteData();

Google

To init configuration use:

//Do init once and run it before any other method
TtsGoogle.init(
  params: InitParamsGoogle(apiKey: "API-KEY"), 
  withLogs:true
);

To get the list of all voices use:

//Get voices
final voicesResponse = await TtsGoogle.getVoices();

final voices = voicesResponse.voices;

//Print all voices
print(voices);

//Pick an English Voice
final voice = voices
    .where((element) => element.locale.code.startsWith("en-"))
    .toList(growable: false)
    .first;

To convert TTS and get audio use:

//Generate Audio for a text
final text = '<speak>Google<break time="2s"> Speech Service Text-to-Speech API is awesome!</speak>';

TtsParamsGoogle ttsParams = TtsParamsGoogle(
        voice: voice, 
        audioFormat: AudioOutputFormatGoogle.mp3, 
        text: text, 
        rate: 'slow', //optional
        pitch: 'default' //optional
      );

final ttsResponse = await TtsGoogle.convertTts(ttsParams);

//Get the audio bytes.
final audioBytes = ttsResponse.audio.buffer.asByteData();

Microsoft

To init configuration use:

//Do init once and run it before any other method
TtsMicrosoft.init(
  params: InitParamsMicrosoft(
  subscriptionKey: "SUBSCRIPTION-KEY", region: "eastus"),
  withLogs: true
);

To get the list of all voices use:

//Get voices
final voicesResponse = await TtsMicrosoft.getVoices();

final voices = voicesResponse.voices;

//Print all voices
print(voices);

//Pick an English Voice
final voice = voices
    .where((element) => element.locale.code.startsWith("en-"))
    .toList(growable: false)
    .first;

To convert TTS and get audio use:

//Generate Audio for a text
final text = '<speak>Microsoft<break time="2s"> Speech Service Text-to-Speech API is awesome!</speak>';

TtsParamsMicrosoft ttsParams = TtsParamsMicrosoft(
        voice: voice, 
        audioFormat: AudioOutputFormatMicrosoft.audio48Khz192kBitrateMonoMp3, 
        text: text, 
        rate: 'slow', //optional
        pitch: 'default' //optional
      );

final ttsResponse = await TtsMicrosoft.convertTts(ttsParams);

//Get the audio bytes.
final audioBytes = ttsResponse.audio.buffer.asByteData();

Amazon

To init configuration use:

//Do init once and run it before any other method
TtsAmazon.init(
  params: InitParamsAmazon(
    keyId: 'KEY-ID', 
    accessKey: 'ACCESS-KEY', 
    region: 'us-east-1'
  ),
  withLogs: true
);

To get the list of all voices use:

//Get voices
final voicesResponse = await TtsAmazon.getVoices();

final voices = voicesResponse.voices;

//Print all voices
print(voices);

//Pick an English Voice
final voice = voices
    .where((element) => element.locale.code.startsWith("en-"))
    .toList(growable: false)
    .first;

To convert TTS and get audio use:

//Generate Audio for a text
final text = '<speak>Amazon<break time="2s"> Speech Service Text-to-Speech API is awesome!</speak>';

TtsParamsAmazon ttsParams = TtsParamsAmazon(
        voice: voice, 
        audioFormat: AudioOutputFormatAmazon.audio48Khz192kBitrateMonoMp3, 
        text: text, 
        rate: 'slow', //optional
        pitch: 'default' //optional
);

final ttsResponse = await TtsAmazon.convertTts(ttsParams);

//Get the audio bytes.
final audioBytes = ttsResponse.audio.buffer.asByteData();

Notes

There are things you should take care of: