VOLUMIO Project with 1920 display and PeppyMeter as screensaver (for VOLUMIO v2.8xx and 3.0xx buster)

Hi together.

I would like to share here my experiences with the FullHD AMOLED display from waveshare with VOLUMIO.
The point is, it’s a 1080x1920 display and not a 1920x1080. I have learned, that’s not the same. Per default this display runs in portrait mode an not in landscape. You can rotate it 90 degree, but it’s not a hardware rotation, it’s a hard work for the GPU to rotate all content. A smooth scrolling is not more possible with chromium.
I have found some performance optimizations for chromium to work better with the rotated screen. Also implemented is the css modification of UI to show better in landscape from here:
Contemporary optimizations for small or large landscape displays

The next issue on a PI4 with this display is a interference between hdmi with 1920x1080 and WiFi. I had lost connections and a flicker display.
I didn’t know the context until I found the following:

Pi4 WiFi not working when resolution is set too high

With disabled WiFi - no more flicker on the screen. What’s that??
Ok I can live with that, I have now connect a cable, that’s stable without interferences.

At last I have search a screensaver to prevent the burnin of AMOLED. The standard screensaver give us unfortunately a black screen. I found PeppyMeter a wonderful animation of VU meter, a python program that’s write directly to the framebuffer.
I have modified it to use better with VOLUMIO and a resolution of 1920. With my modification it’s now configurable with many options to use your own background pictures and styles.

This is a step by step guide to install it with some installation scripts for an easy use. But at first some pictures of implemented PeppyMeter in fullHD:

3 Likes

Omg that looks awesome… Due to this o like volumio… This is on my short list, nr1. Until now for my next streamer.
Thanks for sharing and help us with this great ideeas

Ok, let’ start with
step 1: core installation

  • install a fresh VOLUMIO image
  • enable SSH: http://volumio.local/dev
  • username: volumio password: volumio
  • for some configurations it’s better to enable root account, use putty with the volumio account for this and edit sshd_config:
sudo nano /etc/ssh/sshd_config
  • set: PermitRootLogin yes and reboot

  • for a connected HDMI-display you need the touchscreen-plugin, you find it in plugins

  • for Buster you find a version here:
    touch_display_1_2_1Busterbeta

  • copy the folder into /home/volumio and install the plugin with:

cd /home/volumio/touch_display_1_2_1Busterbeta
volumio plugin install
  • if installation succsesfully, set GPU mem to 128MB and for the waveshare AMOLED rotation to 90°
  • for the AMOLED the follow entries in /root/userconfig.txt important
max_framebuffer_height=1920
config_hdmi_boost=8
hdmi_group=2
hdmi_mode=87
hdmi_timings=1080 1 26 4 50 1920 1 8 2 6 0 0 0 60 0 135580000 3
hdmi_drive=1
hdmi_blanking=1

hdmi_blanking is for the AMOLED, it has no backlight, the blank screensaver is only work with hdmi_blanking=1
In addition I hade randomly a problem with the rotation of input device. The screen was rotate but the touch not. The rotation matrix for input device is stored in /etc/X11/xorg.conf.d/95-touch_display-plugin.conf. Waveshare doc say that the name of TransformationMatrix must be ‘CalibrationMatrix’. I don’t know exactly if this is the problem, but after rename I had no more problems with the touch rotation.

The install script do all this steps
Download:
Install_amoled.zip (930 Bytes)

To use the script, copy the Install_amoled folder to /home/volumio and make the install_amoled.sh executable.

chmod +x /home/volumio/Install_amoled/install_amoled.sh

and start it with:

/home/volumio/Install_amoled/install_amoled.sh

After reboot you see the standard VolumioUI on the hdmi display. :yum:

Just awesome! Very very nice!

Step 2: UI optimizations

