2016-06-27 6 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'を実行すると出力/コンソールに何かがありますか? –

+0

それは同じことをして、私の問題でもありません。私の現在のイベントリスナーは、現在の値をデシベルでコンソールに記録しているので、オブザーバー内のイベントエミッタを置き換えることはまったく同じです。私の問題は、私はサーバーを介してイベントを送信し、それらをクライアント側で捕まえたいということです。 –

+3

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

答えて

2

サーバーからWebクライアントへのイベントを取得するには、ある程度のリアルタイム性が必要です。誰もが最初に考える解決策は、WebSocketsです(実際にはうまくいきます。特に、Socket.IOなどのライブラリで抽象化してください)。これにより、サーバからクライアントへ、クライアントからサーバへリアルタイムで通信することができます。

別のオプションは、Server Side Eventsを使用することです。これは、通常のHTTP経由で行われ、JavaScriptで簡単に行うことができます。これにより、サーバーはリアルタイムでクライアントにイベントを送信できますが、一方向です。必要なのは、イベントをブラウザに送信することだけです。一見する価値があります。 (Emojitrackerはこの技術を使用して構築されており、これについてもう少し詳しく語りますhere

+0

私はすでに私の質問の下のコメントのおかげで働いています、私はリアルタイムの通信のためにこのアプリのためのsocket.ioを支持します。私は現在、単にioのイベントを出して、クライアントでブラウザにキャッチしています。あなたのより完全な答えをありがとう、私は正しいものとしてこれを取る;) –

関連する問題