|
var fs = require('fs'); |
|
var watson = require('watson-developer-cloud'); |
|
var ogg = require('ogg'); |
|
var opus = require('./opus_stream.js'); |
|
var wav = require('wav'); |
|
var Speaker = require('speaker'); |
|
|
|
|
|
var oggDecoder = new ogg.Decoder(); |
|
|
|
var text_to_speech = watson.text_to_speech({ |
|
username: '0eaef628-d28e-4365-b0db-069046f37fef', |
|
password: 'Mm1DWPHFC7sq', |
|
version: 'v1' |
|
}); |
|
|
|
var params = { |
|
text: 'Hello from IBM Watson', |
|
accept: 'audio/ogg; codec=opus' // or audio/wav or audio/ogg; codec=opus |
|
}; |
|
|
|
|
|
var stream = text_to_speech.synthesize(params); |
|
|
|
//stream.pipe(fs.createWriteStream('./test.opus')); |
|
//var stream = fs.createReadStream('./test.opus'); |
|
|
|
stream.pipe(oggDecoder); |
|
|
|
oggDecoder.on('stream', function (stream) { |
|
stream.on('error', console.error.bind(console, 'oggDecoder stream error')); |
|
|
|
var opusDecoder = new opus.Decoder({ |
|
channels: 1, |
|
rate: 24000, // 24000Hz |
|
frame_size: 480 // 20ms frame length |
|
}); |
|
opusDecoder.on('error', console.error.bind(console, 'opusDecoder error')); |
|
|
|
// this doesn't seem to work, the wav reader always complains about the chunk id being "\u0000\u0000\u0000\u0000"] |
|
// so, skip it and pipe directly to the speaker |
|
//var wavReader = new wav.Reader(); |
|
//wavReader.on('error', console.error.bind(console, 'wavReader error')); |
|
//wavReader.on('format', function(format) { |
|
// console.log('wav format', format); |
|
// opusDecoder.pipe(new Speaker(format)); |
|
//}); |
|
//stream.pipe(opusDecoder).pipe(wavReader); |
|
|
|
|
|
var speaker = new Speaker({ |
|
channels: 1, // # channels |
|
bitDepth: 16, // #-bit samples |
|
sampleRate: 24000 // # Hz sample rate |
|
}); |
|
speaker.on('error', console.error.bind(console, 'speaker error')); |
|
|
|
stream.pipe(opusDecoder).pipe(speaker); |
|
|
|
|
|
}).on('error', console.error.bind(console, 'oggDecoder error')); |
|
|