2

好的,所以这可能是一个愚蠢的问题,我试过在这里和谷歌上搜索,但似乎没有什么能真正回答它,因为它对我目前的情况还不够具体(我知道关于 JS 事件的信息很多,我也知道)已经被告知没有问题真的很愚蠢)。

每当达到某个频率时,我想在 NodeJS 中发出一个自定义事件。所以当我播放一首歌时,它会超过 80 dB,我想发出一个事件。

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

(这样我就可以使用 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;
});

我希望有人可以让我更好地了解如何解决这种情况,欢迎提供反馈/提示!

4

1 回答 1

2

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

另一种选择是使用服务器端事件,它通过常规 HTTP 完成,并且在 JavaScript 中非常简单。这允许服务器实时向客户端发送事件,但是是单向的。如果您只需要将事件发送到浏览器,那么值得一看。(Emojitracker 是使用这项技术构建的,创建者在这里多谈了一点)

于 2016-06-27T22:16:06.547 回答