Skip to content

Instantly share code, notes, and snippets.

@makoton27
Last active June 19, 2018 04:07
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save makoton27/dc423b34241f3536b19e0a68144eb2b7 to your computer and use it in GitHub Desktop.
Save makoton27/dc423b34241f3536b19e0a68144eb2b7 to your computer and use it in GitHub Desktop.
var Client = require('castv2-client').Client;
var DefaultMediaReceiver = require('castv2-client').DefaultMediaReceiver;
var mdns = require('mdns');
var browser = mdns.createBrowser(mdns.tcp('googlecast'));
var deviceAddress = 'Google HomeのIPアドレス';
var language;
//↓この2行を追加
var VoiceTextWriter = require('./VoiceTextWriter');
var voiceTextWriter = new VoiceTextWriter();
var device = function(name, lang = 'ja') {
device = name;
//deviceAddress = address;
language = lang;
return this;
};
var ip = function(ip) {
deviceAddress = ip;
return this;
}
//↓多分いらない
var googletts = require('google-tts-api');
var googlettsaccent = 'ja';
var accent = function(accent) {
googlettsaccent = accent;
return this;
}
var notify = function(message, callback = function() {}) {
if (!deviceAddress){
browser.start();
browser.on('serviceUp', function(service) {
console.log('Device "%s" at %s:%d', service.name, service.addresses[0], service.port);
if (service.name.includes(device.replace(' ', '-'))){
deviceAddress = service.addresses[0];
getSpeechUrl(message, deviceAddress, function(res) {
callback(res);
});
}
browser.stop();
});
}else {
getSpeechUrl(message, deviceAddress, function(res) {
callback(res);
});
}
};
var play = function(mp3_url, callback = function() {}) {
if (!deviceAddress) {
browser.start();
browser.on('serviceUp', function(service) {
console.log('Device "%s" at %s:%d', service.name, service.addresses[0], service.port);
if (service.name.includes(device.replace(' ', '-'))){
deviceAddress = service.addresses[0];
getPlayUrl(mp3_url, deviceAddress, function(res) {
callback(res);
});
}
browser.stop();
});
} else {
getPlayUrl(mp3_url, deviceAddress, function(res) {
callback(res);
});
}
};
var getSpeechUrl = function(text, host, callback) {
// googletts(text, language, 1).then(function (url) {
// onDeviceUp(host, url, function(res){
// callback(res)
// });
// }).catch(function (err) {
// console.error(err.stack);
// });
voiceTextWriter.convertToText(text).then(function(result, reject){
onDeviceUp(host, result, function(res){
callback(res)
});
}).catch(function onRejected(error){
console.error(error);
});
};
var getPlayUrl = function(url, host, callback) {
onDeviceUp(host, url, function(res){
callback(res)
});
};
var onDeviceUp = function(host, url, callback) {
var client = new Client();
client.connect(host, function() {
client.launch(DefaultMediaReceiver, function(err, player) {
// console.log(url);
var media = {
contentId: url,
contentType: 'audio/mp3',
streamType: 'BUFFERED' // or LIVE
};
//wavとoggも一応入れといてみるか
if(url.endsWith('wav')){
media.contentType = 'audio/wav';
}else if(url.endsWith('ogg')){
media.contentType = 'audio/ogg';
}
player.load(media, { autoplay: true }, function(err, status) {
client.close();
callback('Device notified');
});
});
});
client.on('error', function(err) {
console.log('Error: %s', err.message);
client.close();
callback('error');
});
};
exports.ip = ip;
exports.device = device;
exports.accent = accent;
exports.notify = notify;
exports.play = play;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment