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

时间:2016-06-27 18:14:05

标签: node.js events ableton-live maxmsp

好的,所以这可能是一个愚蠢的问题,我已经尝试在这里和Google上搜索但似乎没有真正回答它,因为它对我目前的情况不够具体(那里&# 39;关于我所知道的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;
});

我希望有人能够更好地了解如何解决这种情况,欢迎提供反馈/建议!

1 个答案:

答案 0 :(得分:2)

你需要某种形式从服务器到Web客户端实时获取该事件 - 每个人都想到的第一个解决方案是WebSockets(它工作得非常好,特别是如果你用像{{3}这样的库来抽象它})。这允许您实时地从服务器到客户端以及从客户端到服务器进行通信。

另一种选择是使用Socket.IO,这是通过常规HTTP完成的,并且在JavaScript中非常简单。这允许服务器实时向客户端发送事件,但是是单向的。如果您只需要将事件发送到浏览器,那么值得一看。 (Emojitracker是使用这种技术构建的,创作者对此进行了更多的讨论Server Side Events