Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const MODEL_PATH = "/opt/iobroker/iobroker-data/vosk-model-small-ru-0.15/";
- const SAMPLE_RATE = 32000;
- var vosk = require("vosk");
- vosk.setLogLevel(-1);
- const model = new vosk.Model(MODEL_PATH);
- const rec = new vosk.Recognizer({model: model, sampleRate: SAMPLE_RATE});
- onStop(function (callback) {
- rec.free();
- log('stop');
- }, 2000);
- on({id: "telegram.0.communicate.pathFile", ack: false, change: 'any'}, function (obj) {
- const msg = JSON.parse(getState("telegram.0.communicate.requestRaw").val);
- const user = msg.from.first_name;
- log(msg);
- if (msg.voice) {
- const voiceFile = obj.state.val;
- log(voiceFile);
- const { spawn } = require("child_process");
- log('start');
- const ffmpegCommand = `-y -i ${voiceFile} -ar ${SAMPLE_RATE} -vn -ac 1 -f s16le -`;
- const ffmpeg = spawn('ffmpeg', (ffmpegCommand).split(' '), {});
- // таймер убиения процесса через 10 секунд (вдруг завис)
- const killTimer = setTimeout(function(){
- console.error('Kill ffmpeg!!!');
- ffmpeg.kill();
- //ffmpeg.kill('SIGTERM');
- }, 10000);
- const absKillTimer = setTimeout(function(){
- console.error('Absolutly kill ffmpeg!!!');
- ffmpeg.kill('SIGKILL');
- }, 50000);
- ffmpeg.stdout.on('data', function(data){
- log('get data');
- rec.acceptWaveform(data);
- log('get res');
- const res = rec.finalResult();
- log(res);
- if (res && res.text != "") {
- log(res.text);
- sendTo('telegram.0', {
- user: user,
- text: res.text
- });
- }
- });
- ffmpeg.stderr.on('data', function(data){
- log('error');
- log(data.toString());
- });
- ffmpeg.on('close', function(code) {
- log('close');
- clearTimeout(killTimer);
- clearTimeout(absKillTimer);
- });
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement