电子-无法使用Google的语音转文字引擎

时间:2019-02-27 07:29:01

标签: node.js typescript speech-recognition

我想将Google Speech to Text engine与我的麦克风链接。
我找到了this页,将代码复制到了我的fio文件中(未用a = zeros(5, 2) for i = 3:6 a = cat(i, a, zeros(size(a))); end 注释行),但是在运行时-由于第7行({{1} }):

是的,我确实尝试同时运行renderer.ts(因为我主要使用Yarn)和const以及const client = new speech.SpeechClient();,但是问题仍然存在。

yarn install --force

npm rebuild

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

为了在Electron上使用此库,您必须添加额外的安装参数以专门为Electron安装。电子有using native Node modules的通用说明。

特别是对于gRPC,对于您拥有的Electron版本,应该可以通过运行获取它

npm rebuild --runtime=electron --target=4.0.0

尤其是对Electron 4的警告:由于Electron 4.0.4中引入了重大更改,grpc将不适用于该版本。它仍可与Electron 4的早期版本一起使用。

答案 1 :(得分:0)

解决我问题的方法是几种资源的结合。

首先,安装gRPC(感谢murgatroid99Nicolas Noble):

npm rebuild grpc --runtime=electron --target=4.0.3

我认为这会安装gRPC二进制文件,因此我可以在Electron 4.0.3上使用它们(不是最新版本,因为它似乎不适用于最新版本)
尽管由于它只是安装gRPC,但我仍然需要分别安装Electron,所以:

yarn add -D electron@4.0.3

如果要将其保留在一行中:

npm rebuild grpc --runtime=electron --target=4.0.3 && yarn add -D electron@4.0.3

然后我收到this错误,并用Google搜索,尽管找不到明确的答案。
然后,我意识到,由于this article(翻译成英文),模块node-record-lpcm16刚刚被用作从我的软件到SoX的桥梁。
因此,实际上,此错误仅与不能从命令行使用sox程序(无法生成进程)有关,至少不是纯粹基于仅键入sox(我可以CMD,但由于某种原因我的应用程序无法显示。
因此,我:

1)将recordProgram: 'rec'更改为recordProgram: 'sox'renderer.ts
2)输入了node_modules\node-record-lpcm16\index.js
3)已更改

case 'sox':
  var cmd = 'sox';
  var cmdArgs = [
    '-q',                     // show no progress
    '-t', 'waveaudio',        // audio type
    '-d',                     // use default recording device
    '-r', options.sampleRate, // sample rate
    '-c', options.channels,   // channels
    '-e', 'signed-integer',   // sample encoding
    '-b', '16',               // precision (bits)
    '-',                      // pipe
    // end on silence
    'silence', '1', '0.1', options.thresholdStart || options.threshold + '%',
    '1', options.silence, options.thresholdEnd || options.threshold + '%'
  ];
  break

case 'sox':
  var cmd = 'C:\\Program Files (x86)\\sox-14-4-2\\sox.exe';
  var cmdArgs = [ // ^ SPECIFYING FULL PATH
    '-q',                     // show no progress
    '-t', 'waveaudio',        // audio type
    '-d',                     // use default recording device
    '-r', options.sampleRate, // sample rate
    '-c', options.channels,   // channels
    '-e', 'signed-integer',   // sample encoding
    '-b', '16',               // precision (bits)
    '-',                      // pipe
    // end on silence
    'silence', '1', '0.1', options.thresholdStart || options.threshold + '%',
    '1', options.silence, options.thresholdEnd || options.threshold + '%'
  ];
  break

然后,事实证明,如果不添加上述文章中提到的额外内容,则无法录制麦克风,因此:

case 'sox':
  var cmd = 'C:\\Program Files (x86)\\sox-14-4-2\\sox.exe';
  var cmdArgs = [
    '-q',                     // show no progress
    '-t', 'waveaudio',        // audio type
    '-d',                     // use default recording device
    '-r', options.sampleRate, // sample rate
    '-c', options.channels,   // channels
    '-e', 'signed-integer',   // sample encoding
    '-t', 'raw', // Added
    '-b', '16',               // precision (bits)
    '-',                      // pipe
    // end on silence
    'silence', '1', '0.1', options.thresholdStart || options.threshold + '%',
    '1', options.silence, options.thresholdEnd || options.threshold + '%'
  ];
  break

如果您遇到Google Cloud凭据身份验证问题,请参阅this answer

这些解决了我的录制问题!

然后,我遇到一个问题,即Google将音频流限制为65秒,因此,通过堆栈跟踪行,我追查了引起问题的行并注释了这些行,直到到达{{1 }}(输出renderer.ts),所以我只是将变量和记录函数包装在一个函数中,然后递归调用该函数,如下所示:

Reached transcription time limit, press Ctrl+C

这个解决方案似乎解决了这个问题!