react-native-gtts-lite
Version:
🎙️ Lightweight Google Translate TTS for React Native CLI using react-native-fs and react-native-sound.
52 lines (45 loc) • 1.45 kB
JavaScript
// index.js
const axios = require('axios');
const RNFS = require('react-native-fs');
const Sound = require('react-native-sound');
const { Buffer } = require('buffer');
global.Buffer = global.Buffer || Buffer;
/**
* Speaks the given text using Google Translate TTS.
* @param {string} text - Text to speak.
* @param {string} lang - Language code (default is 'en').
* @returns {Promise<void>}
*/
const speak = async (text = 'Hello!', lang = 'en') => {
try {
const encodedText = encodeURIComponent(text);
const ttsUrl = `https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&tl=${lang}&q=${encodedText}`;
const filePath = `${RNFS.DocumentDirectoryPath}/tts.mp3`;
const response = await axios({
url: ttsUrl,
method: 'GET',
responseType: 'arraybuffer',
headers: {
'Content-Type': 'audio/mpeg',
},
});
const base64Data = Buffer.from(response.data, 'binary').toString('base64');
await RNFS.writeFile(filePath, base64Data, 'base64');
return new Promise((resolve, reject) => {
const sound = new Sound(filePath, '', error => {
if (error) return reject(error);
sound.play(success => {
if (!success) return reject(new Error('Playback failed'));
sound.release();
resolve();
});
});
});
} catch (err) {
console.error('TTS Error:', err.message);
throw err;
}
};
module.exports = {
speak,
};