2016-06-27 8 views
1

좋아요, 어쩌면 어리석은 질문 일 겁니다. 여기와 Google에서 검색을 시도했지만 아무 것도 실제로 대답하지 않는 것 같습니다. 현재 상황에 대해 충분히 구체적이지 않으므로 (톤이 있습니다. 내가 아는 JS 이벤트에 대한 정보도 있고, 나는 정말로 어리석은 질문이 없다고 들었다.NodeJS에서 맞춤 이벤트를 잡는 방법

특정 빈도에 도달 할 때마다 NodeJS에서 사용자 지정 이벤트를 내보내려고합니다. 그래서 제가 노래를 연주 할 때, 그것은 80dB을 넘었고, 나는 이벤트를 내고 싶습니다.

웹 브라우저에서이 이벤트를 어떻게 잡아낼 수 있습니까? 내가 아는 서버를 발사해야 할 것 같습니다. 그러나 내 서버에서 이벤트를 보내려면 어떻게해야합니까? 더 중요한 것은 어떻게 클라이언트 측에서 이러한 이벤트를 잡을 수 있습니까?

(A 프레임을 사용하고 멋진 오디오 비주얼을 만들 수 있도록)

이것은 현재 나의 서버에서는 아무것도하지 않지만 현재 (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; 
}); 

누군가이 상황을 해결하는 방법에 대한 더 나은 통찰력을 줄 수 있기를 바랍니다. 피드백/팁을 환영합니다!

+0

emit 이벤트 대신 console.log를 사용하면 output/console에 아무 것도 없나요? –

+0

그것은 똑같은 일을하고, 내 문제도 아닙니다. 내 현재 이벤트 리스너는 이미 데시벨의 현재 값으로 콘솔에 로깅하고 있으므로 내 관찰자 내부의 이벤트 이미 터를 바꿔 넣는 것은 똑같습니다. 내 문제는 서버를 통해 이벤트를 보내고 클라이언트 쪽을 잡아 내고 싶다는 것입니다. –

+3

** socket.io ** - http://socket.io/docs/ –

답변

2

서버에서 웹 클라이언트로 이벤트를 가져 오는 중 일부 형식이 필요합니다. 누구나 생각할 수있는 첫 번째 솔루션은 WebSockets입니다 (특히 매우 효과적입니다. 특히 Socket.IO과 같은 라이브러리로 추상화하면 더욱 그렇습니다). 이를 통해 서버에서 클라이언트로 그리고 클라이언트에서 서버로 실시간으로 통신 할 수 있습니다.

또 다른 옵션은 Server Side Events을 사용하는 것입니다.이 방법은 일반적인 HTTP를 통해 수행되며 JavaScript로 처리하기 쉽습니다. 이를 통해 서버는 실시간으로 클라이언트에 이벤트를 보낼 수 있지만 단방향입니다. 필요한 것은 브라우저에 이벤트를 보내는 것입니다. 한 번해볼 가치가 있습니다. (Emojitracker는이 기술을 사용하여 만들어졌으며 제작자가 조금 더 얘기합니다 here)

+0

나는 이미 내 질문 아래에 코멘트 덕분에 일하고있어, 나는 실시간 통신 때문에이 응용 프로그램에 대한 socket.io을 선호. 지금은 단순히 io 이벤트를 내보내고 브라우저에서 클라이언트와 함께 잡습니다. 좀 더 완전한 대답을 해주셔서 감사합니다, 나는 이것을 올바른 것으로 생각합니다;) –