intercom at the yard

NYU IDM logo

overview

web intercom for multi-zone voice announcements at nyu tandon at the yard. raspberry pis in different parts of the building run the app in a browser, hooked up to speakers, and someone at a mic can hold talk to broadcast into one zone, several zones, or all of them at once. built on p5LiveMedia (webrtc over p5.js). during my internship at nyu idm i added a music mode: pick blackhole 2ch or a mic as input and route system audio through the same talk pipeline, so you can send music to endpoints without rebuilding the whole intercom stack. my contribution is in pr #7 on the idm repo.

features

  • hold-to-talk interface sends live audio to specific zones or every zone at once
  • each endpoint is just a browser on a pi pointed at the deployed app
  • music mode lets you broadcast from blackhole 2ch instead of a microphone
  • audio input selector in settings, default mic stays default when nothing else is picked
  • minimal diff on upstream: keeps existing peer handling, zone routing, and hold-to-talk behavior

technical details

  • p5.js + p5LiveMedia for webrtc peer connections between controller and endpoints
  • zone array messages, receiver muting, and hold-to-talk routing unchanged from upstream
  • settings popup adds microphone vs blackhole 2ch selection with matching existing ui styling
  • selected device id saved to local storage; page reload reconnects capture through original p5LiveMedia init
  • optional music mode reuses the same talk path instead of a separate audio pipeline
  • deployed on vercel with a private room name in env (see upstream readme)

source

github.com/IDMNYU/Intercom-At-The-Yard · pr #7 (music feature)