• 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
37
Likes
30
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: 19
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'
 
Like this?
 
Like this?
Do I like this?
Hmm, not so much.

Or is it like the streamer i am building?

You could say that my YASB is the same type of device as the motivo.
But then there are some grave differences.

Firstly the price! The motivo is 1750€!
The YASB has a Pi4, a Pi Zero, and the 7'' Display that will set you back something like 150€
The switches, the psu and the wood maybe another 50€.
The RME Adi-2 does not come cheap, but there other great measuring DACs from topping or smsl.
Or you could go just with HAT DAC.

And here is another important difference - modularity.
Something breaks or you want to upgrade a component - no problem with the YASB.

But there is another aspect to modularity, and that is in the real of software architecture.
Volumio is a monolithic system based on mpd.
In contrast Lyrion is a client server architecture. All the configuration is done on the server once.
You can distribute clients around the house with minimal setups.
This is something you can appreciate when you setup as many systems as I did in the last 10? Years.

Then Lyrion has an API. Why is this important?
I will elaborate on my usecases in some detail later.

Yet the main difference and the reason I build the YASB are the buttons and switches.
I like buttons and switches and dials.
When I am half asleep, I don’t want to navigate to some hidden sleep timer.
I just reach over and press the second button from the right and the music will fade out in 15min.
Another press makes it 30min.
Press the middle button and a random playlist is started (And the dac and amp get switched on)
To me that convenience is important.

Oh and then there is DSP and room correction. And 50 ways to individualize the system and not being locked in a closed system.
So I guess no, the YASB is not like the motivio.

Also it has a more distinctive steampunk look. ;-)
 
The software is coming along.

I did some refactoring. The code is now divided in a gpio processor that waits in the background for activity on the gpio pins and the lms command interface. The lmscommander has a cmd line interface that allows for additional usecases.
One of this usecases is the integration with the lf terminal filemanager.

IMG_0296.jpeg


I like to listen to audio dramas, radio plays, and podcasts to help me fall asleep. Hence the importance of the sleep button and the auto switch off function. Yet I newer found a player that displayed the content description of the radio plays.
Now I can use lf to browse my collection and the track to my player with just to key strokes.

IMG_0297.jpeg
I also use lf now to give me a user interface to beets to organize my music. But this is another story.

So what’s next?
I find myself mostly using the buttons for random play, sleep, play radio, next track, restart supervisor, pause, start, and stop. The rotary encoder is used to select a list of playlists. The green led is switched on while a command is processed. The yellow led is signaling activity on the pi. And the red led start blinking when something went wrong.

So next I want to use the switches to assign additional functions to the buttons.
I would like to do ratings of tracks.
Like I pull up switch1 and then the 5 buttons below the display will assign 1 to 5 stars.
I looked in the ratings plugin of lms and there seems to be a url that I can use.
Also I like to tag and organize local tracks and playlists by just pressing a button.
This will probably be rather complex tasks like macros.
 
Back
Top Bottom