Как ловить пользовательские события в 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;
});

Я надеюсь, что кто-то может дать мне лучшее представление о том, как справиться с этой ситуацией, отзывы / советы приветствуются!

1 ответ

Решение

Вам нужна некоторая форма передачи этого события с сервера на веб-клиент в несколько реальном времени - первое решение, о котором все думают, - это WebSockets (который работает очень хорошо, особенно если вы абстрагируете его с помощью библиотеки, такой как Socket.IO). Это позволяет обмениваться данными как с сервера клиенту, так и с клиента на сервер в режиме реального времени.

Другой вариант - использовать события на стороне сервера, которые выполняются по обычному HTTP и очень просты в JavaScript. Это позволяет серверу отправлять события клиенту в режиме реального времени, но является однонаправленным. Если все, что вам нужно, это отправить события в браузер, стоит посмотреть. (Emojitracker построен с использованием этой технологии, и создатель говорит об этом немного больше здесь)

Другие вопросы по тегам