The install_amoled.sh do also the follow modification:
5,5" with a 1920 resolution… the content it very small and unusable with volumio per default. You need a scale factor and a changed css file for better readable UI with a better smooth scrolling in chromium. The install_amoled.sh add some chromium options to the file /opt/volumiokiosk.sh

    --disable-smooth-scrolling \
    --disable-gpu-compositing \
    --enable-experimental-canvas-features \
    --enable-scroll-prediction \
    --disable-quic \
    --max-tiles-for-interest-area=512 \
    --num-raster-threads=4 \
    --enable-low-res-tiling \
    --enable-native-gpu-memory-buffers \
    --enable-gpu-rasterization \
    --enable-zero-copy \
    --use-gl=egl \
    --force-device-scale-factor=2.0 \
    --disk-cache-dir='/tmp/chromium' \
  • in addition the chromium cache folder is changed to ramdisk (better for SD-Card)
  • for AMOLED the scale-factor is here set to 2.0.
    Edit: With latest Volumio version 2.882 a new TouchScreen plugin is available with the possibility to set this value with an UI option, but unfortunetally 200% is maximum. It is the minimum for the AMOLED display but it works.

The customiziations thread for a better view on a landscape display you find here:

Contemporary optimizations for small or large landscape displays
Download:
Install_appearance.zip

Copy the Install_appearance folder to /home/volumio and make the script executable

After this installation select the contemporary mod 2 in settings to use the optimized Contemporary UI.
After selection of this mod scroll down again and you find all settings for this mod.
Some little changes are included for the rotated AMOLED display to increase the performance with a fullHD resolution. Important is this option:

It disabled the blur filter on the header of an album selection. This filter needs many time on 1920 resolution.

With this changes you have a usable 5,5" AMOLED display. If this enough for you you can brake out here.
:yum:

Step3: install peppyalsa

What peppy alsa is exactly doing you find here:
https://github.com/project-owner/peppyalsa.doc/wiki

The Volumio version 2.882 have a little bug. The installation of build essentials run into an error. The build essentials are needed to compile the source.
A workaround for this problem with a little script to install the dependencies find here:
Cannot install build-essential package

You don’t run manually all the steps, I have attached an installation script, that’s all follow steps do for you. The peppylsa integration on a Volumio v2.xxx is a little bit different to the new alsa pipline of Volumio buster v3.xxx
Both scripts are attached.

what’s the script doing:

cd /home/volumio

git clone https://github.com/project-owner/peppyalsa.git
pushd peppyalsa
sudo apt-get -y install build-essential autoconf automake libtool libasound2-dev libfftw3-dev
aclocal && libtoolize
autoconf && automake --add-missing
./configure && make
sudo make install
popd

This create a directory peppyalsa in /home/volumio and compile the source and install it. The same procedure also in Volumio buster.

For configuration a sample asound.conf is placed in
/home/volumio/peppyalsa/alsa-config.
Now it’s important to set the correct port for your installed soundcard.
List yor installed card with:

aplay -l 
  • for me is card 2 with slave.pcm “hw:2.0”
  • in addition it’s important to set the audio name pipe for PeppyMeter. I have set this to ramdisk “/tmp/myfifo”

this is my asound.conf:

pcm.!default {
        type plug
        slave.pcm "softvol_and_peppyalsa"
}

ctl.!default {
        type hw
        card 2
}

pcm.peppyalsa {
        type meter
        slave.pcm "hw:2,0"
        scopes.0 peppyalsa
}

pcm.softvol_and_peppyalsa {
        type softvol
        slave.pcm "peppyalsa"
        control {
                name "PCM"
                card 2
        }
}

pcm_scope.peppyalsa {
        type peppyalsa
        decay_ms 400
        meter "/tmp/myfifo"
        meter_max 100
        meter_show 0
        spectrum "/tmp/myfifosa"
        spectrum_max 100
        spectrum_size 60
}

pcm_scope_type.peppyalsa {
        lib /usr/local/lib/libpeppyalsa.so
}

pcm.dsp0 peppyalsa

The place for asound.conf is /etc
Buster works with a separat file thats included in an existing asound.conf

Now the MPD must configure to use peppyalsa as output device. VOLUMIO is use a template file, thats copy if you change your sound card.

/volumio/app/plugins/music_service/mpd/mpd.conf.tmpl

