hydra-synth / hydra

Livecoding networked visuals in the browser
https://hydra.ojack.xyz
GNU Affero General Public License v3.0
2.19k stars 269 forks source link

feature request: websocket support #28

Open brucelane opened 6 years ago

brucelane commented 6 years ago

hi, wouldn't be nice to have the generated fragment shader from the hydra code sent via websockets to another pc on the network?

ojack commented 6 years ago

yes! there is already websockets as well as webrtc, its just a matter of deciding on an api. i have sent code via websockets here: https://github.com/ojack/hydra-sync

could you explain a little more how you would imagine using it?

brucelane commented 6 years ago

it could be running other browsers on the network without having the need to stream with webrtc as fragment shaders and uniforms are sent as text, very lightweight on the bandwidth. But I got another plan which is to feed my own VJ software with these fragment shaders and uniforms in a standalone visualizer app made with Cinder.

ojack commented 6 years ago

There is a function pb.broadcast() to send text via websockets, pb.sendToPeer() to send text via webrtc to a specific peer, or pb.sendToAll() to send to all connections via webrtc.... but they are only used internally right now. I need to look it over to make it a bit more usable.

brucelane commented 6 years ago

great! at this point I have to check your code before talking without knowing ;-)

micuat commented 3 years ago

sorry for bumping an old thread but I just tested websocket to pass parameters. example app on processing:

import websockets.*;

WebsocketServer ws;

void setup(){
  size(600,200);
  ws= new WebsocketServer(this,8025,"/");
  frameRate(10);
}

void draw(){
  ws.sendMessage("0,"+map(mouseX,0,width,0,1));
}

void webSocketServerEvent(String msg){
 println(msg);
}

then running this on hydra console:

const socket = new WebSocket('ws://localhost:8025/');

// Connection opened
socket.addEventListener('open', function (event) {
  socket.send('Hello Server!');
});

var dd=Array(128).fill(0.5)

socket.addEventListener('message', function (event) {
  let [index, val] = event.data.split(",");
  //console.log(index, val)
  dd[index] = parseFloat(val);
});

and for example

osc(30,0.01,()=>dd[0]).out()

Should I go ahead and add a page in the doc folder? Of course the "API" can be improved by using stringified JSON, for example.

brucelane commented 3 years ago

Since 2018, I added websocket support on all my forks of Hydra and it works fine. hydracinder