diff --git a/README.md b/README.md
index b54c6e3..3f2246c 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1,51 @@
# Raspberry Pi CD Player (in python)
-A simple and very lightweight cd player written in python (using vlc) made for raspberry pi (in my case Rpi 3b+, but it uses ~1.5% Cpu) with 1602 lcd and six buttons.
+A simple and very lightweight cd player written in python (using vlc) made for raspberry pi (in my case Rpi 3b+, but it uses ~1.5% Cpu) with 1602 lcd and six buttons. I highly recommend using it inside a venv!
## Why i made it?
Some time ago i made an amplifier using tpa3116 (i will put the shematic someday) to replace my cheap Panasonic. As i was suprised with change of quality event with same speakers i thought that it would also be nice if i made an cd player (i mostly play music from my cd collection). For ~1.5 year i was using either [Volumio](https://volumio.com/en/get-started/) and [Raudio](https://github.com/rern/raudio). Why either? Each one has some problems, so i was changing from time to time. On Volumio cd playback is behind a paywall, nanomesher cd plugin runs cd drive too fast (its very loud). Raudio on the other hand tends to lag and interrupt cd playback. So i thought that maybe i would be able to make one. Yes, without a web interface, but lcd and buttons are even better for me.
-## What is not yet done?
--airplay integration
--maybe spotify connect
--maybe usb playback
--maybe eink instead of lcd
--maybe webui as an alternative to buttons
-...
+## Plan for nearest future
+ - add webui
+ - make display refresh only if something changed
+
## Dependencies
-⚠ I'm sure that this list is not full and not in correct order.
- - Pip
+ - Pip
- - pycdio (❗ I couldn't install it on windows idk why, on linux on rpi it installed flawlessy)
- - setuptools
- - pytest
- - gpep517
- - python-vlc
- - musicbrainzngs
- - discid
- - board
- - adafruit-circuitpython-charlcd
- - digitalio
- - pylast
+ - requirements.txt
- - Apt
+ - Apt
- - libiso9660-dev
+ libiso9660-dev
- libcdio-dev
- - libcdio-utils
+ libcdio-utils
- swig
- cython
- libdiscid0-dev
- - python3-pip (I assume that python is already installed by default)
+ - python3-pip
+ - py3-gpiozero
- vlc
+ - gcc
+ - python3.11-dev
+ - libcairo2-dev
+ - python3.11-venv
+ - libxt-dev
+ - libgirepository1.0-dev
- Useful links
+
+## Alpine linux
+Recently I switched from raspbian to Alpine to reduce boot time. Tools like [this](https://github.com/macmpi/alpine-linux-headless-bootstrap) really make it simpler to setup.
+However I was still struggling with gpio permision problems ( [solution](https://raspberrypi.stackexchange.com/questions/40105/access-gpio-pins-without-root-no-access-to-dev-mem-try-running-as-root) ), and needed to compile lgpio from source ([script](install_scripts/lgpio_compile.sh)), but libiso9660 and libcdio-utils installation wasn't nessesary. Also idk why but I needed to change `vlc.Instance()` to `vlc.Instance('--aout=alsa', '--alsa-audio-device=plughw:0,0')`, because otherways it would play audio to dummy.
+Apart from that, everything works as it should.
diff --git a/boot.py b/boot.py
new file mode 100644
index 0000000..9acd60d
--- /dev/null
+++ b/boot.py
@@ -0,0 +1,521 @@
+# A runatboot file
+import vlc #play music
+import time #control time
+import discid #read discid
+import musicbrainzngs #fetch data
+import sys
+import cdio, pycdio #cdtxt & trackcount
+from multiprocessing import Process, Pipe
+import threading #scheduling
+from math import floor#round down
+import signal
+import board
+from digitalio import DigitalInOut
+from adafruit_character_lcd.character_lcd import Character_LCD_Mono
+import os
+import pylast
+from pydbus import SystemBus
+import timeout_decorator
+import configparser
+from unidecode import unidecode#decoding characters to their english ASCII version
+from gpiozero import Button
+from subprocess import check_call#for shutdown only
+#from fonts.py import *
+
+
+#------------PARSING CONFIG-------------
+config = configparser.ConfigParser()
+dir_path = os.path.dirname(os.path.realpath(__file__))
+config.read(dir_path + '/config.ini')
+is_lastfm = config.getboolean('Last_Fm', 'Enable')
+API_SECRET = config.get('Last_Fm', 'Api_secret')
+os.environ['LAST_FM_API_SECRET'] = API_SECRET
+API_KEY = config.get('Last_Fm', 'Api_key')
+username = config.get('Last_Fm', 'Username')
+password_hash = pylast.md5(config.get('Last_Fm', 'Password'))
+
+lcd_columns = config.getint('Lcd', 'Columns')
+lcd_rows = config.getint('Lcd', 'Rows')
+
+lcd_rs = DigitalInOut(board.D26)
+lcd_en = DigitalInOut(board.D25)
+lcd_d4 = DigitalInOut(board.D10)
+lcd_d5 = DigitalInOut(board.D9)
+lcd_d6 = DigitalInOut(board.D11)
+lcd_d7 = DigitalInOut(board.D0)
+# Initialise the LCD class
+lcd = Character_LCD_Mono(
+ lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
+lcd.clear()
+lcd.cursor = False
+lcd.blink = False
+
+Button_up = Button(config.get('Buttons', 'Up'))
+Button_right = Button(config.get('Buttons', 'Right'),bounce_time=0.05)
+Button_left = Button(config.get('Buttons', 'Left'))
+Button_middle = Button(config.get('Buttons', 'Middle'))
+Button_down = Button(config.get('Buttons', 'Down'))
+
+
+command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
+textb = 15
+page = 0
+MAX_PAGE = 2
+start = 0
+
+playchar = [
+ 0b01000,
+ 0b01100,
+ 0b01110,
+ 0b01111,
+ 0b01110,
+ 0b01100,
+ 0b01000,
+ 0b00000]
+pausechar = [
+ 0b00000,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b00000]
+stopchar = [
+ 0b00000,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b00000,
+ 0b00000]
+lcd.create_char(0, playchar)
+lcd.create_char(1, pausechar)
+lcd.create_char(2, stopchar)
+
+def MsToTime(start, end):
+ now_secs= '0' + str(floor((start/1000)%60)) if floor((start/1000)%60) < 10 else str(floor((start/1000)%60))
+ now_min= '0' + str(floor((start/1000)/60)) if floor((start/1000)/60) < 10 else str(floor((start/1000)/60))
+ end_secs= '0' + str(floor((end/1000)%60)) if floor((end/1000)%60) < 10 else str(floor((end/1000)%60))
+ end_min= '0' + str(floor((end/1000)/60)) if floor((end/1000)/60) < 10 else str(floor((end/1000)/60))
+ Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
+ return Timer
+def SearchExactTracklist(data): #function to find exalctly wchich cd was inserted
+ for x in range(0,len(data["disc"]["release-list"])):
+ for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
+ for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
+ if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
+ return x, y
+@timeout_decorator.timeout(5)#handling crash of Musicbrainzg
+def FetchDataMB():
+ musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", config.get('MusicBrainz', 'Mail'))
+ disc = discid.read()#id read
+ try:
+ result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
+ return result
+ except musicbrainzngs.ResponseError: #if not available search for cdtext
+ raise ValueError("Error:can't find on musicbrainzngs")
+
+def FetchData():
+ try:
+ d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
+ drive_name = d.get_device()
+ i_tracks = d.get_num_tracks()#ilosc trackow
+ artists = ["Unknown"] * i_tracks
+ track_list = ["Unknown"] * i_tracks
+ album = "Unknown"
+ except IOError:
+ print("Problem finding a CD-ROM")
+ sys.exit(1) #if no drive exit
+
+ try:
+ result = FetchDataMB()
+ except (ValueError, timeout_decorator.timeout_decorator.TimeoutError): #if not available search for cdtext
+ print("disc not found or bad response, using cdtxt instead")
+ cdt = d.get_cdtext()
+ i_first_track = pycdio.get_first_track_num(d.cd)
+
+ for t in range(i_first_track, i_tracks + i_first_track):
+ for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
+ #print(pycdio.cdtext_field2str(i)) ##0-TITLE 1-PERFORMER 2-SONGWRITER 3-COMPOSER 4-MESSAGE 5-ARRANGER 6-ISRC 7-UPC_EAN 8-GENERE 9-DISC_ID
+ value = cdt.get(i, t)
+ if value is not None:
+ if i == 0:
+ track_list[t-1] = value
+ pass
+ elif i == 1:
+ artists[t-1] = value
+ pass
+ pass
+ pass
+ if(track_list[t-1] == "Unknown"):
+ track_list[t-1] = "Untitled-" + str(t)
+ artists[t-1] = "Unknown"
+ else: #if available pull from Musicbrainz
+ a, b=SearchExactTracklist(result)
+ if result.get("disc"):
+ artists = [result["disc"]["release-list"][a]["artist-credit-phrase"]] * i_tracks
+ album = result["disc"]["release-list"][a]["title"]
+ elif result.get("cdstub"):
+ artists = [result["cdstub"]["artist"]] * i_tracks
+ album = result["cdstub"]["title"]
+ if(len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"]) < i_tracks): #i have some albums that idk why have 1 more track according to pcdio than it should
+ for t in range(0,len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])):
+ track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
+ for t in range(len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"]), i_tracks):
+ track_list[t]="Untitled-" + str(t+1)
+ else:
+ for t in range(0,i_tracks):
+ #print(t)
+ track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
+ #print(track_list)
+ if(artists[0] =="Various Artists"): #if musicbrainz returns Variouus artists check if cdtxt has better info
+ cdt = d.get_cdtext()
+ i_first_track = pycdio.get_first_track_num(d.cd)
+ for t in range(i_first_track, i_tracks + i_first_track):
+ value = cdt.get(1, t)
+ if value != "Unknown" and value is not None:
+ artists[t-1] = value
+ pass
+ print(artists, '\n', track_list, '\n', album, '\n', i_tracks)
+ return artists, track_list, album, i_tracks
+def PlayCd(conn):
+ try:
+ artists, track_list, album, i_tracks = FetchData()
+ except cdio.TrackError:
+ print("NO CD DUMBASS")
+ else:
+ instance = vlc.Instance() #uruchom vlc
+ player = instance.media_player_new()
+ medialist = instance.media_list_new()
+ listplayer = instance.media_list_player_new()
+ listplayer.set_media_player(player)
+ for i in (range(1,i_tracks+1)): #second option
+ track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
+ medialist.add_media(track)
+ listplayer.set_media_list(medialist)
+
+ listplayer.play()
+ time.sleep(5)#wait to spin
+
+ last_scrobble=""
+ network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
+ while True:
+ dump = conn.recv()
+ index = medialist.index_of_item(listplayer.get_media_player().get_media())
+ match dump:
+ case 0:
+ conn.send([index+1, i_tracks, track_list[index], artists[index], album, MsToTime(player.get_time(), player.get_length()), player.get_state()])
+ #case 1:
+ #listplayer.play()
+ case 2:
+ if(player.get_state() == vlc.State.Stopped):
+ listplayer.play()
+ else:
+ listplayer.pause()
+ case 3:
+ listplayer.stop()
+ #last_scrobble=""
+ case 4:
+ listplayer.next()
+ #last_scrobble=""
+ case 5:
+ if(player.get_position()>0.4):
+ player.set_position(0)
+ else:
+ listplayer.previous()
+ if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
+ last_scrobble= track_list[index]
+ try:
+ if album != "Unknown":
+ network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()), album=album)
+ elif track_list[index] != "Unknown" and artists[index] != "Unknown":
+ network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()))
+ print("Scrobbling success: " + artists[index] + track_list[index] + album + str(time.time()))
+ except Exception as e:
+ print("Scrobbling failed: " + artists[index] + track_list[index] + album + str(time.time()))
+ print("Reason? ->")
+ print(e)
+
+def loop_media(event):
+ print("Station ended. Moving to next station...")
+ listplayer.next()
+
+def PlayRadio(conn):
+ instance = vlc.Instance()
+ player = instance.media_player_new()
+ listplayer = instance.media_list_player_new()
+ listplayer.set_media_player(player)
+
+ # Create a playlist
+ playlist = instance.media_list_new()
+
+ radio_stations = {
+ "RP Main mix": "http://stream.radioparadise.com/flacm",
+ "RP Mellow mix": "http://stream.radioparadise.com/mellow-flacm",
+ "RP Rock mix": "http://stream.radioparadise.com/rock-flacm",
+ "RP Global mix": "http://stream.radioparadise.com/global-flacm",
+ "Radio 357": "https://stream.radio357.pl",
+ "Tok Fm": "http://radiostream.pl/tuba10-1.mp3",
+ "Rock Radio": "http://radiostream.pl/tuba8-1.mp3"
+ }
+ i_tracks = len(radio_stations)
+ # Add streams to the playlist
+ for station_name, stream_url in radio_stations.items():
+ media = instance.media_new(stream_url)
+ media.set_meta(vlc.Meta.Title, station_name)
+ playlist.add_media(media)
+
+ # Set the media list to the player
+ listplayer.set_media_list(playlist)
+
+ # Register the callback
+ event_manager = player.event_manager()
+ event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, loop_media)
+
+ # Start playing the first item in the playlist
+ print("Playing Radio Paradise streams...")
+ listplayer.play()
+ while True:
+ dump = conn.recv()
+ index = playlist.index_of_item(listplayer.get_media_player().get_media())
+ current_media = player.get_media()
+ match dump:
+ case 0:
+ conn.send([index+1, i_tracks, list(radio_stations.keys())[index], current_media.get_meta(vlc.Meta.Artist),current_media.get_meta(vlc.Meta.Album), MsToTime(player.get_time(), player.get_length()), player.get_state()])
+ #case 1:
+ #listplayer.play()
+ case 2:
+ if(player.get_state() == vlc.State.Stopped):
+ listplayer.play()
+ else:
+ listplayer.pause()
+ case 3:
+ listplayer.stop()
+ #last_scrobble=""
+ case 4:
+ listplayer.next()
+ #last_scrobble=""
+ case 5:
+ listplayer.previous()
+
+
+def ShowCd(dump):
+ global textb
+ lcd.clear()
+ if(len(dump[2])>16):
+ if textb >= len(dump[2])+1:
+ textb = 16
+ TrimMessage=dump[2][textb-16:textb]
+ textb+=1
+ else:
+ TrimMessage=dump[2]
+ lcd.message=unidecode(TrimMessage) #title
+ lcd.cursor_position(0,1)
+ lcd.message=unidecode(dump[5]) # time
+ lcd.cursor_position(15,1)
+ match dump[6]:
+ case vlc.State.Playing:
+ lcd.message='\x00'
+ case vlc.State.Paused:
+ lcd.message='\x01'
+ case vlc.State.Stopped:
+ lcd.message='\x02'
+ case "playing":
+ lcd.message='\x00'
+ case "paused":
+ lcd.message='\x01'
+
+class BtPlayer(object):
+ def __new__(self):
+ bus = SystemBus()
+ manager = bus.get('org.bluez', '/')
+
+ for obj in manager.GetManagedObjects():
+ if obj.endswith('/player0') or obj.endswith('/player2') or obj.endswith('/player1'):
+ return bus.get('org.bluez', obj)
+
+ raise BtPlayer.DeviceNotFoundError
+
+ class DeviceNotFoundError(Exception):
+ def __init__(self):
+ super().__init__('No music bluetooth device was found')
+
+def next():
+ global run, command
+ match page:
+ case 0:
+ if(not run):
+ command = 4
+ else:
+ parent_conn.send(4)
+ case 2:
+ if(not run):
+ command = 4
+ else:
+ parent_conn.send(4)
+ case 1:
+
+ command = 4
+def back():
+ global run, command
+ match page:
+ case 0:
+ if(not run):
+ command = 5
+ else:
+ parent_conn.send(5)
+ case 2:
+ if(not run):
+ command = 5
+ else:
+ parent_conn.send(5)
+ case 1:
+
+ command = 5
+def stop():
+ global run, command
+ match page:
+ case 0:
+ parent_conn.send(3)
+ case 2:
+ parent_conn.send(3)
+ case 1:
+ command = 3
+def pause():
+ global run, command
+ match page:
+ case 0:
+ parent_conn.send(2)
+ case 2:
+ parent_conn.send(2)
+ case 1:
+ command = 2
+def middle():
+ global start
+ start = time.time()
+
+def shutdown():
+ global start, command
+ end = time.time()
+ if(end-start>2):
+ lcd.clear()
+ lcd.message="Goodbye"
+ check_call(['sudo', 'poweroff'])
+ else:
+ command = -1
+
+Button_up.when_pressed = pause
+Button_left.when_pressed = back
+Button_right.when_pressed = next
+Button_down.when_pressed = stop
+Button_middle.when_pressed = middle
+Button_middle.when_released = shutdown
+
+parent_conn, child_conn = Pipe()
+lcd.clear()
+
+while True:
+ run = False
+ match command:
+ case 4:
+ page+=1
+ case 5:
+ page-=1
+ case -1:
+ run = True
+ command = 0
+ if page == -1:
+ page = MAX_PAGE
+ elif page > MAX_PAGE:
+ page = 0
+
+ match page:
+ case 0:
+ lcd.clear()
+ lcd.message = "CD Player"
+ if(run):
+ lcd.clear()
+ lcd.message = "Loading..."
+ cdplayer = Process(target=PlayCd, args=(child_conn,))
+ cdplayer.start()
+ time.sleep(5)
+ while(run):
+ if command == -1 and cdplayer.is_alive():
+ cdplayer.kill()
+ cdplayer.join()
+ run = False
+ elif cdplayer.is_alive():
+ parent_conn.send(0)#you must send to recive
+ time.sleep(0.1)
+ dump=parent_conn.recv()
+ if(dump[6] == vlc.State.Ended):
+ cdplayer.kill()
+ cdplayer.join()
+ lcd.clear()
+ run = False
+ else:
+ ShowCd(dump)
+ else:
+ run = False
+ command=0
+ time.sleep(1)
+ case 1:
+ lcd.clear()
+ lcd.message = "Bluetooth"
+ while(run):
+ try:
+ handle = BtPlayer()
+ ShowCd([1,1,handle.Track['Title'], handle.Track['Artist'], 'Untitled', MsToTime(handle.Position, handle.Track['Duration']), handle.Status])
+ match command:
+ case -1:
+ run=False
+ case 1:
+ handle.Play()
+ case 2:
+ handle.Pause()
+ case 4:
+ handle.Next()
+ case 5:
+ handle.Previous()
+ case 3:
+ handle.Stop()
+ except:
+ #print("Something crashed, try again") #dbus-monitor --address "unix:path=/run/dbus/system_bus_socket" "type='signal',sender='org.bluez'"
+ lcd.clear()
+ lcd.message = "Something\nwent wrong"
+ if(command == -1):
+ run=False
+ command = 0
+ time.sleep(1)
+ case 2:
+ lcd.clear()
+ lcd.message = "Internet\nRadio"
+ if(run):
+ lcd.clear()
+ lcd.message = "Loading..."
+ cdplayer = Process(target=PlayRadio, args=(child_conn,))
+ cdplayer.start()
+ time.sleep(2)
+ while(run):
+ if command == -1 and cdplayer.is_alive():
+ cdplayer.kill()
+ cdplayer.join()
+ run = False
+ elif cdplayer.is_alive():
+ parent_conn.send(0)#you must send to recive
+ time.sleep(0.1)
+ dump=parent_conn.recv()
+ if(dump[6] == vlc.State.Ended):
+ cdplayer.kill()
+ cdplayer.join()
+ lcd.clear()
+ run = False
+ else:
+ ShowCd(dump)
+ else:
+ run = False
+ command=0
+ time.sleep(1)
+ time.sleep(0.5)
diff --git a/config.ini b/config.ini
new file mode 100644
index 0000000..f6a99cf
--- /dev/null
+++ b/config.ini
@@ -0,0 +1,20 @@
+[Last_Fm]
+Enable = True
+Api_secret = SECRET
+Api_key = KEY
+Username = URNM
+Password = PASS
+
+[Buttons]
+Up = GPIO22
+Down = GPIO23
+Right = GPIO5
+Left = GPIO24
+Middle = GPIO6
+
+[Lcd]
+Columns = 16
+Rows = 2
+
+[MusicBrainz]
+Mail = example@mail.com
diff --git a/install_scripts/lgpio_compile.sh b/install_scripts/lgpio_compile.sh
new file mode 100644
index 0000000..9bcb24a
--- /dev/null
+++ b/install_scripts/lgpio_compile.sh
@@ -0,0 +1,7 @@
+sudo apk add gcc g++ musl-dev make
+git clone https://github.com/joan2937/lg.git
+cd lg
+make
+sudo make install
+ls /usr/local/lib | grep lgpio
+pip install lgpio
diff --git a/install_scripts/pip_requirements.txt b/install_scripts/pip_requirements.txt
new file mode 100644
index 0000000..3004b2d
--- /dev/null
+++ b/install_scripts/pip_requirements.txt
@@ -0,0 +1,16 @@
+Adafruit_Blinka==8.39.1
+adafruit_circuitpython_charlcd==3.4.10
+board==1.0
+discid==1.2.0
+musicbrainzngs==0.7.1
+pycdio==2.1.1
+pydbus==0.6.0
+pylast==5.3.0
+python_vlc==3.0.20123
+timeout_decorator==0.5.0
+configparser==7.0.0
+unidecode==1.3.8
+RPi.GPIO==0.7.1
+gpiozero==2.0.1
+PyGObject==3.50.0
+lgpio==0.2.2.0
diff --git a/more archival versions/README.md b/more archival versions/README.md
deleted file mode 100644
index f7c60d8..0000000
--- a/more archival versions/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# Archival versions
-so basically there's no rule in nameing and numeration, its just a folder of milestones which served as backup
diff --git a/more archival versions/SimpleCDPlayerMenu(1 1 update to circutpythonlibrary).py b/more archival versions/SimpleCDPlayerMenu(1 1 update to circutpythonlibrary).py
deleted file mode 100644
index dc87ab0..0000000
--- a/more archival versions/SimpleCDPlayerMenu(1 1 update to circutpythonlibrary).py
+++ /dev/null
@@ -1,61 +0,0 @@
-import subprocess
-import time #control time
-import RPi.GPIO as GPIO
-import signal
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows
-)
-
-GPIO.setmode(GPIO.BCM)
-button_pin = 12
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-lcd.clear()
-lcd.message =" Welcome to my \n cd player"
-time.sleep(2)
-
-'''
-def run_script():
- process = subprocess.run(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'], check=True)
- lcd.clear()
- lcd.message("Ejected")
- return process.returncode
-
-while True:
- lcd.clear()
- lcd.message("Click for\nloading")
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- time.sleep(1)
- return_code = run_script()
- print(f"The script returned: {return_code}")
- time.sleep(1)
-'''
-GPIO.setmode(GPIO.BCM)
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-process = None
-
-while True:
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- input_state = GPIO.input(button_pin)
- time.sleep(0.5)
- if input_state == False:
- if process is None or process.poll() is not None:
- process = subprocess.Popen(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'])
- else:
- process.send_signal(signal.SIGINT)
- lcd.clear()
- lcd.message('Eject/Input')
diff --git a/more archival versions/SimpleCDPlayerMenu(1 1).py b/more archival versions/SimpleCDPlayerMenu(1 1).py
deleted file mode 100644
index 8c226df..0000000
--- a/more archival versions/SimpleCDPlayerMenu(1 1).py
+++ /dev/null
@@ -1,48 +0,0 @@
-import subprocess
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import time #control time
-import RPi.GPIO as GPIO
-import signal
-
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-GPIO.setmode(GPIO.BCM)
-button_pin = 12
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-lcd.clear()
-lcd.message(" Welcome to my \n cd player")
-time.sleep(2)
-
-'''
-def run_script():
- process = subprocess.run(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'], check=True)
- lcd.clear()
- lcd.message("Ejected")
- return process.returncode
-
-while True:
- lcd.clear()
- lcd.message("Click for\nloading")
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- time.sleep(1)
- return_code = run_script()
- print(f"The script returned: {return_code}")
- time.sleep(1)
-'''
-GPIO.setmode(GPIO.BCM)
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-lcd.show_cursor(True)
-process = None
-
-while True:
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- input_state = GPIO.input(button_pin)
- time.sleep(0.5)
- if input_state == False:
- if process is None or process.poll() is not None:
- process = subprocess.Popen(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'])
- else:
- process.send_signal(signal.SIGINT)
- lcd.clear()
- lcd.message('Eject/Input')
diff --git a/more archival versions/SimpleCDPlayerMenu(1 2 update to circutpythonlibrary).py b/more archival versions/SimpleCDPlayerMenu(1 2 update to circutpythonlibrary).py
deleted file mode 100644
index 5bff2fc..0000000
--- a/more archival versions/SimpleCDPlayerMenu(1 2 update to circutpythonlibrary).py
+++ /dev/null
@@ -1,65 +0,0 @@
-import subprocess
-import time #control time
-import RPi.GPIO as GPIO
-import signal
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows
-)
-
-GPIO.setmode(GPIO.BCM)
-button_pin = 12
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-lcd.message =" Welcome to my \n cd player"
-time.sleep(2)
-
-'''
-def run_script():
- process = subprocess.run(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'], check=True)
- lcd.clear()
- lcd.message("Ejected")
- return process.returncode
-
-while True:
- lcd.clear()
- lcd.message("Click for\nloading")
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- time.sleep(1)
- return_code = run_script()
- print(f"The script returned: {return_code}")
- time.sleep(1)
-'''
-GPIO.setmode(GPIO.BCM)
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-process = None
-
-while True:
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- input_state = GPIO.input(button_pin)
- time.sleep(0.5)
- if input_state == False:
- if process is None or process.poll() is not None:
- process = subprocess.Popen(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'])
- else:
- process.send_signal(signal.SIGINT)
- lcd.clear()
- lcd.cursor = True
- lcd.blink = True
- lcd.message('Eject/Input')
diff --git a/more archival versions/SimpleCDPlayerMenu.py b/more archival versions/SimpleCDPlayerMenu.py
deleted file mode 100644
index ca39044..0000000
--- a/more archival versions/SimpleCDPlayerMenu.py
+++ /dev/null
@@ -1,48 +0,0 @@
-import subprocess
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import time #control time
-import RPi.GPIO as GPIO
-import signal
-
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-GPIO.setmode(GPIO.BCM)
-button_pin = 12
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-lcd.clear()
-lcd.message(" Welcome to my \n cd player")
-time.sleep(2)
-
-'''
-def run_script():
- process = subprocess.run(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'], check=True)
- lcd.clear()
- lcd.message("Ejected")
- return process.returncode
-
-while True:
- lcd.clear()
- lcd.message("Click for\nloading")
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- time.sleep(1)
- return_code = run_script()
- print(f"The script returned: {return_code}")
- time.sleep(1)
-'''
-GPIO.setmode(GPIO.BCM)
-GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-process = None
-
-while True:
- GPIO.wait_for_edge(button_pin, GPIO.FALLING)
- input_state = GPIO.input(button_pin)
- time.sleep(0.5)
- if input_state == False:
- if process is None or process.poll() is not None:
- process = subprocess.Popen(['python', '/home/mtryb/pytest/SimpleCDPlayerv1.py'])
- else:
- process.send_signal(signal.SIGINT)
- lcd.clear()
- lcd.message('Eject/Input')
diff --git a/more archival versions/SimpleCDPlayerv(1 2 state).py b/more archival versions/SimpleCDPlayerv(1 2 state).py
deleted file mode 100644
index 4779816..0000000
--- a/more archival versions/SimpleCDPlayerv(1 2 state).py
+++ /dev/null
@@ -1,208 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import math
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- global statep
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.set_cursor(0,1)
- lcd.message(wiadomosc)
- lcd.set_cursor(15,1)
- match statep:
- case 0:
- lcd.message('\x00')
- case 1:
- lcd.message('\x01')
- case 2:
- lcd.message('\x02')
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-lcd.show_cursor(False)
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
diff --git a/more archival versions/SimpleCDPlayerv(1 3 multi disc).py b/more archival versions/SimpleCDPlayerv(1 3 multi disc).py
deleted file mode 100644
index 68b341d..0000000
--- a/more archival versions/SimpleCDPlayerv(1 3 multi disc).py
+++ /dev/null
@@ -1,216 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import math
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-
-def search_exact_tracklist(data):
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- global statep
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.set_cursor(0,1)
- lcd.message(wiadomosc)
- lcd.set_cursor(15,1)
- match statep:
- case 0:
- lcd.message('\x00')
- case 1:
- lcd.message('\x01')
- case 2:
- lcd.message('\x02')
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-lcd.show_cursor(False)
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
diff --git a/more archival versions/SimpleCDPlayerv(1 4 1 better stopend).py b/more archival versions/SimpleCDPlayerv(1 4 1 better stopend).py
deleted file mode 100644
index edf089d..0000000
--- a/more archival versions/SimpleCDPlayerv(1 4 1 better stopend).py
+++ /dev/null
@@ -1,215 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import math#round down
-import signal
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted (previously multi cd releases didnt work)
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- stop_track(0)
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- global statep
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.set_cursor(0,1)
- lcd.message(wiadomosc)
- lcd.set_cursor(15,1)
- match statep:
- case 0:
- lcd.message('\x00')
- case 1:
- lcd.message('\x01')
- case 2:
- lcd.message('\x02')
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-lcd.show_cursor(False)
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-signal.pause() #wait for signal, previously it While True: pass, but it consumed 100% of cpu
diff --git a/more archival versions/SimpleCDPlayerv(1 4 low usage).py b/more archival versions/SimpleCDPlayerv(1 4 low usage).py
deleted file mode 100644
index 4400cb3..0000000
--- a/more archival versions/SimpleCDPlayerv(1 4 low usage).py
+++ /dev/null
@@ -1,216 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import math#round down
-import signal
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted (previously multi cd releases didnt work)
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- global statep
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.set_cursor(0,1)
- lcd.message(wiadomosc)
- lcd.set_cursor(15,1)
- match statep:
- case 0:
- lcd.message('\x00')
- case 1:
- lcd.message('\x01')
- case 2:
- lcd.message('\x02')
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-lcd.show_cursor(False)
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-signal.pause() #wait for signal, previously it While True: pass, but it consumed 100% of cpu
diff --git a/more archival versions/SimpleCDPlayerv1 (1 5 circuit python).py b/more archival versions/SimpleCDPlayerv1 (1 5 circuit python).py
deleted file mode 100644
index 201929a..0000000
--- a/more archival versions/SimpleCDPlayerv1 (1 5 circuit python).py
+++ /dev/null
@@ -1,229 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-import math#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows
-)
-lcd.clear()
-lcd.cursor = True
-lcd.blink = True
-lcd.message="Running\nModule"
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted (previously multi cd releases didnt work)
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- stop_track(0)
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- global statep
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message=track_list[songnumber]
- lcd.cursor_position(0,1)
- lcd.message=wiadomosc
- lcd.cursor_position(15,1)
- match statep:
- case 0:
- lcd.message='\x00'
- case 1:
- lcd.message='\x01'
- case 2:
- lcd.message='\x02'
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-lcd.cursor = False
-lcd.blink = False
-auto_time() #run showing time
-signal.pause() #wait for signal, previously it While True: pass, but it consumed 100% of cpu
diff --git a/more archival versions/SimpleCDPlayerv1(1 1).py b/more archival versions/SimpleCDPlayerv1(1 1).py
deleted file mode 100644
index 2569db0..0000000
--- a/more archival versions/SimpleCDPlayerv1(1 1).py
+++ /dev/null
@@ -1,196 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-import math
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- listplayer.stop()
- songnumber=0
-def pause_track(channel):
- listplayer.pause()
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- listplayer.play()
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- #wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.set_cursor(0,1)
- lcd.message(wiadomosc)
- lcd.set_cursor(13,1)
- lcd.message('\x00')
- lcd.message('\x01')
- lcd.message('\x02')
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-lcd.show_cursor(False)
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
diff --git a/more archival versions/SimpleCDPlayerv1.py b/more archival versions/SimpleCDPlayerv1.py
deleted file mode 100644
index 471c4ce..0000000
--- a/more archival versions/SimpleCDPlayerv1.py
+++ /dev/null
@@ -1,153 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-from Adafruit_CharLCD import Adafruit_CharLCD #LCD
-
-# instantiate lcd and specify pins
-lcd = Adafruit_CharLCD(rs=26, en=25,
- d4=10, d5=9, d6=11, d7=0,
- cols=16, lines=2)
-lcd.clear()
-lcd.message("Running\nModule")
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- listplayer.stop()
- songnumber=0
-def pause_track(channel):
- listplayer.pause()
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- listplayer.play()
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- global songnumber
- #print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- wiadomosc=time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)) + "-" + time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))
- lcd.clear()
- lcd.message(track_list[songnumber])
- lcd.message('\n')
- lcd.message(wiadomosc)
-def auto_time():
- time_track(0)
- threading.Timer(2, auto_time).start()# schedule the function to run every 2 second
-def exiting(channel):
- time.sleep(1)
- sys.exit(0) #it wont work in VScodium/code
- print('konczymy')
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-#GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
diff --git a/more archival versions/aio(1 0).py b/more archival versions/aio(1 0).py
deleted file mode 100644
index 1b4ec51..0000000
--- a/more archival versions/aio(1 0).py
+++ /dev/null
@@ -1,239 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-import math#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-i_tracks = 0
-t = None
-playstop = True
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-#end of setup
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-def next_media_playing(event):
- global songnumber
- global i_tracks
- songnumber +=1
- if songnumber == i_tracks:
- stop_track(0)
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track():
- global songnumber
- global statep
- global t
- t=threading.Timer(2,time_track)
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message=track_list[songnumber]
- lcd.cursor_position(0,1)
- lcd.message=wiadomosc
- lcd.cursor_position(15,1)
- match statep:
- case 0:
- lcd.message='\x00'
- case 1:
- lcd.message='\x01'
- case 2:
- lcd.message='\x02'
- t.start()
-def exiting(channel):
- global t
- global playstop
- print(playstop)
- if playstop==True:
- playstop=False
- print('konczymy')
- t.cancel()
- stop_track(0)
- lcd.clear()
- else:
- playstop=True
- print('startujemy')
- maincd()
-def maincd():
- global medialist
- global listplayer
- global statep
- global track_list
- statep = 0
- track_list = []
-
- fetchdata()
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
- lcd.cursor = True
- lcd.blink = True
- lcd.message="Starting CD"
- listplayer.play()
- time.sleep(10)#wait to spin
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- lcd.cursor = False
- lcd.blink = False
- time_track()
-
-#setting buttons
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-maincd()
-signal.pause()
\ No newline at end of file
diff --git a/more archival versions/aio(1 1 light debugging).py b/more archival versions/aio(1 1 light debugging).py
deleted file mode 100644
index 8fb5357..0000000
--- a/more archival versions/aio(1 1 light debugging).py
+++ /dev/null
@@ -1,243 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-import math#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-i_tracks = 0
-t = None
-playstop = True
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-#end of setup
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-def next_media_playing(event):
- global songnumber
- global i_tracks
- songnumber +=1
- if songnumber == i_tracks:
- stop_track(0)
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track():
- global songnumber
- global statep
- global t
- t=threading.Timer(2,time_track)
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message=track_list[songnumber]
- lcd.cursor_position(0,1)
- lcd.message=wiadomosc
- lcd.cursor_position(15,1)
- match statep:
- case 0:
- lcd.message='\x00'
- case 1:
- lcd.message='\x01'
- case 2:
- lcd.message='\x02'
- t.start()
-def exiting(channel):
- global t
- global playstop
- print(playstop)
- if playstop==True:
- playstop=False
- print('konczymy')
- lcd.cursor = True
- lcd.blink = True
- lcd.clear()
- lcd.message='Change medium'
- t.cancel()
- stop_track(0)
- else:
- playstop=True
- print('startujemy')
- maincd()
-def maincd():
- global medialist
- global listplayer
- global statep
- global track_list
- statep = 0
- track_list = []
- fetchdata()
- medialist = instance.media_list_new()
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
- lcd.cursor = True
- lcd.blink = True
- lcd.clear()
- lcd.message="Starting CD"
- listplayer.play()
- time.sleep(10)#wait to spin
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- lcd.cursor = False
- lcd.blink = False
- time_track()
-
-#setting buttons
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-maincd()
-signal.pause()
\ No newline at end of file
diff --git a/more archival versions/lcdandbuttons (1 3 full).py b/more archival versions/lcdandbuttons (1 3 full).py
deleted file mode 100644
index ed38ca3..0000000
--- a/more archival versions/lcdandbuttons (1 3 full).py
+++ /dev/null
@@ -1,210 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- Timer= str(floor((player.get_time()/1000)/60)) + ":" + str(floor((player.get_time()/1000)%60)) + " - " + str(floor((player.get_length()/1000)/60)) + ":" + str(floor((player.get_length()/1000)%60))
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command, cdplayer
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
- lcd.message=dump[2]
- lcd.cursor_position(0,1)
- lcd.message=dump[5]
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/more archival versions/lcdandbuttons.py b/more archival versions/lcdandbuttons.py
deleted file mode 100644
index 6b06c8f..0000000
--- a/more archival versions/lcdandbuttons.py
+++ /dev/null
@@ -1,202 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- Timer= str(floor((player.get_time()/1000)/60)) + ":" + str(floor((player.get_time()/1000)%60)) + " - " + str(floor((player.get_length()/1000)/60)) + ":" + str(floor((player.get_length()/1000)%60))
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command
- if cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- command=0
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
- lcd.message=dump[2]
- lcd.cursor_position(0,1)
- lcd.message=dump[5]
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
-
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/more archival versions/multiproccess1.py b/more archival versions/multiproccess1.py
deleted file mode 100644
index 40fb129..0000000
--- a/more archival versions/multiproccess1.py
+++ /dev/null
@@ -1,117 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- songnumber = 0
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
- event_manager = player.event_manager()# Get the event manager from the player
- event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, lambda event: locals().update(songnumber = songnumber + 1))# Register the callback
- while True:
- dump = conn.recv()
- conn.send([songnumber, i_tracks, track_list, data, player.get_time(), player.get_length()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- songnumber=0
- case 4:
- listplayer.next()
- songnumber+=1
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command
- if cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
diff --git a/more archival versions/multiprocess ( 1 0 keyboard working).py b/more archival versions/multiprocess ( 1 0 keyboard working).py
deleted file mode 100644
index a7db810..0000000
--- a/more archival versions/multiprocess ( 1 0 keyboard working).py
+++ /dev/null
@@ -1,126 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-kill = False
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], floor(player.get_time()/1000), floor(player.get_length()/1000), dump])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command
- if cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- command=0
- dump=parent_conn.recv()
- print(dump)
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/more archival versions/vlcbuttons(1).py b/more archival versions/vlcbuttons(1).py
deleted file mode 100644
index 9e3f7f8..0000000
--- a/more archival versions/vlcbuttons(1).py
+++ /dev/null
@@ -1,153 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 12, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- listplayer.stop()
- songnumber=0
-def pause_track(channel):
- listplayer.pause()
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- listplayer.play()
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def auto_time():
- time_track(0)
- threading.Timer(1, auto_time).start()# schedule the function to run every second
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=time_track, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
-
-''' for event which wxecution can be stopped
-import threading
-
-stop_event = False
-
-def print_hello():
- global stop_event
- if not stop_event:
- print("Hello!")
- # Call this function again in 1 second
- threading.Timer(1, print_hello).start()
-
-print_hello()
-
-# When you want to stop the event, set stop_event to True
-# stop_event = True
-'''
\ No newline at end of file
diff --git a/more archival versions/vlcbuttons(ordewr).py b/more archival versions/vlcbuttons(ordewr).py
deleted file mode 100644
index 020092c..0000000
--- a/more archival versions/vlcbuttons(ordewr).py
+++ /dev/null
@@ -1,153 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 12, 22, 23, 24]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-#ogarnianie cd
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- listplayer.stop()
- songnumber=0
-def pause_track(channel):
- listplayer.pause()
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- listplayer.play()
- print("Resuming ",track_list[songnumber])
-def time_track(channel):
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def auto_time():
- time_track(0)
- threading.Timer(1, auto_time).start()# schedule the function to run every second
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000) #ustaw eventy
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=play_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=time_track, bouncetime=1000)
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-auto_time() #run showing time
-while True:
- pass
-
-''' for event which wxecution can be stopped
-import threading
-
-stop_event = False
-
-def print_hello():
- global stop_event
- if not stop_event:
- print("Hello!")
- # Call this function again in 1 second
- threading.Timer(1, print_hello).start()
-
-print_hello()
-
-# When you want to stop the event, set stop_event to True
-# stop_event = True
-'''
\ No newline at end of file
diff --git a/more archival versions/vlckeyboard(1 2).py b/more archival versions/vlckeyboard(1 2).py
deleted file mode 100644
index f1bd564..0000000
--- a/more archival versions/vlckeyboard(1 2).py
+++ /dev/null
@@ -1,147 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio
-
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()
- #print("Ilosc trackow: ", i_tracks)
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown", "Utwory" : track_list}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"])
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response")
- print("using cdtxt instead")
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else:
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"])
-
-def next_media_playing(event):
- print("A new media is playing.")
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance()
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player) #idk what happens here
-#medialist.add_media("cdda:///dev/cdrom")
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-#print(medialist.item_at_index(3)) #rozne testy
-#print(medialist.item_at_index(5))
-#print(medialist.item_at_index(3).get_mrl())
-#print(medialist.count())
-
-print("Now playing: " , track_list[songnumber])
-listplayer.play()
-
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-
-while True:
- dump = input()
- match dump:
- case "next":
- listplayer.next()
- songnumber+=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "prev":
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
- case "pause":
- listplayer.pause()
- case "play":
- listplayer.play()
- case "stop":
- listplayer.stop()
- songnumber=0
- case "exit":
- break
- case "time":
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "procent":
- print(round(player.get_position()*100,2), '%') #idealne do progress bara set_position(0.2)
- case "media5":
- listplayer.play_item_at_index(4) #numeracja od 0
- songnumber=4
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case _:
- print("zła komenda, spróbuj ponownie")
-
-
-#player.get_media() gives
-#MediaPlayerForward, MediaPlayerBackward,
\ No newline at end of file
diff --git a/more archival versions/vlckeyboard(1 3 adnotacje).py b/more archival versions/vlckeyboard(1 3 adnotacje).py
deleted file mode 100644
index c7a5957..0000000
--- a/more archival versions/vlckeyboard(1 3 adnotacje).py
+++ /dev/null
@@ -1,136 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt i trackcount
-
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-
-def next_media_playing(event):
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-#medialist.add_media("cdda:///dev/cdrom") #to laduje jako 1 medoim, wiec nie mozna odpalac np 6 piosenki
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-print("Now playing: " , track_list[songnumber]) #startujemy
-listplayer.play()
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-
-while True:
- dump = input()
- match dump: #sterowanie
- case "next":
- listplayer.next()
- next_media_playing(0)
- case "prev":
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
- case "pause":
- listplayer.pause()
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "play":
- listplayer.play()
- print("Resuming ",track_list[songnumber])
- case "stop":
- listplayer.stop()
- songnumber=0
- case "exit":
- break
- case "time":
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "procent":
- print(round(player.get_position()*100,2), '%') #idealne do progress bara set_position(0.2)
- case "media5":
- listplayer.play_item_at_index(4) #numeracja od 0
- songnumber=4
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case _:
- print("zła komenda, spróbuj ponownie")
-
-
-#player.get_media() gives
-#MediaPlayerForward, MediaPlayerBackward,
-#print(medialist.item_at_index(3)) #rozne testy
-#print(medialist.item_at_index(5))
-#print(medialist.item_at_index(3).get_mrl())
-#print(medialist.count())
\ No newline at end of file
diff --git a/more archival versions/vlckeyboard(1 3 mb cdtxt unknwn).py b/more archival versions/vlckeyboard(1 3 mb cdtxt unknwn).py
deleted file mode 100644
index 59ec405..0000000
--- a/more archival versions/vlckeyboard(1 3 mb cdtxt unknwn).py
+++ /dev/null
@@ -1,146 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio
-
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()
- #print("Ilosc trackow: ", i_tracks)
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-
-songnumber = 0
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-
-def fetchdata():
- global track_list
- global data
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][0]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][0]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- for i in range(0,i_tracks-1):
- track_list.append(medium["track-list"][i]["recording"]["title"])
-
-def next_media_playing(event):
- print("A new media is playing.")
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-fetchdata()
-print(data["Autor"],'\t',data["Album"])
-print('\n')
-
-instance = vlc.Instance()
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player) #idk what happens here
-#medialist.add_media("cdda:///dev/cdrom")
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-#print(medialist.item_at_index(3)) #rozne testy
-#print(medialist.item_at_index(5))
-#print(medialist.item_at_index(3).get_mrl())
-#print(medialist.count())
-
-print("Now playing: " , track_list[songnumber])
-listplayer.play()
-
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-
-while True:
- dump = input()
- match dump:
- case "next":
- listplayer.next()
- songnumber+=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "prev":
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
- case "pause":
- listplayer.pause()
- case "play":
- listplayer.play()
- case "stop":
- listplayer.stop()
- songnumber=0
- case "exit":
- break
- case "time":
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "procent":
- print(round(player.get_position()*100,2), '%') #idealne do progress bara set_position(0.2)
- case "media5":
- listplayer.play_item_at_index(4) #numeracja od 0
- songnumber=4
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case _:
- print("zła komenda, spróbuj ponownie")
-
-
-#player.get_media() gives
-#MediaPlayerForward, MediaPlayerBackward,
\ No newline at end of file
diff --git a/more archival versions/vlckeyboard.py b/more archival versions/vlckeyboard.py
deleted file mode 100644
index 6fde874..0000000
--- a/more archival versions/vlckeyboard.py
+++ /dev/null
@@ -1,132 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio
-
-try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()
- #print("Ilosc trackow: ", i_tracks)
-except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1)
-
-songnumber = 0
-track_list = []
-
-def fetchdata():
- global track_list
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"])
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response")
- else: #Artist and album info
- if result.get("disc"):
- print("artist:\t%s" %
- result["disc"]["release-list"][0]["artist-credit-phrase"])
- print("title:\t%s" % result["disc"]["release-list"][0]["title"])
- elif result.get("cdstub"):
- print("artist:\t" % result["cdstub"]["artist"])
- print("title:\t" % result["cdstub"]["title"])
- release = result["disc"]["release-list"][0] #tracklist
- medium = release["medium-list"][0]
- track_list = medium["track-list"] #print(type(track_list)) #list[][][]
-
-def next_media_playing(event):
- print("A new media is playing.")
- global songnumber
- songnumber +=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber]["recording"]["title"])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-fetchdata()
-
-print('\n')
-
-instance = vlc.Instance()
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player) #idk what happens here
-#medialist.add_media("cdda:///dev/cdrom")
-for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
-listplayer.set_media_list(medialist)
-
-
-#print(medialist.item_at_index(3)) #rozne testy
-#print(medialist.item_at_index(5))
-#print(medialist.item_at_index(3).get_mrl())
-#print(medialist.count())
-
-print("Now playing: " , track_list[songnumber]["recording"]["title"])
-listplayer.play()
-
-time.sleep(10)#wait to spin
-print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-
-
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-
-while True:
- dump = input()
- match dump:
- case "next":
- listplayer.next()
- songnumber+=1
- if songnumber == i_tracks:
- listplayer.stop()
- songnumber=0
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber]["recording"]["title"])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "prev":
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber]["recording"]["title"])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
- case "pause":
- listplayer.pause()
- case "play":
- listplayer.play()
- case "stop":
- listplayer.stop()
- songnumber=0
- case "exit":
- break
- case "time":
- print(time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case "procent":
- print(round(player.get_position()*100,2), '%') #idealne do progress bara set_position(0.2)
- case "media5":
- listplayer.play_item_at_index(4) #numeracja od 0
- songnumber=4
- print("Now playing: " , track_list[songnumber]["recording"]["title"])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- case _:
- print("zła komenda, spróbuj ponownie")
-
-
-#player.get_media() gives
-#MediaPlayerForward, MediaPlayerBackward,
\ No newline at end of file
diff --git a/more archival versions/withlcd.py b/more archival versions/withlcd.py
deleted file mode 100644
index 3fd8ec9..0000000
--- a/more archival versions/withlcd.py
+++ /dev/null
@@ -1,195 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000
-]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000
-]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000
-]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- Timer= str(floor((player.get_time()/1000)/60)) + ":" + str(floor((player.get_time()/1000)%60)) + " - " + str(floor((player.get_length()/1000)/60)) + ":" + str(floor((player.get_length()/1000)%60))
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command
- if cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- command=0
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
- lcd.message=dump[2]
- lcd.cursor_position(0,1)
- lcd.message=dump[5]
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
-
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/releases/V1.2Multiprocessing.py b/releases/V1.2Multiprocessing.py
deleted file mode 100644
index ed38ca3..0000000
--- a/releases/V1.2Multiprocessing.py
+++ /dev/null
@@ -1,210 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- Timer= str(floor((player.get_time()/1000)/60)) + ":" + str(floor((player.get_time()/1000)%60)) + " - " + str(floor((player.get_length()/1000)/60)) + ":" + str(floor((player.get_length()/1000)%60))
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command, cdplayer
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
- lcd.message=dump[2]
- lcd.cursor_position(0,1)
- lcd.message=dump[5]
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/releases/aio.1.1.py b/releases/aio.1.1.py
deleted file mode 100644
index 8fb5357..0000000
--- a/releases/aio.1.1.py
+++ /dev/null
@@ -1,243 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-import RPi.GPIO as GPIO#buttons
-import threading #scheduling
-import math#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-
-# Modify this if you have a different sized character LCD
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-# Store the custom character in the LCD's memory (in location 0)
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-songnumber = 0 #zmienne kontrolujace wyswietlanie
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-statep = 0 #0-play 1-pause 2-stop
-i_tracks = 0
-t = None
-playstop = True
-
-instance = vlc.Instance() #uruchom vlc
-player = instance.media_player_new()
-medialist = instance.media_list_new()
-listplayer = instance.media_list_player_new()
-listplayer.set_media_player(player)
-#end of setup
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
- print(track_list)
-def next_media_playing(event):
- global songnumber
- global i_tracks
- songnumber +=1
- if songnumber == i_tracks:
- stop_track(0)
- print("Koniec tej wycieczki")
- else:
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def next_track(channel):
- listplayer.next()
- next_media_playing(0)
-def prev_track(channel):
- global songnumber
- listplayer.previous()
- if songnumber == 0:
- print("bardziej sie nie cofniesz")
- else:
- songnumber-=1
- print("Now playing: " , track_list[songnumber])
- time.sleep(0.25)
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000))) #set_time(1000)
-def stop_track(channel):
- global songnumber
- global statep
- listplayer.stop()
- songnumber=0
- statep = 2
-def pause_track(channel):
- global statep
- listplayer.pause()
- statep = 1
- print("Paused at: ", time.strftime("%H:%M:%S", time.gmtime(player.get_time()/1000)), "---", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
-def play_track(channel):
- global songnumber
- global statep
- listplayer.play()
- statep = 0
- print("Resuming ",track_list[songnumber])
-def time_track():
- global songnumber
- global statep
- global t
- t=threading.Timer(2,time_track)
- wiadomosc= str(math.floor((player.get_time()/1000)/60)) + ":" + str(math.floor((player.get_time()/1000)%60)) + " - " + str(math.floor((player.get_length()/1000)/60)) + ":" + str(math.floor((player.get_length()/1000)%60))
- lcd.clear()
- lcd.message=track_list[songnumber]
- lcd.cursor_position(0,1)
- lcd.message=wiadomosc
- lcd.cursor_position(15,1)
- match statep:
- case 0:
- lcd.message='\x00'
- case 1:
- lcd.message='\x01'
- case 2:
- lcd.message='\x02'
- t.start()
-def exiting(channel):
- global t
- global playstop
- print(playstop)
- if playstop==True:
- playstop=False
- print('konczymy')
- lcd.cursor = True
- lcd.blink = True
- lcd.clear()
- lcd.message='Change medium'
- t.cancel()
- stop_track(0)
- else:
- playstop=True
- print('startujemy')
- maincd()
-def maincd():
- global medialist
- global listplayer
- global statep
- global track_list
- statep = 0
- track_list = []
- fetchdata()
- medialist = instance.media_list_new()
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
- lcd.cursor = True
- lcd.blink = True
- lcd.clear()
- lcd.message="Starting CD"
- listplayer.play()
- time.sleep(10)#wait to spin
- print("Duration: ", time.strftime("%H:%M:%S", time.gmtime(player.get_length()/1000)))
- lcd.cursor = False
- lcd.blink = False
- time_track()
-
-#setting buttons
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=next_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=prev_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=stop_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=pause_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=play_track, bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=exiting, bouncetime=1000)
-
-#auto jak sie piosenka zmienia sama
-event_manager = player.event_manager()# Get the event manager from the player
-event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, next_media_playing)# Register the callback
-
-maincd()
-signal.pause()
\ No newline at end of file
diff --git a/releases/v1.3_Scrolling.py b/releases/v1.3_Scrolling.py
deleted file mode 100644
index b5bbb74..0000000
--- a/releases/v1.3_Scrolling.py
+++ /dev/null
@@ -1,223 +0,0 @@
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-textb = 15
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "miki.klopsiki@o2.pl")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- now_secs= '0' + str(floor((player.get_time()/1000)%60)) if floor((player.get_time()/1000)%60) < 10 else str(floor((player.get_time()/1000)%60))
- now_min= '0' + str(floor((player.get_time()/1000)/60)) if floor((player.get_time()/1000)/60) < 10 else str(floor((player.get_time()/1000)/60))
- end_secs= '0' + str(floor((player.get_length()/1000)%60)) if floor((player.get_length()/1000)%60) < 10 else str(floor((player.get_length()/1000)%60))
- end_min= '0' + str(floor((player.get_length()/1000)/60)) if floor((player.get_length()/1000)/60) < 10 else str(floor((player.get_length()/1000)/60))
- Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command, cdplayer, textb
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
-
- if(len(dump[2])>16):
- if textb >= len(dump[2])+1:
- textb = 16
- TrimMessage=dump[2][textb-16:textb]
- textb+=1
- else:
- TrimMessage=dump[2]
- lcd.message=TrimMessage #title
- lcd.cursor_position(0,1)
- lcd.message=dump[5] # time
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/releases/v1.4.1_scrobblehotfix.py b/releases/v1.4.1_scrobblehotfix.py
deleted file mode 100644
index bc4009e..0000000
--- a/releases/v1.4.1_scrobblehotfix.py
+++ /dev/null
@@ -1,254 +0,0 @@
-# A runatboot file
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-import os
-os.environ['LAST_FM_API_SECRET'] =
-import pylast
-API_KEY = #Lastfm login data
-API_SECRET =
-username =
-password_hash =
-
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-textb = 15
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", "")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
-
-
- for t in range(i_first_track, i_tracks + i_first_track):
- for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
- #print(pycdio.cdtext_field2str(i)) ##0-TITLE 1-PERFORMER 2-SONGWRITER 3-COMPOSER 4-MESSAGE 5-ARRANGER 6-ISRC 7-UPC_EAN 8-GENERE 9-DISC_ID
- value = cdt.get(i, t)
- if value is not None:
- if i == 0:
- track_list.append(value)
- pass
- elif i == 1:
- data["Autor"] = value
- pass
- pass
- elif i == 0: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- last_scrobble=""
- network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- now_secs= '0' + str(floor((player.get_time()/1000)%60)) if floor((player.get_time()/1000)%60) < 10 else str(floor((player.get_time()/1000)%60))
- now_min= '0' + str(floor((player.get_time()/1000)/60)) if floor((player.get_time()/1000)/60) < 10 else str(floor((player.get_time()/1000)/60))
- end_secs= '0' + str(floor((player.get_length()/1000)%60)) if floor((player.get_length()/1000)%60) < 10 else str(floor((player.get_length()/1000)%60))
- end_min= '0' + str(floor((player.get_length()/1000)/60)) if floor((player.get_length()/1000)/60) < 10 else str(floor((player.get_length()/1000)/60))
- Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- last_scrobble=""
- case 4:
- listplayer.next()
- last_scrobble=""
- case 5:
- listplayer.previous()
- last_scrobble=""
- if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
- last_scrobble= track_list[index]
- if data["Album"] != "Unknown":
- network.scrobble(artist=data["Autor"], title=track_list[index], timestamp=int(time.time()), album=data["Album"])
- elif track_list[index] != "Unknown" and data["Autor"] != "Unknown":
- network.scrobble(artist=data["Autor"], title=track_list[index], timestamp=int(time.time()))
-
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command, cdplayer, textb
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
-
- if(len(dump[2])>16):
- if textb >= len(dump[2])+1:
- textb = 16
- TrimMessage=dump[2][textb-16:textb]
- textb+=1
- else:
- TrimMessage=dump[2]
- lcd.message=TrimMessage #title
- lcd.cursor_position(0,1)
- lcd.message=dump[5] # time
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/releases/v1.4.2_hotfix2(2).py b/releases/v1.4.2_hotfix2(2).py
deleted file mode 100644
index d7f1db6..0000000
--- a/releases/v1.4.2_hotfix2(2).py
+++ /dev/null
@@ -1,240 +0,0 @@
-# A runatboot file
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-import os
-os.environ['LAST_FM_API_SECRET'] = ''
-import pylast
-API_KEY = ""#Lastfm login data
-API_SECRET = ""
-username = ""
-password_hash = pylast.md5(b"")
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-textb = 15
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- artists = [None] * i_tracks
- track_list = [None] * i_tracks
- album = "Unknown"
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
-
- for t in range(i_first_track, i_tracks + i_first_track):
- for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
- #print(pycdio.cdtext_field2str(i)) ##0-TITLE 1-PERFORMER 2-SONGWRITER 3-COMPOSER 4-MESSAGE 5-ARRANGER 6-ISRC 7-UPC_EAN 8-GENERE 9-DISC_ID
- value = cdt.get(i, t)
- if value is not None:
- if i == 0:
- track_list[t-1] = value
- pass
- elif i == 1:
- artists[t-1] = value
- pass
- pass
- pass
- if(track_list[t-1] == None):
- track_list[t-1] = "Untitled-" + str(t)
- artists[t-1] = "Unknown"
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- artists = [result["disc"]["release-list"][a]["artist-credit-phrase"]] * i_tracks
- album = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- artists = [result["cdstub"]["artist"]] * i_tracks
- album = result["cdstub"]["title"]
- for t in range(0,i_tracks):
- track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
- #print(artists, '\n', track_list, '\n', album, '\n', i_tracks)
- return artists, track_list, album, i_tracks
-def playcd(conn):
- artists, track_list, album, i_tracks = fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- last_scrobble=""
- network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- now_secs= '0' + str(floor((player.get_time()/1000)%60)) if floor((player.get_time()/1000)%60) < 10 else str(floor((player.get_time()/1000)%60))
- now_min= '0' + str(floor((player.get_time()/1000)/60)) if floor((player.get_time()/1000)/60) < 10 else str(floor((player.get_time()/1000)/60))
- end_secs= '0' + str(floor((player.get_length()/1000)%60)) if floor((player.get_length()/1000)%60) < 10 else str(floor((player.get_length()/1000)%60))
- end_min= '0' + str(floor((player.get_length()/1000)/60)) if floor((player.get_length()/1000)/60) < 10 else str(floor((player.get_length()/1000)/60))
- Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
- conn.send([index+1, i_tracks, track_list[index], artists[index], album, Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- last_scrobble=""
- case 4:
- listplayer.next()
- last_scrobble=""
- case 5:
- listplayer.previous()
- last_scrobble=""
- if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
- last_scrobble= track_list[index]
- if album != "Unknown":
- network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()), album=album)
- elif track_list[index] != "Unknown" and artists[index] != "Unknown":
- network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()))
-
-def PlayerGlobalSync():
- global command, cdplayer, textb
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- #print(dump)
- lcd.clear()
- if(dump[6] == vlc.State.Ended):
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "CD ended\nChange medium"
- else:
- if(len(dump[2])>16):
- if textb >= len(dump[2])+1:
- textb = 16
- TrimMessage=dump[2][textb-16:textb]
- textb+=1
- else:
- TrimMessage=dump[2]
- lcd.message=TrimMessage #title
- lcd.cursor_position(0,1)
- lcd.message=dump[5] # time
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
diff --git a/releases/v1.4.3_hotfix3.py b/releases/v1.4.3_hotfix3.py
deleted file mode 100644
index f27b8b5..0000000
--- a/releases/v1.4.3_hotfix3.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# A runatboot file
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-import os
-os.environ['LAST_FM_API_SECRET'] = ''
-import pylast
-API_KEY = ""#Lastfm login data
-API_SECRET = ""
-username = ""
-password_hash = pylast.md5(b"")
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-textb = 15
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- artists = [None] * i_tracks
- track_list = [None] * i_tracks
- album = "Unknown"
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
-
- for t in range(i_first_track, i_tracks + i_first_track):
- for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
- #print(pycdio.cdtext_field2str(i)) ##0-TITLE 1-PERFORMER 2-SONGWRITER 3-COMPOSER 4-MESSAGE 5-ARRANGER 6-ISRC 7-UPC_EAN 8-GENERE 9-DISC_ID
- value = cdt.get(i, t)
- if value is not None:
- if i == 0:
- track_list[t-1] = value
- pass
- elif i == 1:
- artists[t-1] = value
- pass
- pass
- pass
- if(track_list[t-1] == None):
- track_list[t-1] = "Untitled-" + str(t)
- artists[t-1] = "Unknown"
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- artists = [result["disc"]["release-list"][a]["artist-credit-phrase"]] * i_tracks
- album = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- artists = [result["cdstub"]["artist"]] * i_tracks
- album = result["cdstub"]["title"]
- for t in range(0,i_tracks):
- track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
- if(artists[0] =="Various Artists"):
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(1, t)
- if value is not None:
- artists[t-1] = value
- pass
- #print(artists, '\n', track_list, '\n', album, '\n', i_tracks)
- return artists, track_list, album, i_tracks
-def playcd(conn):
- artists, track_list, album, i_tracks = fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- last_scrobble=""
- network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- now_secs= '0' + str(floor((player.get_time()/1000)%60)) if floor((player.get_time()/1000)%60) < 10 else str(floor((player.get_time()/1000)%60))
- now_min= '0' + str(floor((player.get_time()/1000)/60)) if floor((player.get_time()/1000)/60) < 10 else str(floor((player.get_time()/1000)/60))
- end_secs= '0' + str(floor((player.get_length()/1000)%60)) if floor((player.get_length()/1000)%60) < 10 else str(floor((player.get_length()/1000)%60))
- end_min= '0' + str(floor((player.get_length()/1000)/60)) if floor((player.get_length()/1000)/60) < 10 else str(floor((player.get_length()/1000)/60))
- Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
- conn.send([index+1, i_tracks, track_list[index], artists[index], album, Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- last_scrobble=""
- case 4:
- listplayer.next()
- last_scrobble=""
- case 5:
- listplayer.previous()
- last_scrobble=""
- if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
- last_scrobble= track_list[index]
- if album != "Unknown":
- network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()), album=album)
- elif track_list[index] != "Unknown" and artists[index] != "Unknown":
- network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()))
-
-def PlayerGlobalSync():
- global command, cdplayer, textb
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- #print(dump)
- lcd.clear()
- if(dump[6] == vlc.State.Ended):
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "CD ended\nChange medium"
- else:
- if(len(dump[2])>16):
- if textb >= len(dump[2])+1:
- textb = 16
- TrimMessage=dump[2][textb-16:textb]
- textb+=1
- else:
- TrimMessage=dump[2]
- lcd.message=TrimMessage #title
- lcd.cursor_position(0,1)
- lcd.message=dump[5] # time
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
diff --git a/releases/v1.4_scrobble.py b/releases/v1.4_scrobble.py
deleted file mode 100644
index bfa1c47..0000000
--- a/releases/v1.4_scrobble.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# A runatboot file
-import vlc #play music
-import time #control time
-import discid #read discid
-import musicbrainzngs #fetch data
-import sys
-import cdio, pycdio #cdtxt & trackcount
-from multiprocessing import Process, Pipe
-import threading #scheduling
-from math import floor#round down
-import signal#last 4 is for LCD
-import board
-from digitalio import DigitalInOut
-from adafruit_character_lcd.character_lcd import Character_LCD_Mono
-import RPi.GPIO as GPIO#buttons
-import os
-#---------Last fm-----------
-os.environ['LAST_FM_API_SECRET'] = 'xxx'#fill with your data
-import pylast
-API_KEY = "yyy"
-API_SECRET = "xxx"
-username = "zzz"
-password_hash = pylast.md5(b"aaa")
-
-
-lcd_columns = 16
-lcd_rows = 2
-
-lcd_rs = DigitalInOut(board.D26)
-lcd_en = DigitalInOut(board.D25)
-lcd_d4 = DigitalInOut(board.D10)
-lcd_d5 = DigitalInOut(board.D9)
-lcd_d6 = DigitalInOut(board.D11)
-lcd_d7 = DigitalInOut(board.D0)
-# Initialise the LCD class
-lcd = Character_LCD_Mono(
- lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
-lcd.clear()
-lcd.cursor = False
-lcd.blink = False
-
-GPIO.setmode(GPIO.BCM) #przyciski
-BUTTONS = [5, 6, 22, 23, 24, 12]
-GPIO.setup(BUTTONS, GPIO.IN, pull_up_down=GPIO.PUD_UP)
-
-track_list = []
-data = {"Autor" : "Unknown", "Album": "Unknown"}
-i_tracks = 0
-command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
-textb = 15
-
-playchar = [
- 0b01000,
- 0b01100,
- 0b01110,
- 0b01111,
- 0b01110,
- 0b01100,
- 0b01000,
- 0b00000]
-pausechar = [
- 0b00000,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b10010,
- 0b00000]
-stopchar = [
- 0b00000,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b11111,
- 0b00000,
- 0b00000]
-lcd.create_char(0, playchar)
-lcd.create_char(1, pausechar)
-lcd.create_char(2, stopchar)
-
-def search_exact_tracklist(data): #function to find exalctly wchich cd was inserted
- for x in range(0,len(data["disc"]["release-list"])):
- for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
- for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
- if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
- return x, y
-def fetchdata():
- global track_list
- global data
- global i_tracks
- #ogarnianie cd
- try:
- d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
- drive_name = d.get_device()
- i_tracks = d.get_num_tracks()#ilosc trackow
- except IOError:
- print("Problem finding a CD-ROM")
- sys.exit(1) #if no drive exit
-
- musicbrainzngs.set_useragent("Small_diy_cd_player", "1.4", "your@email.com")
- disc = discid.read()#id read
- try:
- result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
- except musicbrainzngs.ResponseError:
- print("disc not found or bad response, using cdtxt instead") #if not available search for cdtext
- cdt = d.get_cdtext()
- i_first_track = pycdio.get_first_track_num(d.cd)
- for t in range(i_first_track, i_tracks + i_first_track):
- value = cdt.get(0, t)
- if value is not None:
- track_list.append(value)
- pass
- else: #if there isnt anything just type Unknowsn
- track_list.append("Unknown-%s" % t)
- pass
- pass
- else: #Artist and album info
- a, b=search_exact_tracklist(result)
- if result.get("disc"):
- data["Autor"] = result["disc"]["release-list"][a]["artist-credit-phrase"]
- data["Album"] = result["disc"]["release-list"][a]["title"]
- elif result.get("cdstub"):
- data["Autor"] = result["cdstub"]["artist"]
- data["Album"] = result["cdstub"]["title"]
- #print(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])
- for i in range(0,i_tracks):
- track_list.append(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][i]["recording"]["title"]) #uzupelnij tracklist
-def playcd(conn):
- fetchdata()
-
- instance = vlc.Instance() #uruchom vlc
- player = instance.media_player_new()
- medialist = instance.media_list_new()
- listplayer = instance.media_list_player_new()
- listplayer.set_media_player(player)
- for i in (range(1,i_tracks+1)): #second option
- track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
- medialist.add_media(track)
- listplayer.set_media_list(medialist)
-
- listplayer.play()
- time.sleep(5)#wait to spin
-
- last_scrobble=""
- network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
- while True:
- dump = conn.recv()
- index = medialist.index_of_item(listplayer.get_media_player().get_media())
- now_secs= '0' + str(floor((player.get_time()/1000)%60)) if floor((player.get_time()/1000)%60) < 10 else str(floor((player.get_time()/1000)%60))
- now_min= '0' + str(floor((player.get_time()/1000)/60)) if floor((player.get_time()/1000)/60) < 10 else str(floor((player.get_time()/1000)/60))
- end_secs= '0' + str(floor((player.get_length()/1000)%60)) if floor((player.get_length()/1000)%60) < 10 else str(floor((player.get_length()/1000)%60))
- end_min= '0' + str(floor((player.get_length()/1000)/60)) if floor((player.get_length()/1000)/60) < 10 else str(floor((player.get_length()/1000)/60))
- Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
- conn.send([index+1, i_tracks, track_list[index], data["Autor"], data["Album"], Timer, player.get_state()])
- match dump:
- case 0:
- pass
- case 1:
- listplayer.play()
- case 2:
- listplayer.pause()
- case 3:
- listplayer.stop()
- case 4:
- listplayer.next()
- case 5:
- listplayer.previous()
- if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
- last_scrobble= track_list[index]
- network.scrobble(artist=data["Autor"], title=track_list[index], timestamp=int(time.time()))
-
-def PlayerGlobalSync():
- global songnumber, track_list, data, i_tracks, command, cdplayer, textb
- if command == -1:
- if cdplayer.is_alive():
- cdplayer.kill()
- cdplayer.join()
- lcd.clear()
- lcd.message = "Change\nmedium"
- else:
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- elif cdplayer.is_alive():
- parent_conn.send(command)
- time.sleep(0.1)
- dump=parent_conn.recv()
- print(dump)
-
- lcd.clear()
-
- if(len(dump[2])>16):
- if textb >= len(dump[2])+1:
- textb = 16
- TrimMessage=dump[2][textb-16:textb]
- textb+=1
- else:
- TrimMessage=dump[2]
- lcd.message=TrimMessage #title
- lcd.cursor_position(0,1)
- lcd.message=dump[5] # time
- lcd.cursor_position(15,1)
- match dump[6]:
- case vlc.State.Playing:
- lcd.message='\x00'
- case vlc.State.Paused:
- lcd.message='\x01'
- case vlc.State.Stopped:
- lcd.message='\x02'
- command=0
- P=threading.Timer(1, PlayerGlobalSync)
- P.start()
-
-GPIO.add_event_detect(BUTTONS[0], GPIO.FALLING, callback=lambda event: globals().update(command = 4), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[1], GPIO.FALLING, callback=lambda event: globals().update(command = 5), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[3], GPIO.FALLING, callback=lambda event: globals().update(command = 3), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[2], GPIO.FALLING, callback=lambda event: globals().update(command = 2), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[4], GPIO.FALLING, callback=lambda event: globals().update(command = 1), bouncetime=1000)
-GPIO.add_event_detect(BUTTONS[5], GPIO.FALLING, callback=lambda event: globals().update(command = -1), bouncetime=1000)
-
-parent_conn, child_conn = Pipe()
-cdplayer = Process(target=playcd, args=(child_conn,))
-
-cdplayer.start()
-PlayerGlobalSync()
-
-
-while True:
- dump = input()
- if dump == '-1':
- cdplayer.kill()
- cdplayer.join()
- elif (dump == '-2') and not cdplayer.is_alive():
- cdplayer = Process(target=playcd, args=(child_conn,))
- cdplayer.start()
- else:
- command=int(dump)
-
diff --git a/wip_webui/README.md b/wip_webui/README.md
new file mode 100644
index 0000000..ded8523
--- /dev/null
+++ b/wip_webui/README.md
@@ -0,0 +1,2 @@
+# Webui
+It's stil work in progress, so far im just experimenting with socketio library
diff --git a/wip_webui/boot_async.py b/wip_webui/boot_async.py
new file mode 100644
index 0000000..2a05672
--- /dev/null
+++ b/wip_webui/boot_async.py
@@ -0,0 +1,484 @@
+# A runatboot file
+import vlc #play music
+import time #control time
+import discid #read discid
+import musicbrainzngs #fetch data
+import sys
+import cdio, pycdio #cdtxt & trackcount
+from multiprocessing import Process, Pipe
+import threading #scheduling
+from math import floor#round down
+import signal
+import board
+from digitalio import DigitalInOut
+from adafruit_character_lcd.character_lcd import Character_LCD_Mono
+import os
+import pylast
+from pydbus import SystemBus
+import timeout_decorator
+import configparser
+from unidecode import unidecode#decoding characters to their english ASCII version
+from gpiozero import Button
+from subprocess import check_call#for shutdown only
+#from fonts.py import *
+
+
+import socketio
+import asyncio
+
+# Create an async Socket.IO server
+sio = socketio.AsyncServer(async_mode='asgi', cors_allowed_origins='*')
+
+# Handle a connection event
+@sio.event
+async def connect(sid, environ):
+ print(f"Client connected: {sid}")
+
+# Handle a message event when the client sends the name
+@sio.on('send_name')
+async def handle_message(sid, data):
+ print(f"Received name: {data}")
+ # Send a "hello" response back to the client asynchronously
+ await sio.emit('hello_response', f"Hello, {data}!", to=sid)
+
+# Handle a disconnection event
+@sio.event
+async def disconnect(sid):
+ print(f"Client disconnected: {sid}")
+
+# Create an ASGI application
+app = socketio.ASGIApp(sio)
+
+async def run_server():
+ """Run the server using Hypercorn in the background."""
+ import hypercorn.asyncio
+ from hypercorn.config import Config
+
+ # Create a Hypercorn config for ASGI app
+ config = Config()
+ config.bind = ["0.0.0.0:5000"]
+
+ print("Server starting...")
+ # Start the server asynchronously
+ await hypercorn.asyncio.serve(app, config)
+
+#------------PARSING CONFIG-------------
+config = configparser.ConfigParser()
+dir_path = os.path.dirname(os.path.realpath(__file__))
+config.read(dir_path + '/config.ini')
+is_lastfm = config.getboolean('Last_Fm', 'Enable')
+API_SECRET = config.get('Last_Fm', 'Api_secret')
+os.environ['LAST_FM_API_SECRET'] = API_SECRET
+API_KEY = config.get('Last_Fm', 'Api_key')
+username = config.get('Last_Fm', 'Username')
+password_hash = pylast.md5(config.get('Last_Fm', 'Password'))
+
+lcd_columns = config.getint('Lcd', 'Columns')
+lcd_rows = config.getint('Lcd', 'Rows')
+
+lcd_rs = DigitalInOut(board.D26)
+lcd_en = DigitalInOut(board.D25)
+lcd_d4 = DigitalInOut(board.D10)
+lcd_d5 = DigitalInOut(board.D9)
+lcd_d6 = DigitalInOut(board.D11)
+lcd_d7 = DigitalInOut(board.D0)
+# Initialise the LCD class
+lcd = Character_LCD_Mono(
+ lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
+lcd.clear()
+lcd.cursor = False
+lcd.blink = False
+
+Button_up = Button(config.get('Buttons', 'Up'))
+Button_right = Button(config.get('Buttons', 'Right'))
+Button_left = Button(config.get('Buttons', 'Left'))
+Button_middle = Button(config.get('Buttons', 'Middle'))
+Button_down = Button(config.get('Buttons', 'Down'))
+
+
+command = 0 # 0-nothing 1-play 2-pause 3-stop 4-next 5-prev
+textb = 15
+page = 0
+MAX_PAGE = 1
+start = 0
+run = False
+dump=[0,0,0,0,0,0,0]
+
+playchar = [
+ 0b01000,
+ 0b01100,
+ 0b01110,
+ 0b01111,
+ 0b01110,
+ 0b01100,
+ 0b01000,
+ 0b00000]
+pausechar = [
+ 0b00000,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b10010,
+ 0b00000]
+stopchar = [
+ 0b00000,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b11111,
+ 0b00000,
+ 0b00000]
+lcd.create_char(0, playchar)
+lcd.create_char(1, pausechar)
+lcd.create_char(2, stopchar)
+
+def MsToTime(start, end):
+ now_secs= '0' + str(floor((start/1000)%60)) if floor((start/1000)%60) < 10 else str(floor((start/1000)%60))
+ now_min= '0' + str(floor((start/1000)/60)) if floor((start/1000)/60) < 10 else str(floor((start/1000)/60))
+ end_secs= '0' + str(floor((end/1000)%60)) if floor((end/1000)%60) < 10 else str(floor((end/1000)%60))
+ end_min= '0' + str(floor((end/1000)/60)) if floor((end/1000)/60) < 10 else str(floor((end/1000)/60))
+ Timer= now_min + ":" + now_secs + " - " + end_min + ":" + end_secs
+ return Timer
+def SearchExactTracklist(data): #function to find exalctly wchich cd was inserted
+ for x in range(0,len(data["disc"]["release-list"])):
+ for y in range(0,len(data["disc"]["release-list"][x]["medium-list"])):
+ for z in range(0,len(data["disc"]["release-list"][x]["medium-list"][y]["disc-list"])):
+ if data["disc"]["release-list"][x]["medium-list"][y]["disc-list"][z]["id"] == data["disc"]["id"]:
+ return x, y
+@timeout_decorator.timeout(5)#handling crash of Musicbrainzg
+def FetchDataMB():
+ musicbrainzngs.set_useragent("Small_diy_cd_player", "0.1", config.get('MusicBrainz', 'Mail'))
+ disc = discid.read()#id read
+ try:
+ result = musicbrainzngs.get_releases_by_discid(disc.id,includes=["artists", "recordings"]) #get data from Musicbrainz
+ return result
+ except musicbrainzngs.ResponseError: #if not available search for cdtext
+ raise ValueError("Error:can't find on musicbrainzngs")
+
+def FetchData():
+ try:
+ d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
+ drive_name = d.get_device()
+ i_tracks = d.get_num_tracks()#ilosc trackow
+ artists = ["Unknown"] * i_tracks
+ track_list = ["Unknown"] * i_tracks
+ album = "Unknown"
+ except IOError:
+ print("Problem finding a CD-ROM")
+ sys.exit(1) #if no drive exit
+
+ try:
+ result = FetchDataMB()
+ except (ValueError, timeout_decorator.timeout_decorator.TimeoutError): #if not available search for cdtext
+ print("disc not found or bad response, using cdtxt instead")
+ cdt = d.get_cdtext()
+ i_first_track = pycdio.get_first_track_num(d.cd)
+
+ for t in range(i_first_track, i_tracks + i_first_track):
+ for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
+ #print(pycdio.cdtext_field2str(i)) ##0-TITLE 1-PERFORMER 2-SONGWRITER 3-COMPOSER 4-MESSAGE 5-ARRANGER 6-ISRC 7-UPC_EAN 8-GENERE 9-DISC_ID
+ value = cdt.get(i, t)
+ if value is not None:
+ if i == 0:
+ track_list[t-1] = value
+ pass
+ elif i == 1:
+ artists[t-1] = value
+ pass
+ pass
+ pass
+ if(track_list[t-1] == "Unknown"):
+ track_list[t-1] = "Untitled-" + str(t)
+ artists[t-1] = "Unknown"
+ else: #if available pull from Musicbrainz
+ a, b=SearchExactTracklist(result)
+ if result.get("disc"):
+ artists = [result["disc"]["release-list"][a]["artist-credit-phrase"]] * i_tracks
+ album = result["disc"]["release-list"][a]["title"]
+ elif result.get("cdstub"):
+ artists = [result["cdstub"]["artist"]] * i_tracks
+ album = result["cdstub"]["title"]
+ if(len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"]) < i_tracks): #i have some albums that idk why have 1 more track according to pcdio than it should
+ for t in range(0,len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"])):
+ track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
+ for t in range(len(result["disc"]["release-list"][a]["medium-list"][b]["track-list"]), i_tracks):
+ track_list[t]="Untitled-" + str(t+1)
+ else:
+ for t in range(0,i_tracks):
+ #print(t)
+ track_list[t]=(result["disc"]["release-list"][a]["medium-list"][b]["track-list"][t]["recording"]["title"]) #uzupelnij tracklist
+ #print(track_list)
+ if(artists[0] =="Various Artists"): #if musicbrainz returns Variouus artists check if cdtxt has better info
+ cdt = d.get_cdtext()
+ i_first_track = pycdio.get_first_track_num(d.cd)
+ for t in range(i_first_track, i_tracks + i_first_track):
+ value = cdt.get(1, t)
+ if value != "Unknown" and value is not None:
+ artists[t-1] = value
+ pass
+ print(artists, '\n', track_list, '\n', album, '\n', i_tracks)
+ return artists, track_list, album, i_tracks
+def PlayCd(conn):
+ try:
+ artists, track_list, album, i_tracks = FetchData()
+ except cdio.TrackError:
+ print("NO CD DUMBASS")
+ else:
+ instance = vlc.Instance() #uruchom vlc
+ player = instance.media_player_new()
+ medialist = instance.media_list_new()
+ listplayer = instance.media_list_player_new()
+ listplayer.set_media_player(player)
+ for i in (range(1,i_tracks+1)): #second option
+ track = instance.media_new("cdda:///dev/cdrom", (":cdda-track=" + str(i)))
+ medialist.add_media(track)
+ listplayer.set_media_list(medialist)
+
+ listplayer.play()
+ time.sleep(5)#wait to spin
+
+ last_scrobble=""
+ network = pylast.LastFMNetwork(api_key=API_KEY, api_secret=API_SECRET, username=username, password_hash=password_hash)
+ while True:
+ dump = conn.recv()
+ index = medialist.index_of_item(listplayer.get_media_player().get_media())
+ match dump:
+ case 0:
+ conn.send([index+1, i_tracks, track_list[index], artists[index], album, MsToTime(player.get_time(), player.get_length()), player.get_state()])
+ #case 1:
+ #listplayer.play()
+ case 2:
+ if(player.get_state() == vlc.State.Stopped):
+ listplayer.play()
+ else:
+ listplayer.pause()
+ case 3:
+ listplayer.stop()
+ #last_scrobble=""
+ case 4:
+ listplayer.next()
+ #last_scrobble=""
+ case 5:
+ if(player.get_position()>0.4):
+ player.set_position(0)
+ else:
+ listplayer.previous()
+ if((player.get_position()*100 > 50) and last_scrobble != track_list[index]):
+ last_scrobble= track_list[index]
+ try:
+ if album != "Unknown":
+ network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()), album=album)
+ elif track_list[index] != "Unknown" and artists[index] != "Unknown":
+ network.scrobble(artist=artists[index], title=track_list[index], timestamp=int(time.time()))
+ print("Scrobbling success: " + artists[index] + track_list[index] + album + str(time.time()))
+ except Exception as e:
+ print("Scrobbling failed: " + artists[index] + track_list[index] + album + str(time.time()))
+ print("Reason? ->")
+ print(e)
+def ShowCd(dump):
+ global textb
+ lcd.clear()
+ if(len(dump[2])>16):
+ if textb >= len(dump[2])+1:
+ textb = 16
+ TrimMessage=dump[2][textb-16:textb]
+ textb+=1
+ else:
+ TrimMessage=dump[2]
+ lcd.message=unidecode(TrimMessage) #title
+ lcd.cursor_position(0,1)
+ lcd.message=unidecode(dump[5]) # time
+ lcd.cursor_position(15,1)
+ match dump[6]:
+ case vlc.State.Playing:
+ lcd.message='\x00'
+ case vlc.State.Paused:
+ lcd.message='\x01'
+ case vlc.State.Stopped:
+ lcd.message='\x02'
+ case "playing":
+ lcd.message='\x00'
+ case "paused":
+ lcd.message='\x01'
+
+class BtPlayer(object):
+ def __new__(self):
+ bus = SystemBus()
+ manager = bus.get('org.bluez', '/')
+
+ for obj in manager.GetManagedObjects():
+ if obj.endswith('/player0') or obj.endswith('/player2') or obj.endswith('/player1'):
+ return bus.get('org.bluez', obj)
+
+ raise BtPlayer.DeviceNotFoundError
+
+ class DeviceNotFoundError(Exception):
+ def __init__(self):
+ super().__init__('No music bluetooth device was found')
+
+def next():
+ global run, command
+ match page:
+ case 0:
+ if(not run):
+ command = 4
+ else:
+ parent_conn.send(4)
+ case 1:
+
+ command = 4
+def back():
+ global run, command
+ match page:
+ case 0:
+ if(not run):
+ command = 5
+ else:
+ parent_conn.send(5)
+ case 1:
+
+ command = 5
+def stop():
+ global run, command
+ match page:
+ case 0:
+ parent_conn.send(3)
+ case 1:
+ command = 3
+def pause():
+ global run, command
+ match page:
+ case 0:
+ parent_conn.send(2)
+ case 1:
+ command = 2
+def middle():
+ global start
+ start = time.time()
+
+
+def shutdown():
+ global start, command
+ end = time.time()
+ if(end-start>2):
+ lcd.clear()
+ lcd.message="Goodbye"
+ check_call(['sudo', 'poweroff'])
+ else:
+ command = -1
+
+Button_up.when_pressed = pause
+Button_left.when_pressed = back
+Button_right.when_pressed = next
+Button_down.when_pressed = stop
+Button_middle.when_pressed = middle
+Button_middle.when_released = shutdown
+
+parent_conn, child_conn = Pipe()
+lcd.clear()
+
+
+@sio.on('request_data')
+async def handle_message(sid, data):
+ global dump
+ print(f"Received name: {data}")
+ # Send a "hello" response back to the client asynchronously
+ await sio.emit('playing_data', [dump[0], dump[1],dump[2],dump[3], dump[4],dump[5]], to=sid)
+
+async def main():
+ global command, textb, page, MAX_PAGE, start, run, dump
+ """Main function to run the server in the background and continue."""
+ # Run the server in the background
+ background_task = asyncio.create_task(run_server())
+
+ # Print a message indicating the server has started
+ print("Server has started")
+
+ # Optionally, run other code or keep the main function alive
+ try:
+ # Keep the main function running while the server is in the background
+ while True:
+ run = False
+ match command:
+ case 4:
+ page+=1
+ case 5:
+ page-=1
+ case -1:
+ run = True
+ command = 0
+ if page == -1:
+ page = MAX_PAGE
+ elif page > MAX_PAGE:
+ page = 0
+
+ match page:
+ case 0:
+ lcd.clear()
+ lcd.message = "CD Player"
+ if(run):
+ lcd.clear()
+ lcd.message = "Loading..."
+ cdplayer = Process(target=PlayCd, args=(child_conn,))
+ cdplayer.start()
+ await asyncio.sleep(5)
+ while(run):
+ if command == -1 and cdplayer.is_alive():
+ cdplayer.kill()
+ cdplayer.join()
+ run = False
+ elif cdplayer.is_alive():
+ parent_conn.send(0)#you must send to recive
+ time.sleep(0.1)
+ dump=parent_conn.recv()
+ if(dump[6] == vlc.State.Ended):
+ cdplayer.kill()
+ cdplayer.join()
+ lcd.clear()
+ run = False
+ else:
+ ShowCd(dump)
+ else:
+ run = False
+ command=0
+ await asyncio.sleep(1)
+ case 1:
+ lcd.clear()
+ lcd.message = "Bluetooth"
+ while(run):
+ try:
+ handle = BtPlayer()
+ ShowCd([1,1,handle.Track['Title'], handle.Track['Artist'], 'Untitled', MsToTime(handle.Position, handle.Track['Duration']), handle.Status])
+ match command:
+ case -1:
+ run=False
+ case 1:
+ handle.Play()
+ case 2:
+ handle.Pause()
+ case 4:
+ handle.Next()
+ case 5:
+ handle.Previous()
+ case 3:
+ handle.Stop()
+ except:
+ #print("Something crashed, try again") #dbus-monitor --address "unix:path=/run/dbus/system_bus_socket" "type='signal',sender='org.bluez'"
+ lcd.clear()
+ lcd.message = "Something\nwent wrong"
+ if(command == -1):
+ run=False
+ command = 0
+ await asyncio.sleep(1)
+
+ await asyncio.sleep(0.5)
+ except KeyboardInterrupt:
+ print("Server stopped")
+
+
+if __name__ == '__main__':
+ # Run the main function with asyncio
+ asyncio.run(main())
diff --git a/wip_webui/index.html b/wip_webui/index.html
new file mode 100644
index 0000000..4d939ab
--- /dev/null
+++ b/wip_webui/index.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+ CD Socket.IO Client
+
+
+
+
+ Server disconnected
+
+
+ Track:
...
+ Total tracks:
...
+ Title:
...
+ Artist:
...
+ Album:
...
+ Time:
...
+
+
+
+
+
+