createWriteStream完成,但文件不可用

时间:2017-01-09 04:22:08

标签: javascript node.js express watson

我的节点服务器使用Watson TTS api来合成客户端使用POST发送的文本。将TT流写入使用计数器命名的文件(1.ogg,2.ogg ...),一旦完成,发送回文件名。客户端将其加载到音频标签并播放音频。

虽然我正在使用createWriteStream('finish'),但我有时会在客户端出现无法加载文件的错误,好像还没有加载:

GET http://localhost/tts_server/audio/24.ogg 412 (Precondition Failed)
Uncaught (in promise) DOMException: Failed to load because no supported source was found.

此外,如果计数器(以及文件名)为1,它总是会失败。如果要合成的文本很长,它就会失败。

客户端相关代码

$.post("http://192.168.0.4:3000", { text : text }, function(data){
  player.src = 'audio/' + data.count + '.ogg';
  player.oncanplaythrough = player.play();
}); 

服务器端相关代码

var count = 10;

// function to TTS with Watson
function syntText(texto, cb){
    var tts = new TextToSpeechV1 ({
      username: '****',
      password: '****'
    });
    var params = {
      text: texto,
      voice: 'es-ES_EnriqueVoice',
      accept: 'audio/ogg;codecs=opus'
    };
    var ws = fs.createWriteStream('../audio/' + count + '.ogg');
    ws.on('finish', cb);
    tts.synthesize(params).pipe(ws);
}

// post 
app.post('/', function(req, res){
    syntText(req.body.text, function(){ //body parser here
        res.json({count : count});
        count++;
    }); 
});

谢谢

0 个答案:

没有答案