Background and theory of operation
Welcome to our community of musicians. Note that while we will try to help where possible, we have to presume that you (or at least one member of your ensemble) bring a basic understanding of distributed music with you to this project.
Distributed music is a complex domain which requires a certain degree of technical and artistic knowledge and we are counting on your willingness to do some background reading before asking for help. More on the “asking for help” topic in the Support and Communication Rules FAQ below.
Here are our suggestions for those seeking to understand the theory behind this project:
- Chapter Four of the JazzAlex’s Ph.D. thesis has a complete description of the distributed music model we’re working on here.
- Chapter Five describes the artistic challenges caused by audio latency between performers.
- Our IEEE-Access publication (mainly Section IV) describes the current state of the art and Soundjack in particular.
- The Tech Tutorial tab is intended to be both a “quick start” and refresher resource.
- We strongly recommend that at a minimum the “technical lead” member of your group is deeply familiar with the written and video material on that page, as well as this FAQ. You, and we, should be able to count on that person to resolve typical set-up and operational issues.
- In some cases users do not receive the registration email. Please check your SPAM folder first — if it’s not there it probably wasn’t sent. In that case, please send a message to user jazzalex within this platform. He will manually enable your account. Please be patient, this process can take hours or days depending on his workload. He will inform you by email when your account is active.
- Soundjack may return the error “This is an application of a non-verified developer” rather than running the first time you open it. In this case, right-click (hit ctrl key while clicking) the application file and start Soundjack via “open” from the drop-down menu. You can run it normally with the usual left-click from then on.
- Problem: my input/output devices are accepted by Stage, but sound is neither captured nor played back, the level meter does not move and there is no sound (and in the case of video, the app completely crashes).
Answer: recent versions of OSX require an additional security step. In this case:
– make sure that the Soundjack app is in the Applications folder
– run the OSX System Preferences app
– navigate to Security & Privacy
– enable Soundjack to use the needed devices (Microphone and/or Camera respectively).
If Soundjack does not appear in the list of apps there, or in case of other issues, start SJ via Terminal. Open the terminal and a command something like this. Note: The Soundjack app-name is formatted as ” SJC2nnnnn.app ” (SJC200616.app at the time of writing this part of the FAQ).
/Applications/[ current soundjack app ]/Contents/MacOS/soundjackOSX should then prompt you to enable the Microphone and/or Camera.
- The ASIO buffersize is often not set automatically. Please make sure to set them in the respective configuration panel. It opens up every time the card is initialized. Note that Soundjack currently requires a 48000 sample rate (higher rates are in process).
- Some configurations experience performance issues and in turn cannot establish localhost connections with a network buffer of 128 samples and a jitter buffer of one packet. Open Windows Task Manager, select the “details” tab, right click on the soundjack.exe process and switch from “normal” to “realtime” scheduling, which often drastically increases performance.
- ASIO4ALL is an alternative to a native ASIO driver, however proper functionality is not assured and we only provide limited support. Here are some tips if your account doesn’t turn green and you are using ASIO4ALL drivers.
– Locate the configuration panel. Once you have an ASIO4ALL-configured session running, click on the “play” symbol in the dock (containing icons of running applications) to access the settings dialogue.
– Adjust input and output settings.
Also note that ASIO4ALL does not allow more than one audio client at the same time – this includes system sounds, DAWs, etc. – and thus the best choice is likely to be a native ASIO driver.
- Use the script in the main folder to run the SJC – e.g. ./SJC200616.sh
- The current download may not contain all the required libs. Use “sudo apt-get instal <name-of-the-lib>” to install the ones your system tells you are missing. If “apt-get” is not available, try the “yum” command instead.
- Video is still in beta status: It works fine for OSX. It may or may not on Linux and Windows depending on your hardware and OS. Please try it and share what happens on your machine with user jazzalex in this platform (please include info about your OS).
- Even if video works it could lead to crashes. In this case please switch the video off and try to determine if the video is the actual crash cause.
- Additional tips: don’t use the Interleaved option at all and use the JPEG codec to conserve bandwidth.
- The channel selector below the loopback fader is in beta mode and has not been extensively tested yet – we encourage you to use either the 1, 2, 4 ,8 or 16 channel bundles at this time. Note that input and output channel counts are presumed to be the same at this time.
- Integrated audio devices work very well on OSX and reasonably well on Linux. But they often cause performance issues on Windows. We recommend an external USB-Soundcard (e.g. Focusrite Scarlett Solo or Behringer U-Phoria) for Windows users.
- Almost any new audio gear such as guitar processors etc. can be used as a sound card. However, most of them lead to performance issues. Please send a message to user jazzalex in this platform regarding your experience so we can create a list of working devices.
- You can reliably run SJC with multiple audio applications at the same time on OSX without an audio server (see below). This is less likely with Windows (especially with ASIO4ALL) and thus you may be limited to processing the sound of only one application at a time without an error message.
- Other apps might provide VST plugins in order to connect these apps – Soundjack currently doesn’t.
- You have to use an audio server and use it as the input and output device driver if you want to run more than one audio application on your machine and want to route signals between them.
- Possible audio servers are JACK (http://www.jackaudio.org), Blackhole (https://github.com/ExistentialAudio/BlackHole), and Loopback (https://rogueamoeba.com/loopback/). Our current preference is JACK.
The general idea is to use the audio server between applications and route between them within the audio server. For example:
– Select the audio-server as the input and output device in Soundjack
– Do the same in your DAW.
– Route between Soundjack and the DAW within the audio-server connection panel
Make sure that everything is adjusted to 48 kHz sample rate when using an audio server. Also make sure that audio channels and audio buffer (frame-size) configurations match for every connected audio application. Otherwise you will have strange effects.
- Soundjack is primarily a point-to-point (p2p) streaming system and thus network load and latency between each pair of users will vary depending on the audio settings they apply. This also means that users with limited bandwidth may find it hard to participate as the number of performers grows. Your sessions do not generate any network traffic on (and are not constrained by) our servers in this configuration.
We also provide a software server (where each player connects to the server, rather than to each other) which is currently in beta and available under the name “Mix Server Nürnberg.”
We also provide a high-performance hardware server (Mix Server Köthen) but it’s currently restricted to certain users.
- We strongly recommend that you use a wired connection to your network rather than WIFI. This will result in the most stable and low-latency audio streaming. You will encounter a significant number of audio dropouts with WIFI, which can only be addressed with higher buffers and in turn higher latencies. Ideally turn off WIFI and explicitly choose the wired endpoint from the list of available network interfaces on your computer.
- Soundjack’s default sample-buffer/network-buffer (512) and jitter-buffer (4) settings prohibit distant rhythmical interaction – they result in 40ms of latency within your computer. You must reduce these buffer settings and determine whether your audio gear and network connection can handle them (deliver audio without crackling or distortion). Finding these optimal settings will vary between performers. The goal is to use 128 or even 64 samples to the sample-buffer, 128 samples to the network-buffer and a jitter-buffer of 1. This should yield about 3ms latency when testing on localhost. Note: it’s prudent to set the jitter-buffer to 2 during performances for stability.
- The final latency is determined by three parameters: Audio buffer and network buffer on the sending side (basically the size of the packet – in the SJC settings on the left) and the jitter buffer on the receiving side (the amount of packets stored before playback – green or red-flashing box within the user list on each entry).
- The lower the network and jitter buffer, the higher the risk of the audio stream being disturbed by other Internet traffic (cross traffic). As a consequence make sure that other users of your LAN (any device such as notebooks, smartphones etc. behind your router) reduce Internet traffic to a minimum (ideally zero). This effect has a lower impact the more upload bandwidth is available.
- Soundjack requires that you forward UDP port 50050 to your computer (and ensure that TCP port 50050 is not blocked) if you are on a local network (LAN) that uses network address translation (NAT). Almost all local networks do that these days. Soundjack will not be able to connect with anybody outside your network if you skip this step. Here are some options if you don’t know how to do this:
– Search on port forward <the make/model of your router> for instructions
– Have a look at the Video4 tutorial on our Tech Tutorial page for an example (which will likely not correspond exactly to what you see on your router unless you happen to be using the same router that Alex was using when he made the video)
– Ask a friend who is a online-game enthusiast to help you (gamers have to do this a lot)
- Soundjack provides a very helpful tool to check the port-forwarding configuration of your router. The behavior of your router’s NAT (network address translation) is displayed as a three-digit number in brackets behind the UDP-Port2-Info at the “i”-symbol tooltip.
The first number indicates whether the default port is being changed from 50050 to anything else”1″ – NAT preserves the outbound port
“3” – NAT changes the outbound port.The second number indicates port filtering”1″ or “3” – the outbound port can be reached by an external sender
“8” – Soundjack assumes that the sender’s address has previously been used as the destinationThe third number (port mapping) relates to the first number”1″ – port remains the same for additional connections”8″ – port changes for each new connectionThus “111” can be considered a completely open NAT while “388” is the most restrictive type. However, if one peer of a bidirectional connection is “388” and the other is “111” it is possible to establish a link because the “111” will know the outbound port of the “388” NAT and will in turn use it as the destination (via port bending). Thus, connectivity always has to take both peers’ behavior into consideration.
- If “TRYING” or “ONE-WAY” is displayed after the play (connect) button, the connection is failing and you need to review your UDP port forwarding (port 50050) settings. Please follow the instructions in the “NAT-Router Connection / Port Forwarding” video on the TECH TUTORIAL page.
We’ve occasionally encountered routers that don’t forward packets although they claim to. Please report this – we are willing to verify.
Also make sure to either switch off any software firewall or generate an exception rule for it.
- If you have applied your forwarding correctly but still Soundjack fails detecting the open port 50050 it is very likely that your Internet endpoint connection does not provide IPv4. Soundjack will not work for you until we have implemented IPv6 endpoint support within Soundjack (it’s scheduled on TODO).
- It is possible to connect machines on a LAN, however Soundjack will only automatically pick the LAN IP if both peers share the same public IP. If they don’t, enable the VPN call in the parameter settings on the left and Soundjack will use the private IP.
- We support dedicated rehearsing spaces / rooms for specific groups of people. Simply create your own group (see upper menu tab) or join an existing group as part of the social media features. When entering the Stage Soundjack will show the list of availabe groups in the dropdown menu on the right of the group icon. After entering the room, players will only see others in the same room and will disappear from the public stage.
- If you see message “SJ-Server down – nothing will work” make sure that you haven’t blocked TCP port 50050 and that your browser supports websockets (try other browsers). If neither of these clear the error, the server is indeed down.
- If you launched the app and it says “FAILED CREATING WEBSOCKET” you either have another instance of the application running (in which case, shut it down) or your OS does not support websockets. In this case you manually have to enable websocket support within your OS.
Support and communication rules
- If you cannot get Soundjack to work, please contact the main author within this platform (username jazzalex)
If he does not respond please don’t take it personally. Most likely the answer to your question can be found in the Tech Tutorial or this FAQ. Also respect proper language in any case. Users with a disrespectful, reproachful, racist or aggressive attitude will be warned once and banned from the system if that warning is ignored.
- We in the Soundjack community share a rather informal style – we typically salute each other by our forename.
- Long-term Soundjack User and Facebook Group Admin JamTuner often gives support via the Shoutbout, which is much appreciated – main developer Jazzalex does as well assuming time and leisure. Please note that is impossible to answer every question. Please read the FAQ before asking.
- If you report of a bug, a crash, or other forms of disfunction please provide as much information as possible (under which conditions, after which amount of time, after application of which parameters etc.). A single info such as “it crashes” is completely useless. Ideally provide a short screen cast of what is happening on your machine as this is the most effective way to figure to actual problem.
- If we cannot find a solution to a verifiable bug we may ask to access your machine via Teamviewer (http://www.teamviewer.com) or Anydesk (http://www.anydesk.com). This is our last resort. If you are not comfortable with that approach we will have to leave up to you to address the problem.