PWSV v1.1.1 • Protocol v2 • JUCE 8 & CLAP

Stream DAW Telemetry & MIDI
Directly Over WebSockets

An ultra-low latency, thread-safe VST3 and CLAP audio plugin embedding a native non-blocking RFC 6455 server. Broadcast real-time BPM, playhead position, time signature, bar/beat metrics, and active MIDI notes to visualizers, web apps, TouchDesigner, OBS, and game engines.

See Protocol v2 in Real-Time

Test parameter updates, transport changes, and active MIDI note streaming as generated by PWSV.

DAW Playhead Simulator Port 8080 Active
C4
D4
E4
F4
G4
A4
B4
ws://127.0.0.1:8080 (Streaming)
JSON v2
{
  "protocol": 2,
  "time_sec": 32.450,
  "time_samples": 1431045,
  "ppq": 69.226,
  "bpm": 128.0,
  "bar": 18,
  "beat": 1.22,
  "time_sig": [4, 4],
  "playing": true,
  "recording": false,
  "looping": true,
  "notes": [
    { "note": 60, "vel": 100, "ch": 1 },
    { "note": 64, "vel": 95, "ch": 1 }
  ]
}

Built for Performance & Precision

Engineered in modern C++17 to deliver robust, zero-allocation socket streaming directly from your audio host.

Microsecond Transport Sync

Queries DAW playhead metrics (time in seconds, sample frames, PPQ position, BPM, bar numbers, beat offsets) with exact sub-block precision.

Polyphonic MIDI Streaming

Captures live and sequenced NoteOn/NoteOff events, tracking pitch numbers, velocity dynamics, and 16-channel routing simultaneously.

Triple Timing Engines

Choose between fixed frequency (Hz Mode), musical grid quantization (Beats Mode with 10 subdivisions), or events per minute (Minutes Mode).

VST3 & CLAP Architecture

Supports industry-standard VST3 and next-generation CLAP plugin specifications, compatible with Ableton, FL Studio, Reaper, Bitwig, and Cubase.

Zero-Dependency Cryptography

Custom pure C++ SHA-1 and Base64 implementations provide compliant RFC 6455 opening handshake handling without external libraries.

Non-Blocking Thread Safety

Dedicated worker thread runs non-blocking socket polling (`select()`) so your DAW audio engine experiences zero latency and zero drops.

Two Plugins for Complete Flexibility

PWSV provides dedicated plugins for audio insert chains and instrument MIDI tracks.

Audio Effect

Patos WebSocket VST Effect

Designed for Master channels and audio insert tracks. Performs 100% transparent audio pass-through without coloring sound or adding latency.

  • ✓ Stereo audio input & output
  • ✓ Zero audio DSP overhead (pass-through)
  • ✓ Full transport telemetry streaming
  • ✓ Master bus & FX track insertion
Effect Plugin Docs →
Virtual Instrument

Patos WebSocket VST Generator

Configured as a virtual instrument/synth for MIDI tracks. Ingests polyphonic note events, velocity, and channel routing.

  • ✓ Full MIDI NoteOn & NoteOff ingestion
  • ✓ Polyphonic active note array tracking
  • ✓ Cleared silent audio buffer
  • ✓ Instrument track & Piano roll routing
Generator Plugin Docs →

Connect in Any Language

Standard RFC 6455 WebSockets make integration with your stack effortless.

// Connect directly from any modern web browser
const ws = new WebSocket("ws://127.0.0.1:8080");

ws.onopen = () => console.log("Connected to PWSV!");

ws.onmessage = (event) => {
  const telemetry = JSON.parse(event.data);
  console.log(`BPM: ${telemetry.bpm} | Bar: ${telemetry.bar} | Beat: ${telemetry.beat}`);
  
  if (telemetry.notes.length > 0) {
    console.log("Active Notes:", telemetry.notes);
  }
};
# Run without installing any pip packages using sample/test_ws.py
import socket, json
from sample.test_ws import connect_ws, recv_frame

sock = connect_ws("127.0.0.1", 8080)
while True:
    data = recv_frame(sock)
    if not data: break
    d = json.loads(data)
    print(f"Time: {d['time_sec']}s | Playing: {d['playing']} | Notes: {d['notes']}")
# Inside a WebSocket DAT callback in TouchDesigner
import json

def onReceiveText(dat, rowIndex, message, bytes):
    data = json.loads(message)
    # Drive operators, CHOPs, and generative shaders
    op('constant_bpm').par.value0 = data.get('bpm', 120)
    op('constant_beat').par.value0 = data.get('beat', 0.0)