pimatic-tts
Version:
Pimatic plugin providing Text-to-Speech capability
55 lines (41 loc) • 1.65 kB
text/coffeescript
module.exports = (env) ->
_ = env.require 'lodash'
commons = require('pimatic-plugin-commons')(env)
Promise = env.require 'bluebird'
TTSDevice = require("./TTSDevice")(env)
spawn = require('child_process').spawn
fs = require('fs')
wav = require('wav')
class PicoTTSDevice extends TTSDevice
constructor: (, lastState) ->
= .id
= .name
= _.cloneDeep
= _.cloneDeep
= {
audioDecoder: wav.Reader
audioFormat: 'wav'
executable: .executable ? '/usr/bin/pico2wav'
arguments: (file, text) => return [ '-l', .language, '-w', file, text]
}
super()
generateResource: (file) =>
return new Promise( (resolve, reject) =>
app = spawn(.executable, .arguments(file, .text.parsed))
app.stdout.on( 'data', (data) =>
env.logger.debug __("%s output: %s", .executable, data)
)
app.stderr.on('data', (error) =>
.rejectWithErrorString Promise.reject, error
)
app.on('close', (code) =>
if (code is 0)
env.logger.info __("%s: Speech resource for '%s' successfully generated.", , .text.parsed)
resolve file
else
.rejectWithErrorString Promise.reject, error
)
).catch( (error) => .rejectWithErrorString Promise.reject, error )
destroy: () ->
super()
return PicoTTSDevice