change the name and device to pepyalsa:

audio_output {
		type		"alsa"
#		name		"alsa"
#		device		"${device}"
		name		"peppyalsa"
		device		"peppyalsa"
		dop			"${dop}"
		${mixer}
		${format}
		${special_settings}

}

The changing of mpd is only needed for the version 2.xxx not more for buster.

Now change the sound card in VOLUMIO settings to HDMI and switch back to your sound card. With this operation the template file is copy to /etc
After reboot please check if the mpd.conf in /etc have the peppyalsa as output device.

The MPD user needs rights to write the name pipe /tmp/myfifo (only for buster), therefore it’s better to create the name pipe at startup with the correct rights.

Add this line to /opt/volumiokiosk.sh before the line starts with openbox-session

mkfifo -m 646 /tmp/myfifo

The install script do this also.

In addition for the buster version is a kernel driver ‘snd-dymmy’ for a dummy device needed. The sript add this entry to /etc/modules-load.d/modules.conf

Download:
for VOLUMIO v2.xxx:
Install_peppy.zip (1.1 KB)

for VOLUMIO Buster v3.xxx:
Install_peppy.zip (1.2 KB)

To use the install script copy the Install_peppy folder to /home/volumio and make the install_peppyalsa.sh executable

chmod +x /home/volumio/Install_peppy/install_peppyalsa.sh

and start it with

/home/volumio/Install_peppy/install_peppyalsa.sh

Please reboot after the installation and play a song and check in /tmp/ if both name pipes created. myfifo (created on startup) and myfifosa with a running peppyalsa (don’t forget to press refresh directory on winscp)

image

Both name pipes exist? Then all is successfully for the next step.

Step 4: install PeppyMeter

the complete documentation of PeppyMeter you can find here:
https://github.com/project-owner/PeppyMeter.doc/wiki

The next script install PeppyMeter and the modifications to use the meters as screensaver.

The first thing to do is to copy PeppyMeter as git clone and the modifications with startscript to /home/volumio/PeppyMeter

