• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Yet Another Streamer Build

RawDlite

Member
Joined
Dec 9, 2024
Messages
35
Likes
29
After having tested various options and setups, I finally have a fairly good idea of what I want. I aspire to now bring everything into one streamer build. This will test my abilities in woodworking, metal crafting, soldering and programming.

Style:
I envision an encasing in the style of a vintage hifi receiver using wood and sheet metal.

Silent Operation
A fanless Raspberry Pi 4 will be used

Autonomous Operations.
The streamer should be operational without the need for additional devices.

Touchscreen.
The official 7'' display shall be used to be able to switch off the display via software.

Buttons
Lots of those. I like physical buttons to interact with.

Rotary Encoder
A rotary encoder and a oled display for further interaction.

IR Blaster
Send IR signals to operate the dac (rme adi-2)

LEDs
LEDs to indicate status

Autoplay
When a play command is send to the player, amps and dac shall be switched on.
After a timeout they shall be switched of.

Modular Design
Wherever possible hardware and software should be modular to adapt to future changes.

External Dac
An external Dac is preferred over an integrated system.

Digital Transport
A digital transport hat like the allo digione or Hifiberry digi+ pro is the preferred connection to the dac.

Reliability
Operating system will reside completely in RAM. Read only file system.

Client-Server Architecture
Multiple player with minimal setup. Multiroom syncing.

Extra Features
Randomplay, Sleeptimer, Rating, dynamic playlists ….

Qobuz
High res streaming.

AirPlay
Shairport-sync integration

Local audio files
Local audio collection organized by beets.

DRC
Digital room correction camilladsp and/or Hifiberry dsp


to be continued..-
 
This is my first sketch for the case.
IMG_0238.jpeg
 
IMG_0240.jpeg


So far I have specified 8 push buttons, 2 toggle switches, 2 status led, 1 IR sender led, 1 oled display, 1 rotary encoder, and a rfid sensor which I am still contemplating.
With the rfid sensor I have build a fun interface. But in reality it’s not used as often as I anticipated.
Giving up the rfid interface would free up 6 gpio.

I could envision adding an IR receiver and a row of toggle switches on the back maybe in combination with more status leds on the front.
Also a second oled display could be an option if I find a way to position it without cluttering the front.
 
Here is a second iteration of the case.
IMG_0245.jpeg

Changes:
I created a room for the dac to fit under the case.
There is a third switch and only 1 button on the front panel.
Not only does this give a visually more pleasing distribution of elements, I plan to use 2 switches for encoding modes or usecases that assign different function to (some) of the buttons.
I am thinking 4 banks of assignable functions for the 5 buttons under the display.
Think of a nightmode where the buttons do sleep timer, loudness, ambient noise etc.
While in critical listening mode the same buttons will do different filters etc.
Finally there are additional buttons on the top for macro tasks like stop (all) player and switch power off on amp and dac.
Or start amps and dac and start my favorite radio station. Or do something with the lights.
We will see.
 
Took some time out.
Started the woodworking with these two angry Bunnies. :)

PXL_20250218_111321557.RAW-02.ORIGINAL_Original.jpeg


Added some coating
PXL_20250218_121230263.RAW-02.ORIGINAL_Original.jpeg

And put it together.
PXL_20250218_124141898.RAW-01.COVER_Original.jpeg

Next step is electronics.

PXL_20250218_124922408.RAW-02.ORIGINAL_Original.jpeg
 

Attachments

  • PXL_20250223_083108942.RAW-01.MP.COVER_Original.jpeg
    PXL_20250223_083108942.RAW-01.MP.COVER_Original.jpeg
    247.7 KB · Views: 16
Very commendable, but not good. The ADI-2 DAC gets quite warm during operation and requires adequate ventilation.
 
After an hour of operation I measured the ADI-2 at 28°C sitting on a tabletop measuring 23,4°C. So I am not really concerned about thermal issues, yet I will drill some holes in the baseplate once the arrangement of components is fixed.
MIDI protocol sounds intriguing. The IR protocol has been working very reliable but the emitter led in front of the dac is quite ugly.
 
Almost steampunk.
I like it! :)
 
Connecting all the wires is taking its time.

PXL_20250407_074423328.RAW-01.COVER_Original.jpeg


Colorcoding is critical to keep it manageable.

IMG_0295.jpeg


Test of the Raspberry 4, Touchscreen, and Hifiberry Hat.

IMG_0244.jpeg
 
Update:
Wiring is (mostly) finished. I wrote a little test script to check the function of each button, switch, led, rotatory encoder, and oled display.
I have run this repeatedly while soldering the connections. It turned out the switches are more easily damaged by excessive heat from soldering as I would have thought. Managed to destroy 2 of them and had to exchange and rewire them.
Using Wago 221 connectors for Ground and 3,3V rails works great and makes the setup flexible.
I also managed to somehow break the touchcontroller of the display. The display works, just no touch input.:mad:

The pi4 now happily runs pcp10. I had to build an extension to get Hifiberry Dsp to run on picorePlayer (dsptoolkit and sigmatcp-server).
The pi zero runs on dietpi and acts as the remote control. There are 2 python libraries to control a LMS Server that I looked into. One is pyqueezebox that runs asynchronous and is intended for integration with Home Assistant, the other is lms that runs threaded. After some testing I settled on lms for now. The asynchronous setup has little benefit for my usecase, yet introduces a lot of complexity when combining with loops for gpio events.
For the gpio I use gpiozero and pigpio. To allow for some modularity and adaptability to other hardware setups I divided the code into 2 scripts that are managed by supervisor.
One Skript defines a Buttonboard and runs commandline skripts in a subprocess. Buttons and commands are configured in a toml file. This makes it easy to adapt to different button setups and to manage and debug the assigned actions.
The other Skript reads the rotary encoder, scrolls through a collection of playlists on the oled display and sends a play request when the knob on the rotary encoder is pressed.

The switches are not operational yet. They are meant to enable an alternative set of actions for the buttons and the rotary encoder.
So I am looking for a way to use the rotary encoder to scroll through the jivelite menu on the 7'' Display.
I am thinking of using /dev/uinput to send keypress events to jivelite.

Another switch position could enable sending midi commands to the ADI-2. I find navigating the menu with the ADI-2 rather challenging.

Yet another switch position could enable sending commands to my home assistant to control lights etc.

These are the base commands i have configured so far:
[button_actions]
ob1 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c pause'
ob2 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c next'
ob3 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c random'
ob4 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c sleep'
ob5 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c play http://opml.radiotime.com/Tune.ashx...Id=16&serial=a44d9baf7190744ec4fa880f24a9fdba'
lb1 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c toggle_shuffle'
lb2 = '/root/src/niche-audio/squeeze/lmscommander -p pcp4berry -c prev'
lb3 = '/root/bin/stop.sh'
lb4 = '/root/bin/start.sh'
 
Back
Top Bottom