From aaf49b6292cf5b82304a71dd2f6df1059446e939 Mon Sep 17 00:00:00 2001 From: Tropicananass Date: Fri, 7 Aug 2020 00:26:40 +0200 Subject: [PATCH] meh --- RpiLedBars/main.py | 65 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/RpiLedBars/main.py b/RpiLedBars/main.py index 7f18af6..964883e 100644 --- a/RpiLedBars/main.py +++ b/RpiLedBars/main.py @@ -1,16 +1,73 @@ #! /usr/bin/env python3 + +import alsaaudio +import audioop import board +import math import neopixel import time +def wheel(pos): + # Input a value 0 to 255 to get a color value. + # The colours are a transition r - g - b - back to r. + if pos < 0 or pos > 255: + r = g = b = 0 + elif pos < 85: + r = int(pos * 3) + g = int(255 - pos * 3) + b = 0 + elif pos < 170: + pos -= 85 + r = int(255 - pos * 3) + g = 0 + b = int(pos * 3) + else: + pos -= 170 + r = 0 + g = int(pos * 3) + b = int(255 - pos * 3) + return (r, g, b) -def main(): - pixels = neopixel.NeoPixel(board.D21, 30, brightness=0.2, auto_write=False) +def exec_neopixel(pixels, max): + for i in range(0, max): + pixels[i] = wheel(i * 255 / 300) + # pixels.show() + for i in range(max, 300): + pixels[i] = (0, 0, 0) + pixels.show() + +def exec_audio(): + lo = 1E6 + hi = 5E8 + + log_lo = math.log(lo) + log_hi = math.log(hi) + + print(alsaaudio.pcms(alsaaudio.PCM_CAPTURE)) + pixels = neopixel.NeoPixel(board.D12, 300, brightness=0.1, auto_write=False) + pixels[0] = (100, 0, 0) + audioIn = alsaaudio.PCM(type=alsaaudio.PCM_CAPTURE, mode=alsaaudio.PCM_NORMAL, rate=48000, channels=1, format=alsaaudio.PCM_FORMAT_S32_LE, periodsize=640, device='plughw:CARD=sndrpii2scard,DEV=0') + while True: + length, data = audioIn.read() + if length > 0: + max_amp = max(audioop.max(data, 4), 1) + log_max = math.log(float(max_amp)) + vu = (log_max - log_lo) / (log_hi - log_lo) + led_nb = min(max(int(vu*300),0),299) + print("max =", max_amp, ", log =", log_max, "vu = ", vu, "led =", led_nb) + exec_neopixel(pixels, led_nb) + +def test_neopixel(): + pixels = neopixel.NeoPixel(board.D12, 300, brightness=0.1, auto_write=False) for i in range(0, 300): + print("Lighting", i) pixels[i] = (100, 0, 0) pixels.show() - time.sleep(2) - print("ok\n") + input() + +def main(): + # test_neopixel() + exec_audio() if __name__ == "__main__":