私のノード・サーバーは、Watson TTS API を使用して、POST を使用してクライアントから送信されたテキストを合成します。カウンター (1.ogg、2.ogg...) を使用して名前が付けられたファイルに TT ストリームを書き込み、終了するとファイル名を返します。クライアントはそれをオーディオ タグにロードし、オーディオを再生します。
私は createWriteStream の on('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++;
});
});
ありがとうございました