Advertisement
Guest User

Untitled

a guest
May 15th, 2021
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. const MODEL_PATH = "/opt/iobroker/iobroker-data/vosk-model-small-ru-0.15/";
  2. const SAMPLE_RATE = 32000;
  3. var vosk = require("vosk");
  4. vosk.setLogLevel(-1);
  5. const model = new vosk.Model(MODEL_PATH);
  6. const rec = new vosk.Recognizer({model: model, sampleRate: SAMPLE_RATE});
  7.  
  8. onStop(function (callback) {
  9. rec.free();
  10. log('stop');
  11. }, 2000);
  12.  
  13. on({id: "telegram.0.communicate.pathFile", ack: false, change: 'any'}, function (obj) {
  14. const msg = JSON.parse(getState("telegram.0.communicate.requestRaw").val);
  15. const user = msg.from.first_name;
  16. log(msg);
  17. if (msg.voice) {
  18. const voiceFile = obj.state.val;
  19. log(voiceFile);
  20.  
  21. const { spawn } = require("child_process");
  22. log('start');
  23.  
  24. const ffmpegCommand = `-y -i ${voiceFile} -ar ${SAMPLE_RATE} -vn -ac 1 -f s16le -`;
  25. const ffmpeg = spawn('ffmpeg', (ffmpegCommand).split(' '), {});
  26. // таймер убиения процесса через 10 секунд (вдруг завис)
  27. const killTimer = setTimeout(function(){
  28. console.error('Kill ffmpeg!!!');
  29. ffmpeg.kill();
  30. //ffmpeg.kill('SIGTERM');
  31. }, 10000);
  32. const absKillTimer = setTimeout(function(){
  33. console.error('Absolutly kill ffmpeg!!!');
  34. ffmpeg.kill('SIGKILL');
  35. }, 50000);
  36. const buf = [];
  37. ffmpeg.stdout.on('data', function(data){
  38. log('get data');
  39. buf.push(data);
  40. });
  41. ffmpeg.stderr.on('data', function(data){
  42. log('error');
  43. log(data.toString());
  44. });
  45. ffmpeg.on('close', function(code) {
  46. log('close');
  47. clearTimeout(killTimer);
  48. clearTimeout(absKillTimer);
  49. rec.acceptWaveform(Buffer.concat(buf));
  50. log('get res');
  51. const res = rec.finalResult();
  52. log(res);
  53. if (res && res.text != "") {
  54. log(res.text);
  55. sendTo('telegram.0', {
  56. user: user,
  57. text: res.text
  58. });
  59. }
  60. });
  61. }
  62. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement