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 time
import 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

Popular Posts