pimatic-tts
Version:
Pimatic plugin providing Text-to-Speech capability
53 lines (40 loc) • 1.94 kB
text/coffeescript
TTSProviders =
'Google':
device: 'GoogleTTSDevice'
deviceDef: 'google-device-config-schema'
langResource: 'google-tts-api-lang.json'
'Pico':
device: 'PicoTTSDevice'
deviceDef: 'pico-device-config-schema'
langResource: 'pico-tts-api-lang.json'
module.exports = (env) ->
Promise = env.require 'bluebird'
commons = require('pimatic-plugin-commons')(env)
M = env.matcher
class TextToSpeechPlugin extends env.plugins.Plugin
init: (app, , ) =>
= .debug || false
= commons.base @, 'Plugin'
for own obj of TTSProviders
do (obj) =>
TTSProvider = TTSProviders[obj]
.debug "Registering device class #{TTSProvider.device}"
deviceConfig = require("./devices/" + TTSProvider.deviceDef)
if TTSProvider.langResource?
languages = require('./resources/'+ TTSProvider.langResource)
for own obj of languages
do (obj) =>
language = languages[obj]
if 0 > deviceConfig[TTSProvider.device].properties.language?.enum.indexOf(language.code)
deviceConfig[TTSProvider.device].properties.language.enum.push language.code
deviceClass = require('./devices/' + TTSProvider.device)(env)
params = {
configDef: deviceConfig[TTSProvider.device],
createCallback: (config, lastState) => return new deviceClass(config, lastState)
}
.deviceManager.registerDeviceClass(TTSProvider.device, params)
.debug "Registering action provider"
actionProviderClass = require('./actions/TTSActionProvider')(env)
.ruleManager.addActionProvider(new actionProviderClass(, ))
Plugin = new TextToSpeechPlugin
return Plugin