Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13.7
8 changes: 7 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "yami-music-player"
version = "1.0.2"
version = "1.0.5"
description="An open-source music player with simple UI"
readme = "README.md"
requires-python = ">=3.9"
Expand Down Expand Up @@ -49,3 +49,9 @@ yami = ["./yami/data/*"]
[project.scripts]
yami = "yami.main:entry"

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true

3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
customtkinter-fix-locale-scaling==5.2.2
mutagen==1.47.0
Pillow==11.3.0
Pillow==12.0.0
pygame==2.6.1
spotdl==4.4.3
tk
3 changes: 3 additions & 0 deletions run.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from yami.main import entry

entry()
602 changes: 225 additions & 377 deletions uv.lock

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions vlc_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import vlc

media = vlc.Media(
r"/Users/mith/Music/Music/Media.localized/Music/The Avalanches/Since I Left You (20th Anniversary Deluxe Edition)/1-05 Avalanche Rock.m4a"
)
player = vlc.MediaPlayer()
player.set_media(media)
inst: vlc.Instance = player.get_instance()
player.play()
import time

time.sleep(0.5)
print(media.get_meta(1))
print(media.get_meta(0))


print(media.get_meta(15))
while player.is_playing():
time.sleep(0.5)
60 changes: 18 additions & 42 deletions yami/control.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import tkinter as tk
import logging
import customtkinter as ctk
from .util import BUTTON_WIDTH, PlayerState
import vlc
from .util import BUTTON_WIDTH


class ControlBar(ctk.CTkFrame):
Expand All @@ -16,12 +17,11 @@ def __init__(
super().__init__(parent, corner_radius=10, fg_color="#121212")

# SETUP
self.music_player = parent
self.parent = parent
self.pause_icon = parent.pause_icon
self.play_icon = parent.play_icon
self.prev_icon = parent.prev_icon
self.next_icon = parent.next_icon
self.play_next_command = parent.play_next_song
self.title_max_chars = 40

# WIDGETS
Expand All @@ -36,7 +36,7 @@ def __init__(
)
self.next_button = ctk.CTkButton(
self,
command=self.play_next_command,
command=self.parent.play_next_song,
width=BUTTON_WIDTH,
text="",
corner_radius=10,
Expand All @@ -47,7 +47,7 @@ def __init__(
text="",
width=BUTTON_WIDTH,
corner_radius=10,
command=self.play_previous,
command=self.parent.play_previous,
image=self.prev_icon,
)
self.music_title_label = ctk.CTkLabel(
Expand All @@ -71,58 +71,33 @@ def __init__(
self.grid_columnconfigure(4, weight=0)

# PLACEMENT
self.music_title_label.grid(
row=0, column=0, sticky="w", padx=5, pady=10
)
self.music_title_label.grid(row=0, column=0, sticky="w", padx=5, pady=10)
self.playback_label.grid(row=0, column=1, sticky="w", padx=5, pady=10)
self.prev_button.grid(row=0, column=2, sticky="nsew", padx=5, pady=10)
self.play_button.grid(row=0, column=3, sticky="nsew", padx=5, pady=10)
self.next_button.grid(row=0, column=4, sticky="nsew", padx=5, pady=10)
logging.debug("initialized control bar")

def play_pause(self, event=None):
"""Plays Or Pauses The Music"""

if self.music_player.STATE == PlayerState.PLAYING:
self.music_player.music.pause()
self.music_player.STATE = PlayerState.PAUSED
logging.info("paused")
if self.parent.music_list_player.get_state() == vlc.State.Playing:
self.parent.music_list_player.pause()
logging.debug("paused")
else:
self.music_player.music.unpause()
self.music_player.STATE = PlayerState.PLAYING
logging.info("resumed")
self.update_play_button(self.music_player.STATE)
self.parent.music_list_player.play()
logging.debug("resumed")
self.update_play_button()

def update_play_button(self, state):
def update_play_button(self):
"""Switches Play/Pause Icon"""

if state == PlayerState.PLAYING:
if self.parent.music_list_player.get_state() == vlc.State.Playing:
self.play_button.configure(image=self.pause_icon)
logging.debug("updated play button to pause")
else:
self.play_button.configure(image=self.play_icon)

def play_previous(self, event=None):
"""Play Previous Song/Goto Last Song"""

if not self.music_player.playlist:
return

# PLAY FROM END
if self.music_player.playlist_index == 0:
logging.info("playing from end")
self.music_player.playlist_index = (
len(self.music_player.playlist) - 1
)
# PLAY PREVIOUS
else:
self.music_player.playlist_index -= 1
logging.info("playing previous")
self.music_player.load_and_play_song(self.music_player.playlist_index)

# UPDATE SELECTION
self.music_player.playlist_frame.song_list.selection_clear(0, tk.END)
self.music_player.playlist_frame.song_list.select_set(
self.music_player.playlist_index
)
logging.debug("updated play button to play")

# TRUNCATOR
def set_music_title(self, title, artist):
Expand All @@ -132,6 +107,7 @@ def set_music_title(self, title, artist):
truncated_title = title[: self.title_max_chars - 3] + "..."
else:
truncated_title = title
logging.debug("truncated title been set to %s", title)
self.music_title_label.configure(
text=truncated_title + " - " + artist.replace("/", ",")
)
2 changes: 2 additions & 0 deletions yami/cover_art.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Frame For Cover Art"""

import customtkinter as ctk
import logging


class CoverArtFrame(ctk.CTkFrame):
Expand All @@ -22,3 +23,4 @@ def __init__(self, parent):
self.cover_art_label.grid(
sticky="nsew",
)
logging.debug("initialized covert art frame")
7 changes: 5 additions & 2 deletions yami/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@

"""add sys args and logs"""

logging.getLogger().setLevel(logging.INFO)
logging.getLogger().setLevel(logging.DEBUG)


def entry():
app = MusicPlayer()
app.mainloop()

if __name__=="__main__":

if __name__ == "__main__":
entry()
Loading
Loading