Customization

Some features of IoTSound can be configured by using variables. Depending on how you set them they will apply to all your devices, a specific device or a specific service. Regardless of what you want, they can be set using the balena dashboard:

Variable type Scope Instructions
Fleet-wide variable all devices, all services navigate to dashboard -> your fleet -> Variables -> Select All services
Fleet-wide service variable all devices, specific service navigate to dashboard -> your fleet -> Variables -> Select target service
Device variable specific device, all services navigate to dashboard -> your fleet -> your device -> Device variables -> Select All services
Device service variable specific device, specific service navigate to dashboard -> your fleet -> your device -> Select All services -> Select target service

Setting the device name

You can read more about variables here.

General

The following variables apply to IoTSound in general, modifying its behavior across the board:

Variable Description Options Default
SOUND_MODE Select which mode of operation a device should use. For a detailed explanation see here. MULTI_ROOM, MULTI_ROOM_CLIENT, STANDALONE MULTI_ROOM, except for cases listed here.
SOUND_VOLUME Output volume level at startup. 0 - 100, integer value without the % symbol. 75
SOUND_DEVICE_NAME / BLUETOOTH_DEVICE_NAME Device name to be advertised by plugins (AirPlay device list, Spotify Connect and UPnP). For bluetooth use BLUETOOTH_DEVICE_NAME Any valid string. balenaSound <plugin> <xxxx>, where:
</br>- <plugin> is Spotify, AirPlay, UPnP
</br>- <xxxx> the first 4 chars of the device UUID.
AUDIO_OUTPUT Select the default audio output interface. See audio block. For all device types:
</br>- AUTO: Automatic detection. Priority is USB > DAC > HEADPHONES > HDMI
</br>- DAC: Force default output to be an attached GPIO based DAC
</br>
</br> For Raspberry Pi devices:
</br>- RPI_AUTO: Official BCM2835 automatic audio switching as described here
</br>- RPI_HEADPHONES: 3.5mm audio jack
</br>- RPI_HDMI0: Main HDMI port
</br>- RPI_HDMI1: Secondary HDMI port (only Raspberry Pi 4)
</br>
</br> For Intel NUC:
</br>- NUCs have automatic output detection and switching. If you plug both the HDMI and the 3.5mm audio jack it will use the latter.
AUTO
SOUND_INPUT_LATENCY Input loopback latency in milliseconds. Useful when experiencing frequent audio stuttering due to underruns. Note that this is only a friendly request, the actual latency might be higher. 1 - 2000. 200
SOUND_OUTPUT_LATENCY Output loopback latency in milliseconds. Note that this is only a friendly request, the actual latency might be higher. 1 - 2000. 200
SOUND_SUPERVISOR_PORT Web port that is used for serving API and UI by sound supervisor. Any valid port number 80

Multi-room

These options only have an effect on multi-room behavior:

Variable Description Options Default
SOUND_MULTIROOM_MASTER Force multi-room to use the specified IP address as the multi-room master device. This can’t be changed unless the variable is removed. An IPv4 formatted IP address. Example: 192.168.1.10 —
SOUND_MULTIROOM_LATENCY Set multi-room client latency. Usually used to compensate for latency that speaker hardware might introduce (some Hi-Fi systems add a noticeable latency). Time in milliseconds. Example: 300 —
SOUND_MULTIROOM_POLL_INTERVAL Set how often multi-room devices sync up across the fleet. Time in seconds. Example: 120 60
SOUND_MULTIROOM_DISALLOW_UPDATES Prevent a device to update it’s multi-room master based on fleet activity. Boolean. true / false false

Plugins

The following variables control various aspects of each plugin behavior:

Variable Description Options Defaults
SOUNDDISABLE< PLUGIN > where <PLUGIN> is the plugin name. See description. Disable the selected plugin. Useful when you don’t want to use a particular plugin. There is one variable per plugin:
</br>- SOUND_DISABLE_SPOTIFY
</br>- SOUND_DISABLE_AIRPLAY
</br>- SOUND_DISABLE_BLUETOOTH
Plugin will be disabled if the variable exists regardless of its value. —
SOUND_ENABLE_SOUNDCARD_INPUT If your soundcard has inputs you can enable soundcard input by setting this variable. Sound coming in through the audio card will be treated as a new plugin/audio source.
</br>
</br>This feature is still experimental!
Plugin will be enabled if the variable exists regardless of its value. —
SOUND_SPOTIFY_USERNAME Your Spotify login username. Note: most Spotify clients on phones will authenticate via zeroconf so this is not usually required. — —
SOUND_SPOTIFY_PASSWORD Your Spotify login password. Note: most Spotify clients on phones will authenticate via zeroconf so this is not usually required. — —
SOUND_SPOTIFY_DISABLE_NORMALISATION Disable volume normalization in Spotify. Disabled if the variable exists regardless of its value. —
SOUND_SPOTIFY_ENABLE_CACHE Enable the audio cache in Spotify. Note that over time the cache can take up large amounts of disk space. Enabled if the variable exists regardless of its value. —
SOUND_SPOTIFY_BITRATE Spotify playback bitrate. Bitrate in kbps: 96, 160 or 320 160