UNPKG

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
// 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, };