Music Player - R. D. Gadekar
PROGRAM BY R.D.GADEKAR
This is a mp3 player designed with Python Tkinter with key binding for easy to use.
Here is some Screenshot ::

Source Code ::
#CODE BY R.D.GADEKAR
import timeimport random
import os
import rdg
import threading
import time
import tkinter.messagebox
from tkinter import *
from tkinter import filedialog
from tkinter import ttk
from ttkthemes import themed_tk as tk
from mutagen.mp3 import MP3
from pygame import mixer#CODE BY R.D.GADEKAR
import os
import eyed3
colour_bg_list=["deep pink","green2","chartreuse2","maroon1","magenta2","red2","DeepPink2","DarkOrchid2","lawn green","dodger blue","deep sky blue","cyan","coral","tomato","red","hot pink","firebrick1","purple1","RoyalBlue1","turquoise1"]
current_1=random.choice(colour_bg_list)
print(current_1)
current_2=random.choice(colour_bg_list)
print(current_2)#CODE BY R.D.GADEKAR
drives=["f://"]
drivess = []
#CODE BY R.D.GADEKAR
def fileF(dirr):
global mediafiles, dirs
filemain = (os.listdir(dirr))
for v in range(len(filemain)):
i = filemain[v]
if os.path.isfile(dirr + "//" + i):
if (i.endswith(".mp3") and len(i) > 19):
mediafiles_path.append(dirr + "//" + i)
mediafiles.append(i)
else:
if os.path.isdir(dirr + "//" + i):
dirs += 1
fileF(dirr + "//" + i)
for letter in drivess:
try:#CODE BY R.D.GADEKAR
mpathlist = os.listdir(letter)
path = letter
for ii in mpathlist:
try:
if (path + "//" + ii).__contains__('.Bin'):
continue
if (path + "//" + ii).__contains__('.BIN'):
continue
if (path + "//" + ii).__contains__('System Volume Information'):
continue#CODE BY R.D.GADEKAR
if os.path.isdir(path + "//" + ii):
fileF(path + "//" + ii)
except Exception as e:
pass
except Exception as e:
pass
root = tk.ThemedTk()
root.get_themes()#CODE BY R.D.GADEKAR
root.geometry("900x360")
root.minsize(900, 360)
root.set_theme("scidpurple")
# root.set_theme(root.get_themes()[2])
# print(root.get_themes()[2])
statusbar = Label(root, text="Welcome to Melody", relief=SUNKEN, anchor=W, font='Times 13 italic')
statusbar.pack(side=BOTTOM, fill=X)
menubar = Menu(root)
root.config(menu=menubar)
#root.config(bg="black")
root.config(bg=current_1)
mixer.init()
subMenu = Menu(menubar, tearoff=0)#CODE BY R.D.GADEKAR
playlist = []
playlist_for_search = []
path_for_index = []
total_songs = StringVar()
searched_songs = StringVar()
entry_var = StringVar()
total_songs.set("Total : 0")
searched_songs.set("Match : 0")
total_songs.set(("Total : " + str(len(mediafiles))))
def browse_file():
global filename_path
filename_path = filedialog.askopenfilename()
add_to_playlist(filename_path)#CODE BY R.D.GADEKAR
mixer.music.queue(filename_path)
def add_to_playlist(filename):
filename = os.path.basename(filename)
index = 0
playlistbox.insert(index, filename)
playlist.insert(index, filename_path)
index += 1
menubar.add_cascade(label="File", menu=subMenu)
subMenu.add_command(label="Exit", command=root.destroy)
#CODE BY R.D.GADEKAR
def about_us():
tkinter.messagebox.showinfo('About Melody',
'This is a music player build using Python Tkinter by Rameshwar Gadekar')
def keyboard_shortcut_fun():
print("This is keyboard shortcut function")
root1=tk.ThemedTk()
root1.title("Keyboard Shortcuts ")
root1.set_theme("radiance")
root1.minsize(300,100)
root1.maxsize(300,100)
root1.geometry("300x100")
l1=Listbox(root1)
l1.pack(side=LEFT,fill="both",expand=True)#CODE BY R.D.GADEKAR
l2=Listbox(root1)
l2.pack(side=RIGHT,fill="both",expand=True)
funn=["Enter","Control + M","Control + E","Escape","Spacebar"]
descr=["Search, Play Music","Mute Sound","Exit the Program","Stop Music","Play Pause Resume"]
for i in range(0,len(funn)):
l1.insert(i,funn[i])
l2.insert(i,descr[i])
root1.mainloop()
subMenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Help", menu=subMenu)
subMenu.add_command(label="About Us", command=about_us)
subMenu.add_command(label="Keyboard Shortcuts", command=keyboard_shortcut_fun)
mixer.init()
root.title("Melody V - RDG")
root.iconbitmap(r'melody.ico')
playlist = mediafiles_path
def play_back_setter(n):#CODE BY R.D.GADEKAR
pass
def on_search(Event=None):
global path_for_index
# print(e1.get())#CODE BY R.D.GADEKAR
playlist_for_search = []
path_for_index = []
playlistbox.delete(0, len(mediafiles_path))
for i in range(0, len(mediafiles)):
if mediafiles[i].lower().__contains__(entry_var.get()):
playlist_for_search.append(mediafiles[i])
playlistbox.insert(i, mediafiles[i])
path_for_index.append(mediafiles_path[i])
playlist = path_for_index
searched_songs.set(str(len(path_for_index)))
searched_songs.set("Match : " + str(len(path_for_index)))
# print("THis is playlist in on search",playlist)
Frame_ = Frame(root)
Frame_.pack(side=TOP, fill="x", pady=0)
Label(Frame_, text="SEARCH :", borderwidth=4, font="verdana 12 ", fg="white", bg="orchid1").pack(side=LEFT, fill=BOTH)
e1 = Entry(Frame_, textvariable=entry_var, font="verdana 16 italic", bg="steelblue1", fg="lawn green")
e1.bind("<Control-s>", on_search)
e1.bind("<Return>",on_search)
e1.pack(fill="both", expand=True, side=LEFT)#CODE BY R.D.GADEKAR
e1.insert(0, "SEARCH SONGS")
e1.configure(state=DISABLED)
def on_click(Event=None):
root.unbind('<space>')
e1.configure(state=NORMAL)
e1.config(font="verdana 16 bold")
e1.delete(0, END)
on_click_id = e1.bind('<Button-1>', on_click)
def clear_btn(Event=None):
entry_var.set("")#CODE BY R.D.GADEKAR
on_search()
clear = Button(Frame_, text="CLEAR", command=clear_btn, border=0, font="verdana 12 bold", bg="olive drab2",
fg="hot pink")
root.bind("<Control-c>", clear_btn)
clear.pack(side=LEFT, fill=X)
Label(Frame_, textvariable=searched_songs, borderwidth=4, font="verdana 12 ", fg="white", bg="orchid1").pack(side=LEFT,fill=BOTH)
Label(Frame_, textvariable=total_songs, font="verdana 12 ", bg="orchid1", fg="white").pack(side=LEFT, fill=BOTH)
def foc_out(Event=None):
e1.delete(0, END)#CODE BY R.D.GADEKAR
e1.config(font="verdana 16 italic",bg=colour_bg_list[random.randint(0,len(colour_bg_list)-1)])
e1.insert(0, "SEARCH SONGS")
e1.configure(state=DISABLED)
root.bind('<space>',on_spacebar)
e1.bind("<FocusIn>", on_click)
e1.bind("<FocusOut>", foc_out)
search_btn = Button(Frame_, text="SEARCH", command=on_search, border=0, font="verdana 12 bold", bg="coral1", fg="cyan2")
search_btn.pack(side=LEFT, fill=X)
percentBar = ttk.Progressbar(root, length=200, orient="horizontal", mode="determinate")
percentBar.pack(side=BOTTOM, fill=X, padx=0)
percentBar["maximum"] = 100
#CODE BY R.D.GADEKAR
def start_count(t):
global paused, play_songg
current_time = 0
while current_time <= t and mixer.music.get_busy():
if paused:
continue
else:
mins, secs = divmod(current_time, 60)
mins = round(mins)
secs = round(secs)#CODE BY R.D.GADEKAR
timeformat = '{:02d}:{:02d}'.format(mins, secs)
currenttimelabel['text'] = timeformat + " "
# scalex.config(from_=0, to=lene)
# scalex.set(current_time)
percentBar["value"] = current_time
time.sleep(1)
current_time += 1
started = False
play_musicvar = "0"
def play_music(Event=None):
global paused, started, playlist
if paused:#CODE BY R.D.GADEKAR
mixer.music.unpause()
statusbar['text'] = "Music Resumed"
paused = False
else:
try:
if len(path_for_index) != 0:
playlist = path_for_index
stop_music()
time.sleep(1)
selected_songg = playlistbox.curselection()
selected_song = int(selected_songg[0])
play_it = playlist[selected_song]
mixer.music.load(play_it)#CODE BY R.D.GADEKAR
mixer.music.play()
started = True
statusbar['text'] = "Playing music" + ' - ' + os.path.basename(play_it)
show_details(play_it, selected_song)
except Exception as e:
try:
selected_song = 0
play_it = playlist[selected_song]
mixer.music.load(play_it)
mixer.music.play()
started = True
statusbar['text'] = "Playing music" + ' - ' + os.path.basename(play_it)
show_details(play_it, selected_song)
except Exception as e:
print(e)
tkinter.messagebox.showerror('File not found', 'Melody could not find the file. Please check again.')
leftframe = Frame(root)
leftframe.pack(expand=-True, fill="both", side=LEFT)#CODE BY R.D.GADEKAR
scrol_y = Scrollbar(leftframe, orient=VERTICAL)
popup_menu = tkinter.Menu(leftframe, tearoff=0)
def delete_selected():
print("This is delete")
pass
def select_all():
aa=playlistbox.curselection()[0]
if len(path_for_index)==0:
os.startfile(mediafiles_path[aa])
else:
os.startfile(path_for_index[aa])
def popup(event):
try:
popup_menu.tk_popup(event.x_root+50, event.y_root+10, 0)#CODE BY R.D.GADEKAR
finally:
popup_menu.grab_release()
popup_menu.add_command(label="Delete",
command=delete_selected)
popup_menu.add_command(label="Start On VLC",
command=select_all)
playlistbox = Listbox(leftframe, font="verdana 14", bd=1, yscrollcommand=scrol_y.set, fg="white", bg=current_2)
playlistbox.bind("<Button-3>", popup)
playlistbox.bind("<Double-1>", play_music)
playlistbox.bind("<Return>", play_music)
scrol_y.pack(side=RIGHT, fill=Y)
scrol_y.config(command=playlistbox.yview)
playlistbox.pack(expand=-True, fill="both", side=TOP)
songtracks = mediafiles
def del_song():
selected_song = playlistbox.curselection()
selected_song = int(selected_song[0])
playlistbox.delete(selected_song)#CODE BY R.D.GADEKAR
playlist.pop(selected_song)
rightframe = Frame(root, bg=current_1)
rightframe.pack(pady=30)
topframe = Frame(rightframe, bg=current_1)
topframe.pack()
lengthlabel = Label(topframe, text=' --:--', font="verdana 16 bold", bg=current_1, fg="white")
lengthlabel.pack(side=RIGHT, expand=True, fill="x")
currenttimelabel = Label(topframe, text='--:--', font="verdana 16 bold", bg=current_1, fg="white")
currenttimelabel.pack(expand=True, side=LEFT)
lene = ""
def show_details(play_song, indexxx):
global play_songg, lene
file_data = os.path.splitext(play_song)
if file_data[1] == '.mp3':
audio = MP3(play_song)#CODE BY R.D.GADEKAR
total_length = audio.info.length
lene = total_length
else:
a = mixer.Sound(play_song)
total_length = a.get_length()
lene = total_length
mins, secs = divmod(total_length, 60)
mins = round(mins)
secs = round(secs)
timeformat = '{:02d}:{:02d}'.format(mins, secs)
lengthlabel['text'] = " " + timeformat
lengthlabel11['text'] = "Total lengh : " + timeformat
lengthlabel12['text'] = "Format" + ' : ' + "mp3"
percentBar["maximum"] = total_length
sizevar.set("Size : " + str(rdg.fsize(mediafiles_path[indexxx])) + " MB")
aa = eyed3.load(mediafiles_path[indexxx])
len_file = len(str(aa.tag.artist))
artistvar.set("Artist : " + str(aa.tag.artist))
t1 = threading.Thread(target=start_count, args=(total_length,))
t1.start()
# file=open("rdg1.txt",'w')
# for i in range(len(mediafiles_path)):
# try:
# file.write((mediafiles_path[i])+",")
# except Exception as e:
# print(e)
# file.close()
def stop_music(Event=None):
mixer.music.stop()
started = False
statusbar['text'] = "Music Stopped"
lengthlabel['text'] = " 00:00"
currenttimelabel['text'] = "00:00 "
artistvar.set("Artist :--")
lengthlabel11['text'] = "Total lengh : --"
lengthlabel12['text'] = "Format" + ' : ' + "--"
sizevar.set("Size : " + "-- MB")
def on_spacebar(Event=None):
global paused
if started == True:
if paused:
mixer.music.unpause()
paused = False
else:
if not paused:
pause_music()
else:
play_music("2")
paused = False
def on_enter(Event=None):
play_music()
def pause_music(Event=None):
global paused
paused = True
mixer.music.pause()
statusbar['text'] = "Music Paused"
def rewind_music(Event=None):
play_music()
statusbar['text'] = "Music Rewinded"
def set_vol(val, Event=None):
volume = float(val) / 100
mixer.music.set_volume(volume)
muted = FALSE
def mute_music(Event=None):
global muted
if muted: # Unmute the music
mixer.music.set_volume(0.7)
volumeBtn.configure(image=volumePhoto)
scale.set(75)
muted = FALSE
else: # mute the music
mixer.music.set_volume(0)
volumeBtn.configure(image=mutePhoto)
scale.set(0)
muted = TRUE
middleframe = Frame(rightframe, bg=current_1)
middleframe.pack(pady=30, padx=30)
playPhoto = PhotoImage(file='play.png')
playBtn = Button(middleframe, image=playPhoto, command=play_music, background=current_1, border=0,
highlightbackground="black"
, activeforeground="black")
playBtn.pack(side=LEFT, fill="both", expand=True, padx=20)
playBtn.pack()
stopPhoto = PhotoImage(file='stop.png')
stopBtn = Button(middleframe, image=stopPhoto, command=stop_music, background=current_1, border=0,
activeforeground="black")
stopBtn.pack(side=LEFT, fill="both", expand=True, padx=20)
pausePhoto = PhotoImage(file='pause.png')
pauseBtn = Button(middleframe, image=pausePhoto, command=pause_music, background=current_1, border=0,
activeforeground="black")
pauseBtn.pack(side=LEFT, fill="both", expand=True, padx=20)
bottomframe = Frame(rightframe, bg=current_1)
bottomframe.pack(side=BOTTOM, expand=True, fill="both")
rewindPhoto = PhotoImage(file='rewind.png')
rewindBtn = Button(bottomframe, image=rewindPhoto, command=rewind_music, background=current_1, border=0,
activeforeground="black")
rewindBtn.pack(side=LEFT, fill="both", expand=True)
mutePhoto = PhotoImage(file='mute.png')
volumePhoto = PhotoImage(file='volume.png')
volumeBtn = Button(bottomframe, image=volumePhoto, command=mute_music, background=current_1, border=0,
activeforeground="black")
volumeBtn.pack(side=LEFT, fill="both", expand=True)
scale = ttk.Scale(bottomframe, from_=0, to=100, orient=HORIZONTAL, command=set_vol)
# scale.set(70)
scale = Scale(bottomframe, sliderlength=12, sliderrelief="flat", from_=0, to=100, orient=HORIZONTAL, troughcolor=current_2,
fg='white', highlightbackground=current_1, command=set_vol, activebackground="black", bg=current_1)
scale.set(70)
mixer.music.set_volume(0.7)
scale.pack(side=LEFT, expand=True, fill="both", padx=0)
boframe = Frame(rightframe, bg=current_1)
boframe.pack(side=BOTTOM, expand=True, fill="both")
boframe1 = Frame(boframe, bg=current_1)
boframe1.pack(side=BOTTOM, expand=True, fill="both")
boframe2 = Frame(boframe, bg=current_1)
boframe2.pack(side=BOTTOM, expand=True,fill="both")
boframe3 = Frame(boframe, bg=current_1)
boframe3.pack(side=BOTTOM, expand=True, fill="both")
boframe4 = Frame(boframe, bg=current_1)
boframe4.pack(side=BOTTOM, expand=True, fill="both")
boframe5 = Frame(boframe, bg=current_1)
boframe5.pack(side=BOTTOM, expand=True, fill="both")
sizevar = StringVar()
artistvar = StringVar()
lengthlabel1111 = Label(boframe1, textvariable=sizevar, font="verdana 12 italic", bg=current_1, fg="white")
lengthlabel1111.pack(side=LEFT,pady=5)
sizevar.set("Size : --:--")
artishL = Label(boframe2, textvariable=artistvar, font="verdana 12 italic", bg=current_1, fg="white")
artishL.pack(side=LEFT, pady=5)
artistvar.set('Artist : --:--')
lengthlabel12 = Label(boframe3, text='Format : --:--', font="verdana 12 italic", bg=current_1, fg="white")
lengthlabel12.pack(side=LEFT, pady=5)
lengthlabel11 = Label(boframe4, text='Total Length : --:--', font="verdana 12 italic", bg=current_1, fg="white")
lengthlabel11.pack(side=LEFT, pady=5)
for track in songtracks:
playlistbox.insert(END, track)
root.bind('<space>', on_spacebar)
bottomframe.bind('<Control-space>', on_spacebar)
root.bind('<Z>', on_enter)
root.bind("<Control-m>", mute_music)
root.bind('<Next>', lambda x: print("This is Next"))
root.bind('<Control-e>', lambda x: root.destroy())
root.bind('<Escape>', stop_music)
root.protocol("WM_DELETE_WINDOW", on_closing)
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
EXE Package ::
https://drive.google.com/file/d/18m1UKY74ezy1ZGUgFy_qcGouazuAxu6k/view?up=drivesdk
#########################R.D.Gadekar##################
E-Mail ::: rameshwarrdg@gmail.com
Instagram handle :: rameshwar_d_g
|| THANK YOU ||



Comments
Post a Comment