Skip to content

Instantly share code, notes, and snippets.

@ginpei
Created November 28, 2018 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ginpei/3ef36230378eb01a687dffb3ec7175d4 to your computer and use it in GitHub Desktop.
Save ginpei/3ef36230378eb01a687dffb3ec7175d4 to your computer and use it in GitHub Desktop.
const { Client, DefaultMediaReceiver } = require('castv2-client');
const googleTTS = require('google-tts-api');
const address = '192.168.1.86';
const message = {
language: undefined, // default: 'en'
body: 'Hello World!',
speed: undefined, // default: 1
timeout: undefined, // default: 1000
};
const connect = (host, callback) => (new Promise((resolve, reject) => {
const client = new Client();
client.connect(host, () => {
callback(client, (status) => {
client.close();
resolve(status);
});
});
client.on('error', (error) => {
client.close();
reject(error);
});
}));
const getSpeechUrl = async (text) => {
const url = await googleTTS(
text,
message.language,
message.speed,
message.timeout,
);
return url;
};
const speech = (client, speechUrl) => (new Promise((resolve, reject) => {
client.launch(DefaultMediaReceiver, (error, player) => {
if (error) {
reject(error);
}
const media = {
contentId: speechUrl,
contentType: 'audio/mp3',
streamType: 'BUFFERED',
};
player.load(media, { autoplay: true }, (playerError, status) => {
if (playerError) {
reject(playerError);
}
resolve(status);
});
});
}));
const main = async () => {
const result = await connect(address, async (client, done) => {
const speechUrl = await getSpeechUrl(message.body);
const status = await speech(client, speechUrl);
done(status);
});
return result;
};
main()
.then((status) => console.log('done', status))
.catch((error) => console.error(error));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment