-
-
Save makoton27/dc423b34241f3536b19e0a68144eb2b7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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