Hi,
Since this open community helped me a lot from a while now, I owe you back at least what I've done .
So we talk here about a rackable multiroom system of 6 zone based on a RPI PI 3 .
the architecture is :
RPI -> USB hub -> 6x DAC PCM2704 -> 6x TDA7498 2x100w amplifier
Squeezelite instance can pilot GPIO on play/pause/stop state, then a DIY PCB board enable or disable the standby input of the amplifier (this avoid having bad "pop" sound and damage speakers) this board also cut the 24v power supply when there is no zone in use zone.

Main Hardware list :
Software side :
On a running PI ( for me Raspbian GNU/Linux 10 (buster)) ,
First install Squeezelite : for example this tutorial
To avoid zone mismatch, you have to "fix" or map your USB to have always the same DAC output, you can achieve this mapping based on this tutorial
For me it looks like this :
/etc/udev/rules.d/70-alsa-permanent.rules
To add an equalizer to each zone,you have to install Alsa equaliser plugin, you can follow this tutorial
We then create an Alsa file like this :
/etc/asound.conf
You have now your sound output with 10 bands equalizer :

Next step is to create a way to launch 6 instances of Squeezelite at boot :
this is achieved by a service than run as bash file
You can follow this tutorial to create your service
my mutiroom.service file
This service will run this bash script :
You can control GPIO, and define several option at squeezelite instance launch, I let you take a look at all these option HERE
And that's it...
At each boot, the script will run your definited numbers of Squeezelite instance as deamon
You have then a complete mutiroom system with equalizer at low cost


Hope it help, good luck .
Since this open community helped me a lot from a while now, I owe you back at least what I've done .
So we talk here about a rackable multiroom system of 6 zone based on a RPI PI 3 .
the architecture is :
RPI -> USB hub -> 6x DAC PCM2704 -> 6x TDA7498 2x100w amplifier
Squeezelite instance can pilot GPIO on play/pause/stop state, then a DIY PCB board enable or disable the standby input of the amplifier (this avoid having bad "pop" sound and damage speakers) this board also cut the 24v power supply when there is no zone in use zone.
Main Hardware list :
- 1 used rackable 2U enclosure
- 24v power
- 5v power
- 1x RPI PI3
- 6x USB DAC PCM2704
- 6x TDA7498 2x100w amplifier
- Speakers terminal
Software side :
On a running PI ( for me Raspbian GNU/Linux 10 (buster)) ,
First install Squeezelite : for example this tutorial
To avoid zone mismatch, you have to "fix" or map your USB to have always the same DAC output, you can achieve this mapping based on this tutorial
For me it looks like this :
/etc/udev/rules.d/70-alsa-permanent.rules
Code:
SUBSYSTEM!="sound", GOTO="my_usb_audio_end" ACTION!="add", GOTO="my_usb_audio_end" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4.4/1-1.3.4.4:1.0/sound/card?", ATTR{id}="USB1" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4.2/1-1.3.4.2:1.0/sound/card?", ATTR{id}="USB2" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0/sound/card?", ATTR{id}="USB3" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4.3/1-1.3.4.3:1.0/sound/card?", ATTR{id}="USB4" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0/sound/card?", ATTR{id}="USB5" DEVPATH=="/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.1/1-1.3.1:1.0/sound/card?", ATTR{id}="USB6" LABEL="my_usb_audio_end"
We then create an Alsa file like this :
/etc/asound.conf
Code:
#USB1 ctl.USB1 { type equal; controls "/opt/alsa/USB1.bin"; } pcm.USB1 { type equal; slave.pcm "plughw:USB1"; controls "/opt/alsa/USB1.bin"; } #USB2 ctl.USB2 { type equal; controls "/opt/alsa/USB2.bin"; } pcm.USB2 { type equal; slave.pcm "plughw:USB2"; controls "/opt/alsa/USB2.bin"; } #USB3 ctl.USB3 { type equal; controls "/opt/alsa/USB3.bin"; } pcm.USB3 { type equal; slave.pcm "plughw:USB3"; controls "/opt/alsa/USB3.bin"; } #USB4 ctl.USB4 { type equal; controls "/opt/alsa/USB4.bin"; } pcm.USB4 { type equal; slave.pcm "plughw:USB4"; controls "/opt/alsa/USB4.bin"; } #USB5 ctl.USB5 { type equal; controls "/opt/alsa/USB5.bin"; } pcm.USB5 { type equal; slave.pcm "plughw:USB5"; controls "/opt/alsa/USB5.bin"; } #USB6 ctl.USB6 { type equal; controls "/opt/alsa/USB6.bin"; } pcm.USB6 { type equal; slave.pcm "plughw:USB6"; controls "/opt/alsa/USB6.bin"; }
Next step is to create a way to launch 6 instances of Squeezelite at boot :
this is achieved by a service than run as bash file
You can follow this tutorial to create your service
my mutiroom.service file
Code:
Description=Multisqueeze launch ConditionPathExists=/home/user/bin/opt/multiroom [Service] Restart=always RestartSec=3 ExecStart=/home/opt/multiroom/multisqueeze [Install] WantedBy=multi-user.target
Code:
#! /bin/sh # Run mutliple squeezelite instance as deamon sudo squeezelite -z -n Cuisine -m 00:00:00:00:00:01 -o plug:USB1 -r 32000,44100,48000 -C 5 -G 4:H -f ~/squeezelite_cui.log sudo squeezelite -z -n Sam -m 00:00:00:00:00:02 -o plug:USB2 -r 32000,44100,48000 -C 5 -G 17:H -f ~/squeezelite_sam.log sudo squeezelite -z -n Sdb -m 00:00:00:00:00:03 -o plug:USB3 -r 32000,44100,48000 -C 5 -G 27:H -f ~/squeezelite_sdb.log sudo squeezelite -z -n Chambre_parents -m 00:00:00:00:00:04 -o plug:USB4 -r 32000,44100,48000 -C 5 -G 22:H -f ~/squeezelite_ch_par.log sudo squeezelite -z -n Exterieur -m 00:00:00:00:00:05 -r 32000,44100,48000 -o plug:USB5 -C 5 -G 19:H -f ~/squeezelite_ext.log sudo squeezelite -z -n Free -m 00:00:00:00:00:06 -r 32000,44100,48000 -o plug:USB6 -C 5 -G 26:H -f ~/squeezelite_res.log
And that's it...
At each boot, the script will run your definited numbers of Squeezelite instance as deamon
You have then a complete mutiroom system with equalizer at low cost

Hope it help, good luck .
Comment