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.
{
"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.
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
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
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)