2016-06-03 4 views
1

J'essaie de transmettre un flux de données de NodeJS vers un processus pocketsphinx_continuous. Mon idée de comment faire cela est d'utiliser la fonctionnalité de tuyau de NodeJS pour envoyer mes données au flux stdin du processus pocketsphinx.PocketSphinx ne peut pas lire depuis stdin lorsqu'il est exécuté par NodeJS

Si je lance

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

sur la ligne de commande, puis lance pocketsphinx_continuous et attend patiemment entrée stdin.

Cependant, quand j'ajoute

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

à mon programme NodeJS, je reçois:

FATAL: "continuous.c", ligne 158: Impossible d'ouvrir le fichier «/dev/stdin 'pour lire: Pas de périphérique ou d'adresse

J'ai du mal à comprendre pourquoi j'obtiendrais cette erreur sous NodeJS mais pas quand je cours normalement.

Merci,

Josh

+1

Il est préférable d'utiliser node-pocketsphinx au lieu de sous-processus, de cette façon vous serez capable de gérer les erreurs de manière beaucoup plus directe. –

+0

@NikolayShmyrev J'ai eu des problèmes avec node-pocketsphinx ayant une très mauvaise documentation. Il semble que la version originale de moneppo ait une documentation décente, je regardais la fourchette officielle avant. –

+0

Je suis désolé, que voulez-vous dire par "documentation décente"? Quelques paragraphes dans README ou quoi? –

Répondre

1

J'ai trouvé an issue sur les nodejs GitHub qui a répondu à ma question.

J'ai ajusté mon code à la suivante et il fonctionne maintenant:

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

Piping par chat convertit le stdin socket qui NodeJS crée pour l'enfant traite dans un tuyau stdin qui permet/dev/stdin pour travailler .