cd /home/volumio
git clone https://github.com/project-owner/PeppyMeter.git
pushd Install_peppy
cp -R -f PeppyMeterChanges/* /home/volumio/PeppyMeter/
sudo chmod +x /home/volumio/PeppyMeter/run_peppymeter.sh
popd

at next, python3 with pygame will be installed:

sudo apt-get install python3-pip
sudo apt-get install python3-pygame

To check if the installed pygame addin correct work start python with:

python3

and run the command:

import pygame

If no error showing up all is ok. Exit from python with

quit()

Download:
install_PeppyMeter.zip (5.1 MB)

To use the script, copy the content of this zip file to your Install_peppy folder in /home/volumio. Then you have only one folder for peppyalsa and peppymeter installation.
Make the install_PeppyMeter.sh executeble with:

chmod +x /home/volumio/Install_peppy/install_PeppyMeter.sh

and start it with:

/home/volumio/Install_peppy/install_PeppyMeter.sh

Only for 1280x800:
In addition I have create some meters for a resolution of 1280x800 instead 1920x1080:

Download:
custom_1280.zip (3.8 MB)

to use, copy the custom_1280 folder after the regular installation to /home/volumio/PeppyMeter, the same place as the other custom folder.
Select this folder then in config.txt instead the custom folder.

[current]
meter = random
random.meter.interval = 120
screen.size = custom_1280
output.display = True

Step 5: peppy meter modifications

What’s modified:

  • add an option in config.txt to set the framebuffer dimension, it’s needed to draw an fullscreen background (for me is set to 1920x1080)
  • add a custom folder to place additional meters and backgrounds, I have placed here my fullHD backgrounds with the meters.txt
  • add a new layer for backgrounds with your custom screen resolution
  • if you use a smaller peppy meter as your screen resolution you can set the position of meters
  • add a new daemon to read the active albumart and play info to draw it, the position and size is configurable per meter with new parameters in meters.txt
  • add a new parameter to exclude a meter from random mode
  • to start the screensaver I use a crontab with defined Volumio screensaver timeout (I have no found another way to start a script depend on xset screensaver without installation of an external program)
  • to interrupt the screensaver the touch event from display is used or stop playing from smartphone
  • add an option to use different fonts as standard
  • for use a display without touch, it’s possible to disable the input device in config.txt (mouse.nomouse = 1)
  • as sample I have redesigned some meters to fullHD (it’s now a hard work for the CPU)
  • all new settings are optional, that’s important that all standard meters correct working

In config.txt the frambuffer is set to 1920x1080 and the custom folder is filled with 1920x1080 meters. Do you want to use smaller resolution set the framebuffer to your resolution and test with the large or medium other folder.
example:

screen.size = custom
frame.buffer.width = 1920
frame.buffer.height = 1080

For the HDMI AMOLED display I have set also the follow settings:

[sdl.env]
framebuffer.device = /dev/fb0
mouse.device = /dev/input/event0
mouse.driver = TSLIB
video.driver = dummy
video.display = :0

Now it’s time for a first test, start it with:

cd /home/volumio/PeppyMeter
python3 peppymeter.py

:grinning:

Step 6: install autostart and UI integration

Many hours I have search a solution to start a program as screensaver without install an external additional screensaver program. The only one idea that I had, was create a crontab with timeout value from VOLUMIO. But the crontab time resolution is only per minute (the task is always triggered on full minute), not per second. Have you set 120 sec in VOLUMIO the task starts between 1…2 minute. I think thats ok, not optimal but ok.
The crontab entry is created, when you press play and removed when you press pause. I start a little bash script, that only start python if it not already running, to avoid multiple python tasks. To be on the safe side, i erase the crontab at volumio start.
The crontab is already installed with the Install_peppymeter script

sudo apt-get install cron

Also the autostart entry to clear the crontab list is already created in /etc/rc.local:

crontab -u volumio -r

The last install script expand the touchscreen plugin with some GUI entries to select a meter, and add the lines for creation/delete of crontab entries, when you start play or pause

Download:
Change_touchscreen.zip (5.6 KB)

To use the install script copy the Change_touchscreen folder to /home/volumio and make the change_TouchScreen.sh executable with:

chmod +x /home/volumio/Change_touchscreen/change_TouchScreen.sh

and start with:

/home/volumio/Change_touchscreen/change_TouchScreen.sh

I think you need a restart now.

  • set the VOLUMIO Screensaver (touchscreen plugin settings) to 60 or 120 seconds and
    !!! Important !!!
    set option for ‘No screensaver while playing’

  • check now if cron entry correct created when you press play and removed when you press pause with

crontab -l

If all is ok, press play and wait… :wink:

Step 7: VOLUMIO interaction

I have search a possibiltity to read play infos with python, to show the albumart and info at screensaver I had the idea to write a text file, if the play status is changed.
To do this the file /volumio/app/statemachine.js is expanded with the follow lines on line 762 before start the else statement:
} else if (stateService.status === ‘stop’) {

    // changed write file ------
    var splitted = trackBlock.albumart.split('&'),
		splitted_path = decodeURIComponent(splitted[2]),
		substr = (splitted_path.indexOf('/mnt/') == -1 ? 5 : 9),
		playinfo_str = '[playinfo]' +
                       '\nTitle = ' + JSON.stringify(trackBlock.name) +
                       '\nAlbum = ' + JSON.stringify(trackBlock.album) +
                       '\nArtist = ' + JSON.stringify(trackBlock.artist) +
                       '\nAlbumart = /data/albumart/folder/mnt' + splitted_path.substring(substr) + '/extralarge.jpeg';

    this.logger.verbose('STATE SERVICE --------------------------write playinfo file------------------------------------');
    this.logger.verbose(playinfo_str);
    fs.writeFile('/tmp/playinfo', playinfo_str, 'utf8', function (err) {
      if (err) {
          this.logger.info('Could not write play_info: ' + err);
        }
      });
    this.logger.verbose('STATE SERVICE --------------------------write playinfo file------------------------------------');
    // -------------------------

  } else if (stateService.status === 'stop') {
.
.
.

The statemachine.js is always expanded with the install_PeppyMeter.sh script.
Check if the file is being written with:

journalctl -f

You find this file here /tmp/playinfo
If this file exist the new peppymeter deamon read every second and if it changed the albumart is showing up, depend on the position that is defined in meters.txt (example in custom folder)

Congratulations, it’s done :yum:

All the install scripts make a backup of all expanded original files into the install folders. :wink:

Edit
At last I have compare both installations, Jessie and Buster, and find out, the performance on a rotate fullHD display with Buster Beta is much better as on a Jessie environment. The scrolling with Chromium is smoother and PeppyMeter runs excellent. I don’t know exactly why, but I think the graphic driver is much better now.

have fun :yum:

1 Like

Hi!
You have done a great job! And a very detailed how-to.
But you have to warn other users that:
It won’t work with all sources (not with Spotify and Spotify connect).
It will prevent Volumio to update.
I suggest you to work with Volumio buster and use the new alsa pipeline.
I have a working plugin that install peppyalsa and peppymeter to work with it.
It also provides a selector for meters in the plugin settings.

It will be great to integrate this with peppymeter plugin from balbuze. To be compatible with new volumio version 3. For sure a lot of users will use this. At least me for sure I will :slight_smile:

Hi balbuze,
I didn’t want to bring the installation to the fore so much. An add-in is always better. But it is certainly no longer worthwhile for the current Volumio version.
Rather, I wanted to show the changes to PeppyMeter to have a flexible ScreenSaver when using high display resolutions. And I wanted to show the possibility of interacting with Volumio. Since all new functions are optional parameters, normal use is also possible with this change. The ideas could also be used for your add-in.
I didn’t want to create a new, similar add-in.
:wink:

Good job 2aCD,

it shows just what can be achieved. I can see that people would want to install this plugin regardless of it preventing Volumio updates … btw, this Volumio policy is to ensure that people can enjoy the core Volumio experience seamlessly. Going forward, it seems obvious to me that you should embrace the ALSA changes in the current Volumio change from 2 to 3, as I would expect that the vast majority of Volumio users to make the upgrade.

Again, well done, and I’ll follow your plugin with interest. :grinning:

Here’s the one that I created (with 2aCD help). Switched to Pi4 for now.

https://youtu.be/2i4exMGZ4-4

2 Likes

Hello, may i ask if is possible to make little bit quicker response of needle as you have ? For me it looks little bit lazy, maybe some modification is needed, or parameter set. I am on Raspi 4 Many thanks
Ed

Yes it’s possible.
at first set in asound.conf

decay_ms 400

and then in config.txt in data_source section

smooth.buffer.size = 8

or lower, then the meters are quicker

1 Like

2aCD many thanks, works perfectly !


ready for housing

I’m glad to hear that’s work.
Now I’m ready with an update package with some improvements. First of all, I would like to thank Andy_Yong for the persistence in testing the non standard configuration.
What’s new with this update:

  • new config parameter in sdl.env section to use standard displays without touch and without mouse
mouse.nomouse = 1
  • interrupt the peppy meter screen also with press the pause button on your smartphone app
  • playinfo and albumart now also working with special characters in title or album
  • new config parameter to use other fonts for Chinese or Thai
font.path = /usr/share/fonts/truetype
font.light = /Lato/Lato-Light.ttf
font.regular = /Lato/Lato-Regular.ttf
font.bold = /Lato/Lato-Bold.ttf
# for Thai ---
#font.light = /tlwg/Laksaman.ttf
#font.regular = /tlwg/Laksaman.ttf
#font.bold = /tlwg/Laksaman-Bold.ttf
# for Chinese ---
#font.light = /arphic/ukai.ttc
#font.regular = /arphic/ukai.ttc
#font.bold = /arphic/ukai.ttc
  • remove the remarks witch font are active
    this are installed with volumio, no additional fonts needed
  • optimized timing to change the albumart while the meters running

This update is already included in all downloads.

Thanks again to 2aCD for helping us to create this. Here are some of his work on my system.