forked from rogueme/ms-ra-forwarder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlegado.ts
57 lines (54 loc) · 2.43 KB
/
legado.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { VercelRequest, VercelResponse } from '@vercel/node';
import { FORMAT_CONTENT_TYPE } from '../ra';
import { encode, decode } from '../base64/base64';
module.exports = async (request: VercelRequest, response: VercelResponse) => {
let jsonstr = request.query['json'];
let jsondatastr = decode(jsonstr.trim());
let jsondata = JSON.parse(jsondatastr) ?? '';
let api = decodeURIComponent(jsondata['url']) ?? '';
let token = jsondata['token'] ?? '';
const alldata = [];
jsondata['ttsdata'].forEach(item =>{
let name = decodeURIComponent(item['name']) ?? '大声朗读';
let voiceName = item['voiceName'] ?? 'zh-CN-XiaoxiaoNeural';
let voiceFormat = item['voiceFormat'] ?? 'audio-16khz-32kbitrate-mono-mp3';
let styleName = item['styleName'] ?? 'normal';
let styleDegree = item['styleDegree'] ?? 1.00;
let speakSpeed = item['speakSpeed'] ?? 25;
if (Array.isArray(voiceFormat)) {
throw `Invalid format ${voiceFormat}`;
}
if (!FORMAT_CONTENT_TYPE.has(voiceFormat)) {
throw `Invalid format ${voiceFormat}`;
}
let data = {};
data['name'] = name == '' ? '大声朗读' : name;
data['concurrentRate'] = '1';
data['contentType'] = FORMAT_CONTENT_TYPE.get(voiceFormat);
data['id'] = Date.now();
data['loginCheckJs'] = '';
data['loginUi'] = '';
data['loginUrl'] = '';
let header = {
'Content-Type': 'text/plain',
'Authorization': 'Bearer ' + token,
'Format': voiceFormat
}
data['header'] = JSON.stringify(header);
let ssml = '\
<speak xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" version="1.0" xml:lang="en-US">\
<voice name="'+ voiceName + '">\
<prosody rate="{{speakSpeed + ' + speakSpeed + '}}%" pitch="0%" volume="+100%">\
{{String(speakText).replace(/&/g, \'&\').replace(/\"/g, \'"\').replace(/\'/g, \''\').replace(/</g, \'<\').replace(/>/g, \'>\')}}\
</prosody>\
</voice>\
</speak>'
let body = {
'method': 'POST',
'body': ssml
}
data['url'] = api + '/api/ra,' + JSON.stringify(body);
alldata.push(data);
})
response.status(200).json(alldata);
}