繁体   English   中英

是否可以从节点 js 中的 Windows CLI 实用程序获取数据流?

[英]Is it possible to get a data stream from windows CLI utility in node js?

我想创建一个节点应用程序,用于记录和解析来自 Windows 10 中系统输出设备的音频。看起来这是一个真正的挑战,因为我检查了许多 npm 包,但没有找到任何允许从输出设备。 所以我找到了一个适用于 Windows 10 的第三方 CLI 实用程序,我不确定我应该给出它的名字,因为它可能像营销等一样受到威胁。

所以这个 CLI 实用程序允许为输出设备记录一个环回三音节并将其保存到 WAV 文件中。
我想知道是否存在某种方法来拦截来自该实用程序的数据流到来自我的 NODE.js 应用程序的 WAV 文件来处理它? 或者如果 CLI 实用程序没有提供一些 API 来获取这些数据,那是不可能的?

我也在考虑立即打开 WAV 文件并在录制期间读取此文件以获取 node.js 应用程序中的最新数据并处理它,但我不确定这是否可能由于写入/读取流同一个文件(来自 CLI - 写入,来自 NODE - 读取)

感谢您提供任何帮助或信息!

PS对不起,如果我的问题很愚蠢。 我对这种低级的东西不熟悉

经过一夜的研究,我设法在我的特定情况下获得了数据。
我使用节点子进程包中的一个子进程来创建一个专用进程,在该进程中我使用适当的参数执行 CLI 实用程序,将记录数据直接发送到 STDOUT。 请记住,由于缓冲区问题exec将无法在此特定任务中工作

这里最重要的是:幸运的是,CLI 实用程序可以将记录数据块发送到 STDOUT 而不是文件。 但是,如果不能,我不知道该怎么办。 我不知道是否存在拦截直接写入输出文件的数据的现有方法,所以这个答案不是 100% 适合这个问题。 如果 CLI 不将数据写入 STDOUT 怎么办? 如果有人知道:请告诉我,我将不胜感激

这是基本的代码示例:

import { spawn } from 'node:child_process';

 const child = spawn('fmedia', ['--record', '--dev-loopback=0', '-o', '@stdout.wav']);
  child.stdout.on('data', data => {
    console.log('stdout data -> ', data);
  })
  child.stderr.on('data', data => {
    console.log('stderr data -> ', data);
  })
  child.on('close', code => {
    console.log('child process exited with code ' + code);
  });

亲切的问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM