Skip to content

hselasky/hpsjam

Repository files navigation

HPS JAM

An online audio collaboration tool for low latency audio with lyrics and chat support.

News

Some non-backwards compatible network protocol changes have been introduced as of v1.1.0 to significantly reduce audio jitter. Please update both client and server software at the same time!

Features

  • uncompressed audio transmission in 1 channel 8-bit up to 2 channels 32-bit. This results in crystal clear high-end audio over the internet!
  • additional protection against jitter by redundancy in packet transmission
  • local audio effects:
    • highpass
    • lowpass
    • bandpass
    • delay - With this feature you can hear yourself with an "average" delay that fits the real one from the server. This provides a clean local signal without jitter, while maintaining the delay and thus being "in sync" with fellow musicians when playing/jamming. Usage: click "MIXER" then "EQ DELAY" then "Long Delay" and then "Apply". This will apply the calculated average. You may want to click the "Long Delay" button several times before hitting apply, so that you can choose the appropiate delay. Credits go to Nils Brederlow for suggesting it.
  • automatic audio compression when signal overflows.
  • built in HTTP server allows for streaming the uncompressed audio in 32-bit stereo WAV-file format to disk or other programs. Supported for both client and server.
  • server and mixer access can be password protected.
  • low latency MIDI event routing
  • high quality recording and playback
  • multi-path UDP transport to optimize latency and jitter

Users guides

How to build client and server under FreeBSD after cloning this repository

  • git submodule init
  • git submodule update
  • qmake PREFIX=/usr/local
  • make all
  • make install

How to build server under Ubuntu Linux after cloning this repository

  • sudo apt-get install git build-essential qt5-qmake qtbase5-dev qtbase5-dev-tools libqt5svg5-dev libqt5webenginewidgets5 libqt5webchannel5-dev qtwebengine5-dev libjack-dev jackd
  • git submodule init
  • git submodule update
  • qmake PREFIX=/usr WITHOUT_AUDIO=YES QMAKE_CFLAGS_ISYSTEM="-I"
  • make all
  • make install

Notes

  • By giving qmake the "WITHOUT_AUDIO=YES" flag you can skip the jack dependency for the server side.
  • By giving qmake the "QMAKE_CFLAGS_ISYSTEM=-I" flag you can fix the following compile error "fatal error: stdlib.h: No such file or directory"

Dependencies

  • jackd libjack-dev
  • ASIO
  • build-essential
  • qt5-qmake
  • qtbase5-dev
  • qtbase5-dev-tools
  • libqt5svg5-dev
  • libqt5webenginewidgets5
  • libqt5webchannel5-dev
  • qtwebengine5-dev

Example how to start the client

HpsJam &

Example how to start the server in foreground mode, to see errors

HpsJam --server --port 22124 --peers 16

Example how to start the server

HpsJam --server --port 22124 --peers 16 --daemon

Example of an Ubuntu service file

[Unit]
Description=HpsJam headless server
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
User=jamulus # or hpsjam if that exists
Group=nogroup
NoNewPrivileges=true
ProtectSystem=true
ProtectHome=true
Nice=-20
IOSchedulingClass=realtime
IOSchedulingPriority=0

#### Change this parameters to your liking
ExecStart=/bin/sh -c 'exec /usr/bin/HpsJam --server \
--port 22126 \
--peers 16'
# [--welcome-msg-file /yourPath/yourFile
#	[--password <64_bit_hexadecimal_password>] \
#	[--mixer-password <64_bit_hexadecimal_password>] \
#	[--ncpu <1,2,3, ... 64, Default is 1>] \
#	[--httpd ] \
#	[--httpd-conns  \
#	[--cli-port ]

Restart=on-failure
RestartSec=30
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=jamulus

[Install]
WantedBy=multi-user.target
#

Example how to use ffmpeg to stream from HpsJam to icecast

HpsJam --server --port 22124 --peers 16 --httpd 127.0.0.1:8080 --daemon

ffmpeg -f s32le -ac 2 -ar 48000 -i http://127.0.0.1:8080/stream.wav \
       -acodec libmp3lame -ab 128k -ac 2 -content_type audio/mpeg \
       -f mp3 icecast://source:[email protected]:8000/stream

How to get help about the commandline parameters

HpsJam -h

Privacy policy

HPS JAM does not collect any information from its users.

Supported platforms