-
Notifications
You must be signed in to change notification settings - Fork 6
/
softalk.js
55 lines (44 loc) · 1.84 KB
/
softalk.js
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
const fs = require('fs');
const { execFile } = require('child_process');
const chokidar = require('chokidar');
const Encoding = require('encoding-japanese');
module.exports = class {
constructor(log) {
this.log = log.child({ module: 'softalk' });
this.log.debug('🔎 Softalkを探しています...');
if (fs.existsSync('./softalk/SofTalk.exe')) {
this.log.debug('✅ Softalkが見つかりました!');
} else {
this.log.fatal('💥 Softalkの実行ファイルが見つかりませんでした. 正しくSoftalkが配置されてるか確認してください. 詳しくは公式サイトをご覧ください: https://damare.m86.work/');
process.exit(1);
}
}
toString(bytes) {
return Encoding.convert(bytes, {
from: 'SJIS',
to: 'UNICODE',
type: 'string',
});
}
async createVoice(message) {
this.log.debug("🎤 Softalkで音声を生成します:", message);
execFile(`${__dirname}/softalk/SofTalk.exe`, ["/NM:女性01", `/R:${__dirname}\\voice.wav`, "/T:0", "/X:1", "/V:100", `/W:${message}`], { shell: true }, (error, stdout, stderr) => {
if (error) {
this.log.error(error);
return;
}
});
this.log.debug("📌 音声生成コマンドを実行しました")
let waitVoiceCreate = new Promise((resolve, reject) => {
let watcher = chokidar.watch('./voice.wav');
watcher.on('add', (path) => {
this.log.debug("🔍 chokidarが音声ファイルを見つけました:", path);
watcher.close();
resolve();
});
})
await waitVoiceCreate;
this.log.debug("✅ 生成処理が完了しました");
return;
}
}