From 7a4f8aa4af83edefc9698197b6a17ab90ebf8193 Mon Sep 17 00:00:00 2001 From: raspbeguy Date: Wed, 15 Mar 2017 22:40:25 +0100 Subject: [PATCH] MPD: vu-meter --- mpd_dot3k.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/mpd_dot3k.py b/mpd_dot3k.py index 61d2266..c242f55 100644 --- a/mpd_dot3k.py +++ b/mpd_dot3k.py @@ -8,6 +8,8 @@ import queue import threading import signal import sys +import os +import audioop import dot3k.lcd as lcd import dot3k.backlight as backlight import dot3k.joystick as nav @@ -51,6 +53,21 @@ char_stop = [ q = queue.Queue() +def vumeter(): + fifo = os.open('/tmp/mpd.fifo', os.O_RDONLY) + while run_event.is_set(): + try: + rawStream = os.read(fifo, 4096) + except OSError as err: + if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK: + rawStream = None + else: + raise + if rawStream: + backlight.set_graph(audioop.rms(rawStream,2)/32768) + backlight.set_graph(0) + + def stringrotate(text, width, step): if len(text) > width: fulltext = text + " - " @@ -71,10 +88,13 @@ def display(): status = arg['status']['state'] if status == "play": + backlight.rgb(0, 0, 255) # green lcd.create_char(0, char_play) elif status == "pause": + backlight.rgb(0, 255, 0) # blue lcd.create_char(0, char_pause) else: + backlight.rgb(255, 0, 0) lcd.create_char(0, char_stop) if status not in {'play','pause'} or song_file != arg['song']['file']: @@ -160,19 +180,22 @@ def button_right(pin): def on_exit(sig, func=None): run_event.clear() t_display.join() + t_vumeter.join() backlight.rgb(0, 0, 0) backlight.rgb(0, 0, 0) print("Screen sound be blank and light off now.") sys.exit(0) -backlight.rgb(55, 55, 55) +lcd.set_contrast(50) run_event = threading.Event() run_event.set() client = MPDClient() client.connect("localhost", 6600) t_display = threading.Thread(name='display',target=display) +t_vumeter = threading.Thread(name='vumeter',target=vumeter) t_display.start() +t_vumeter.start() signal.signal(signal.SIGTERM, on_exit) try: