【问题标题】:PocketSphinx can't read from stdin when executed by NodeJS由 NodeJS 执行时,PocketSphinx 无法从标准输入读取
【发布时间】:2016-06-03 02:32:15
【问题描述】:

我正在尝试将数据流从 NodeJS 传递到 pocketsphinx_continuous 进程。我的想法是使用 NodeJS 的管道功能将我的数据发送到 pocketsphinx 进程的标准输入流。

如果我跑步

pocketsphinx_continuous -infile /dev/stdin -nfft 2048 -samprate 44100 -keyphrase "hello computer" -kws_threshold 1e-18

在命令行上,pocketsphinx_continuous 启动并耐心等待标准输入。

但是,当我添加时

var ps = exec('pocketsphinx_continuous -infile /dev/stdin -nfft 2048 -samprate 44100 -keyphrase "hello computer" -kws_threshold 1e-18', function(error, stdout, stderr) {});

对于我的 NodeJS 程序,我得到:

致命:“continuous.c”,第 158 行:无法打开文件 '/dev/stdin' 进行读取:没有这样的设备或地址

我很难理解为什么在 NodeJS 下运行时会出现此错误,但在正常运行时却不会。

谢谢,

乔什

【问题讨论】:

  • 最好使用 node-pocketsphinx 而不是 subprocess,这样您就可以更直接地处理错误。
  • @NikolayShmyrev 我遇到了 node-pocketsphinx 文档非常差的问题。不过,moneppo 的原始版本似乎有不错的文档,我之前正在查看官方 fork。
  • 对不起,您所说的“体面的文档”是什么意思?自述文件中的几段或什么?
  • 不认真,这是raw.githubusercontent.com/moneppo/node-pocketsphinx/master/… 一个“体面的文档”吗?
  • 嗯,你是对的,原版的文档也很糟糕。我说它不错的原因是因为“PocketSphinx 对象是一个接受单声道 16 kHz 16 位 PCM 数据的可写流”这句话。这至少告诉我一些关于我应该如何使用这个包的信息。 cmusphinx 版本根本没有告诉我任何有用的信息。

标签: node.js cmusphinx pocketsphinx


【解决方案1】:

我在 nodejs GitHub 上找到了an issue,它回答了我的问题。

我已将我的代码调整为以下内容,现在可以使用:

var ps = exec('cat | pocketsphinx_continuous -infile /dev/stdin -nfft 2048 -samprate 44100 -keyphrase "hello computer" -kws_threshold 1e-18', function(error, stdout, stderr) {});

通过 cat 管道将 NodeJS 为子进程创建的套接字标准输入转换为允许 /dev/stdin 工作的管道标准输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2018-05-05
    • 2011-01-28
    • 1970-01-01
    • 2013-03-30
    • 2012-02-17
    • 2013-11-26
    相关资源
    最近更新 更多