led-matrix-player/main.py

103 lines
2.6 KiB
Python
Raw Normal View History

2020-12-19 20:13:22 +00:00
import sys
import spotipy
import spotipy.util as util
2020-12-19 20:34:44 +00:00
import config as cfg
2020-12-19 23:26:20 +00:00
from PIL import Image, ImageDraw
2020-12-19 21:32:34 +00:00
import asyncio
2020-12-19 21:08:07 +00:00
from rgbmatrix import RGBMatrix, RGBMatrixOptions
2020-12-19 21:41:21 +00:00
import threading
2020-12-19 20:13:22 +00:00
import requests
from io import BytesIO
2020-12-19 21:42:40 +00:00
import time
2020-12-19 20:13:22 +00:00
2020-12-19 20:34:44 +00:00
client_id = cfg.client_id
client_secret = cfg.client_secret
redirect_uri = cfg.redirect_uri
username = cfg.username
2020-12-19 20:13:22 +00:00
scope = 'user-read-currently-playing'
2020-12-19 21:08:07 +00:00
options = RGBMatrixOptions()
options.rows = 32
options.cols = 64
options.chain_length = 6
options.parallel = 2
options.hardware_mapping = 'regular'
options.pixel_mapper_config = 'U-mapper'
options.limit_refresh_rate_hz = 240
options.gpio_slowdown = 4
2020-12-19 23:11:54 +00:00
options.brightness = 50
2020-12-19 22:37:17 +00:00
screen = RGBMatrix(options = options)
2020-12-19 21:08:07 +00:00
2020-12-19 23:25:53 +00:00
song_name=""
artist_name=""
2020-12-19 20:13:22 +00:00
2020-12-19 20:34:44 +00:00
token = util.prompt_for_user_token(username, scope, client_id, client_secret, redirect_uri)
2020-12-19 20:13:22 +00:00
2020-12-19 23:08:08 +00:00
2020-12-19 21:39:56 +00:00
def get_track():
2020-12-19 21:44:06 +00:00
print('getting info')
2020-12-19 20:13:22 +00:00
sp = spotipy.Spotify(auth=token)
2020-12-19 20:52:10 +00:00
track = sp.currently_playing()
print(track['is_playing'])
2020-12-19 23:25:53 +00:00
global song_name
song_name = track['item']['name']
global artist_name
artist_name = track['item']['artists'][0]['name']
2020-12-19 20:13:22 +00:00
print(track['item']['name'] + ' - ' + track['item']['artists'][0]['name'])
2020-12-19 22:24:11 +00:00
print('getting image')
2020-12-19 22:25:47 +00:00
image_url = track['item']['album']['images'][0]['url']
response = requests.get(image_url)
2020-12-19 22:26:03 +00:00
image = Image.open(BytesIO(response.content))
2020-12-19 22:38:49 +00:00
print(image_url)
2020-12-19 22:32:57 +00:00
image = image.resize((32,32))
2020-12-19 23:08:08 +00:00
return image
2020-12-19 23:02:58 +00:00
def showImage(image, offset_x = 0, offset_y = 0):
2020-12-19 23:21:58 +00:00
image = image.convert('RGB')
2020-12-19 23:02:58 +00:00
width, height = image.size
for x in range(width):
for y in range(height):
2020-12-19 22:43:44 +00:00
r, g, b = image.getpixel((x, y))
2020-12-19 22:44:21 +00:00
screen.SetPixel(x+offset_x,y+offset_y,r,g,b)
2020-12-19 23:02:58 +00:00
2020-12-19 21:27:06 +00:00
2020-12-19 23:08:08 +00:00
2020-12-19 21:27:06 +00:00
#if token:
# sp = spotipy.Spotify(auth=token)
# track = sp.currently_playing()
# print(track['is_playing'])
# print(track['item']['name'] + ' - ' + track['item']['artists'][0]['name'])
# imageString = requests.get(track['item']['album']['images'][0]['url'])
# image = Image.open(BytesIO(imageString.content))
# image = image.resize((32,32))
# #image.save("thumbnail.jpg","JPEG")
#else:
2020-12-19 23:08:08 +00:00
# print("Can't get token for", username)
2020-12-19 23:19:54 +00:00
#def main():
# x = threading.Thread(target=draw)
# x.start()
2020-12-19 21:39:56 +00:00
2020-12-19 21:36:09 +00:00
2020-12-19 23:19:07 +00:00
def drawCanvas():
2020-12-19 23:16:16 +00:00
canvas = Image.new('RGB', (192, 128), color = 'red')
2020-12-19 23:21:58 +00:00
canvas.paste(get_track(),(0,0))
2020-12-19 23:25:53 +00:00
songinfo = ImageDraw.Draw(canvas)
2020-12-19 23:27:33 +00:00
songinfo.text((32,0), song_name)
songinfo.text((32,10), artist_name)
2020-12-19 23:19:07 +00:00
showImage(canvas)
2020-12-19 23:08:08 +00:00
2020-12-19 21:29:02 +00:00
2020-12-19 22:24:11 +00:00
if __name__ == "__main__":
2020-12-19 23:19:54 +00:00
#main()
2020-12-19 22:24:11 +00:00
print('text')
2020-12-19 23:08:08 +00:00
2020-12-19 22:24:11 +00:00
while True:
2020-12-19 23:19:07 +00:00
drawCanvas()
2020-12-19 23:22:40 +00:00
time.sleep(10)
2020-12-19 21:42:40 +00:00
2020-12-19 21:39:56 +00:00