如何在 NodeJS 中捕获自定义事件

How to catch custom events in NodeJS

好吧,这可能是一个愚蠢的问题,我已经尝试在此处和 Google 上进行搜索,但似乎没有任何答案可以真正回答它,因为它对我目前的情况来说不够具体(我知道关于 JS 事件的大量信息,而且有人告诉我没有问题真的很愚蠢)。

我想在达到特定频率时在 NodeJS 中发出自定义事件。所以当我播放一首歌时,它达到 80 分贝以上,我想发出一个事件。

如何在网络浏览器中捕获此事件?我可能需要启动服务器,我知道。但是我如何从我的服务器发送事件,更重要的是,我如何在客户端捕获它们?

(这样我就可以用A-frame做一些不错的视听了)

这是我当前的代码,目前我没有对我的服务器执行任何操作,但我的音频分析(来自 Ableton)有效。

'use strict';

let Max4Node = require('max4node');
let EventEmitter = require("events").EventEmitter;
let ee = new EventEmitter();

// Server
let http = require('http');
let handleRequest = (request, response) => {
    response.end(`It works! ${request.url}`);
}
let server = http.createServer(handleRequest);
const PORT=8080; 
server.listen(PORT, function(){
    console.log(`Server listening on: http://localhost:${PORT}`);
});

let max = new Max4Node();
max.bind();

// Event listeners
ee.on('kick', (data) => {
    console.log(`kick ${data}`);
});

ee.on('clap', (data) => {
    console.log(`clap ${data}`);
});

ee.on('hat', (data) => {
    console.log(`hat ${data}`);
});

// Observe the low-pass filtered track
max.observe({
  path: 'live_set tracks 0',
  property: 'output_meter_level'
})
.on('value', function(val) {
  val > 0.8 ? ee.emit('kick', val) : null;
});

// Observe the high-pass filtered track
max.observe({
  path: 'live_set tracks 3',
  property: 'output_meter_level'
})
.on('value', (val) => {
  val > 0.8 && val < 0.9 ? ee.emit('clap', val) : null;
  val > 0.9 ? ee.emit('hat', val) : null;
});

我希望有人可以让我更好地了解如何处理这种情况,feedback/tips 欢迎!

您需要某种形式从服务器实时获取该事件到 Web 客户端 - 每个人想到的第一个解决方案是 WebSockets(它工作得很好,特别是如果您使用像 Socket.IO).这允许您实时地从服务器到客户端以及从客户端到服务器进行通信。

另一种选择是使用 Server Side Events, which is done over regular HTTP and is super simple to do in JavaScript. This allows the server to send events to the client in realtime, but is unidirectional. If all you need is to send the events to the browser, it's worth taking a look. (Emojitracker is built using this tech, and the creator talks about this a bit more here)