diff --git a/scripts/Voice_Assited_Musicplayer/.gitignore b/scripts/Voice_Assited_Musicplayer/.gitignore
new file mode 100644
index 0000000..71f6e2b
--- /dev/null
+++ b/scripts/Voice_Assited_Musicplayer/.gitignore
@@ -0,0 +1,49 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+# C extensions
+*.so
+
+# Distribution / packaging
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Rope
+.ropeproject
+
+# Django stuff:
+*.log
+*.pot
+
+# Sphinx documentation
+docs/_build/
\ No newline at end of file
diff --git a/scripts/Voice_Assited_Musicplayer/README.md b/scripts/Voice_Assited_Musicplayer/README.md
new file mode 100644
index 0000000..cf2a96b
--- /dev/null
+++ b/scripts/Voice_Assited_Musicplayer/README.md
@@ -0,0 +1,33 @@
+# Voice_assisted_musicplayer
+This project contains Ai powered voice activated music player system.
+The system supports mp3,wav and mpeg audio files.
+It can also play songs according to yor emotion(files need to be stored in voice_assisted_musicplayer/Songs/[-] **folder name according to your choice**)
+It can also load music files form other directories.
+
+To run the program execute the assistant.py file and say the desired song according to your mood
+# preview
+![image](https://user-images.githubusercontent.com/115635715/195788102-1906c8b2-edd7-456b-9a10-7130bfb19704.png)
+
+![image](https://user-images.githubusercontent.com/115635715/195788334-144aab6a-bb67-42a1-a427-63ceef34a8fe.png)
+
+
+## Features of the music player:
+-backward button
+-forward button
+-pause/play button
+-progress bar
+-volume button
+-delete button
+-load file button
+
+
+## Requirements:
+pyttsx3
+SpeechRecognition
+os
+datetime
+pickle
+tkinter
+pygame
+mutagen
+time
diff --git a/scripts/Voice_Assited_Musicplayer/Songs/happy/Happy (from Despicable Me 2) G I R L - 320Kbps.mp3 b/scripts/Voice_Assited_Musicplayer/Songs/happy/Happy (from Despicable Me 2) G I R L - 320Kbps.mp3
new file mode 100644
index 0000000..f9caed2
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/Songs/happy/Happy (from Despicable Me 2) G I R L - 320Kbps.mp3 differ
diff --git a/scripts/Voice_Assited_Musicplayer/Songs/sad/Lewis Capaldi - Before You Go - Copy (2).mp3 b/scripts/Voice_Assited_Musicplayer/Songs/sad/Lewis Capaldi - Before You Go - Copy (2).mp3
new file mode 100644
index 0000000..ad56a0d
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/Songs/sad/Lewis Capaldi - Before You Go - Copy (2).mp3 differ
diff --git a/scripts/Voice_Assited_Musicplayer/assistant.py b/scripts/Voice_Assited_Musicplayer/assistant.py
new file mode 100644
index 0000000..bbe1d9c
--- /dev/null
+++ b/scripts/Voice_Assited_Musicplayer/assistant.py
@@ -0,0 +1,84 @@
+import pyttsx3
+import speech_recognition as sr
+import datetime
+import os
+from player import run
+
+engine = pyttsx3.init('sapi5')
+voices = engine.getProperty('voices')
+engine.setProperty('voice', voices[1].id)
+
+playlist = []
+
+
+def speak(audio):
+ engine.say(audio)
+ engine.runAndWait()
+
+
+def bot_answer(answer):
+ print("assistant:", answer)
+
+
+def greetings():
+ global playlist
+ hour = int(datetime.datetime.now().hour)
+ if(hour >= 0 and hour < 12):
+ speak("good morning")
+ elif hour >= 12 and hour < 18:
+ speak("good afternoon")
+ else:
+ speak("good evening")
+
+ speak("welcome to py-Musicplayer")
+ bot_answer('say playlist name to play')
+ playlist = os.listdir('Songs')
+ bot_answer(playlist)
+
+
+def action_taker():
+ r = sr.Recognizer()
+ with sr.Microphone() as source:
+ print("Listening...")
+ speak("listening")
+ r.adjust_for_ambient_noise(source, duration=5)
+ audio = r.listen(source)
+
+ try:
+ print("recognizing...")
+ speak("recognizing")
+ command = r.recognize_google(audio)
+ print(f'User:{command}\n"')
+
+ except Exception as e:
+ print(e)
+ bot_answer("Say that again please....")
+
+ return "None"
+ return command
+
+
+greetings()
+while True:
+ command = action_taker().lower()
+ song_playlist = list(map(str.lower, playlist))
+
+ if any(command in s for s in song_playlist):
+ get_ind = song_playlist.index(command)
+ playlist_name = playlist.index(command)
+ playlist_name = playlist[get_ind]
+ playlist_dir = os.path.abspath("./Songs/"+playlist_name)
+ bot_answer('Playing: '+playlist_name +
+ 'playlist for you with Musicplayer')
+ speak('playing:'+playlist_name+'playlist for you with music player')
+ print(playlist_dir)
+ run(playlist_dir)
+ elif 'stop' in command:
+ speak('good bye,have a good day')
+ bot_answer('exit')
+ engine.stop()
+ break
+ else:
+ bot_answer('did not get the playlist...')
+ speak('did not get the playlist')
+ print(playlist)
diff --git a/scripts/Voice_Assited_Musicplayer/images/image2.gif b/scripts/Voice_Assited_Musicplayer/images/image2.gif
new file mode 100644
index 0000000..5c621b0
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/images/image2.gif differ
diff --git a/scripts/Voice_Assited_Musicplayer/images/next.gif b/scripts/Voice_Assited_Musicplayer/images/next.gif
new file mode 100644
index 0000000..5fca996
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/images/next.gif differ
diff --git a/scripts/Voice_Assited_Musicplayer/images/pause.gif b/scripts/Voice_Assited_Musicplayer/images/pause.gif
new file mode 100644
index 0000000..ff7a306
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/images/pause.gif differ
diff --git a/scripts/Voice_Assited_Musicplayer/images/play.gif b/scripts/Voice_Assited_Musicplayer/images/play.gif
new file mode 100644
index 0000000..7ece421
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/images/play.gif differ
diff --git a/scripts/Voice_Assited_Musicplayer/images/previous.gif b/scripts/Voice_Assited_Musicplayer/images/previous.gif
new file mode 100644
index 0000000..e5bccfa
Binary files /dev/null and b/scripts/Voice_Assited_Musicplayer/images/previous.gif differ
diff --git a/scripts/Voice_Assited_Musicplayer/player.py b/scripts/Voice_Assited_Musicplayer/player.py
new file mode 100644
index 0000000..941ab41
--- /dev/null
+++ b/scripts/Voice_Assited_Musicplayer/player.py
@@ -0,0 +1,293 @@
+import time
+import os
+import pickle
+import tkinter as tk
+from tkinter import Label, filedialog
+from tkinter import PhotoImage
+from pygame import mixer
+from mutagen.mp3 import MP3
+import tkinter.ttk as ttk
+from tkinter import messagebox
+
+
+class Player(tk.Frame):
+ def __init__(self, song_path, master=None):
+ super().__init__(master)
+ self.master = master
+ self.song_path = song_path
+ self.pack()
+ mixer.init()
+
+ if os.path.exists('songs.pickle'):
+ with open('songs.pickle', 'rb') as f:
+ self.playlist = pickle.load(f)
+ else:
+ self.playlist = []
+
+ self.current = 0
+ self.paused = True
+ self.played = False
+ self.song_length = 0
+
+ self.page_layouts()
+ self.track_config()
+ self.control_widgets()
+ self.song_list()
+ self.retrieve_songs2()
+
+ def page_layouts(self):
+ self.track = tk.LabelFrame(self, text='Song Track',
+ font=("times new roman", 15, "bold"),
+ bg="black", fg="white", bd=5, relief=tk.GROOVE)
+ self.track.config(width=400, height=300)
+ self.track.grid(row=0, column=0, padx=1)
+
+ self.tracklist = tk.LabelFrame(self, text=f'PlayList - {str(len(self.playlist))}',
+ font=("times new roman", 12, "bold"),
+ bg="black", fg="white", bd=5, relief=tk.GROOVE)
+ self.tracklist.config(width=190, height=200)
+ self.tracklist.grid(row=0, column=1, pady=1)
+
+ self.controls = tk.LabelFrame(self,
+ font=("times new roman", 15, "bold"),
+ bg="black", fg="white", bd=2, relief=tk.GROOVE)
+ self.controls.config(width=410, height=80)
+ self.controls.grid(row=2, column=0, pady=1, padx=1)
+
+ self.music_slider = tk.LabelFrame(self,
+ font=("times new roman", 15, "bold"),
+ bg="black", fg="white", bd=5, relief=tk.GROOVE)
+ self.music_slider.config(width=410, height=80)
+ self.music_slider.grid(row=3, column=0, pady=1, padx=1)
+
+ self.func = tk.LabelFrame(self,
+ font=("times new roman", 12, "bold"),
+ bg="black", fg="white", bd=5, relief=tk.GROOVE)
+ self.func.config(width=250, height=210)
+ self.func.grid(row=3, column=1)
+
+ self.promo = tk.LabelFrame(self,
+ bg="black", fg="white", bd=5, relief=tk.GROOVE)
+ self.promo.config(width=50, height=50)
+ self.promo.grid(row=2, column=1)
+
+ def track_config(self):
+ self.views = tk.Label(self.track, image=img)
+ self.views.configure(width=400, height=240)
+ self.views.grid(row=0, column=0)
+
+ self.musictrack = tk.Label(self.track, font=("times new roman", 16, "bold"),
+ bg="white", fg="dark blue")
+ self.musictrack['text'] = 'MP3 Player'
+ self.musictrack.config(width=30, height=1)
+ self.musictrack.grid(row=1, column=0, padx=10)
+
+ def control_widgets(self):
+ self.loading = tk.Button(
+ self.controls, bg='green', fg='white', font=10)
+ self.loading['text'] = 'Load Songs'
+ self.loading['command'] = self.retrieve_songs
+ self.loading.grid(row=0, column=0, padx=10)
+
+ self.prev = tk.Button(self.controls, image=prev)
+ self.prev['command'] = self.prev_song
+ self.prev.grid(row=0, column=1)
+
+ self.pause = tk.Button(self.controls, image=pause)
+ self.pause['command'] = self.pause_song
+ self.pause.grid(row=0, column=2)
+
+ self.next = tk.Button(self.controls, image=next_)
+ self.next['command'] = self.next_song
+ self.next.grid(row=0, column=3)
+
+ self.volume = tk.DoubleVar(self)
+ self.slider = tk.Scale(self.controls, from_=0,
+ to=10, orient=tk.HORIZONTAL)
+ self.slider['variable'] = self.volume
+ self.slider.set(5)
+ mixer.music.set_volume(1)
+ self.slider['command'] = self.change_volume
+ self.slider.grid(row=0, column=4, padx=10, pady=4)
+
+ self.mu_slider = ttk.Scale(self.music_slider, from_=0, to=100,
+ orient=tk.HORIZONTAL, value=0, length=390)
+ self.mu_slider.grid(pady=20, padx=10)
+
+ self.status_bar = Label(self.music_slider, text="Time Elapsed: 0/0")
+ self.status_bar.grid(pady=1)
+
+ self.delet = tk.Button(self.func, text="Delete", bg='green', fg='white', font=15)
+ self.delet['command'] = self.delete_songs
+ self.delet.grid(row=0, column=1, padx=39, pady=29)
+
+ self.prom = tk.Label(self.promo, text="artgoblin's work", font=("times new roman", 10, "bold", "italic"),
+ bg="grey", fg="black")
+ self.prom.grid(row=0, column=2, padx=20, pady=12)
+
+ def song_list(self):
+ self.scrollbar = tk.Scrollbar(self.tracklist, orient=tk.VERTICAL)
+ self.scrollbar.grid(row=0, column=1, rowspan=5, sticky='ns')
+
+ self.list = tk.Listbox(self.tracklist, selectmode=tk.SINGLE,
+ yscrollcommand=self.scrollbar.set, selectbackground='sky blue')
+ self.enum_songs()
+ self.list.config(height=17)
+ self.list.bind('', self.play_song)
+
+ self.scrollbar.config(command=self.list.yview)
+ self.list.grid(row=0, column=0, rowspan=5)
+
+ def retrieve_songs2(self):
+ self.songlist2 = []
+ os.chdir(self.song_path)
+
+ for files in os.listdir(self.song_path):
+ try:
+ if files.endswith(".mp3"):
+
+ self.songlist2.append(files)
+ elif files.endswith(".wav"):
+
+ self.songlist2.append(files)
+ elif files.endswith(".mpeg"):
+
+ self.songlist2.append(files)
+ except:
+ pass
+
+ with open('songs2.pickle', 'wb') as f:
+ pickle.dump(self.songlist2, f)
+ self.playlist = self.songlist2
+ self.tracklist['text'] = f'PlayList - {str(len(self.playlist))}'
+ self.list.delete(0, tk.END)
+
+ self.enum_songs()
+
+ def retrieve_songs(self):
+ self.songlist = []
+
+ directory = filedialog.askdirectory()
+ for root_, dirs, files in os.walk(directory):
+ for file in files:
+ if os.path.splitext(file)[1] == '.mp3':
+ path = (root_ + '/' + file).replace('\\', '/')
+ self.songlist.append(path)
+ elif os.path.splitext(file)[1] == '.mpeg':
+ path = (root_ + '/' + file).replace('\\', '/')
+ self.songlist.append(path)
+ elif os.path.splitext(file)[1] == '.wav':
+ path = (root_ + '/' + file).replace('\\', '/')
+ self.songlist.append(path)
+
+ with open('songs.pickle', 'wb') as f:
+ pickle.dump(self.songlist, f)
+ self.playlist = self.songlist
+ self.tracklist['text'] = f'PlayList - {str(len(self.playlist))}'
+ self.list.delete(0, tk.END)
+ self.enum_songs()
+
+ def enum_songs(self):
+ for index, song in enumerate(self.playlist):
+ self.list.insert(index, os.path.basename(song))
+
+ def play_song(self, event=None):
+ if event is not None:
+ self.current = self.list.curselection()[0]
+ for i in range(len(self.playlist)):
+ self.list.itemconfigure(i, bg="white")
+
+ print(self.playlist[self.current])
+ mixer.music.load(self.playlist[self.current])
+ self.m = mixer.music.load(self.playlist[self.current])
+ self.musictrack['anchor'] = 'w'
+ self.musictrack['text'] = os.path.basename(self.playlist[self.current])
+
+ self.pause['image'] = play
+ self.paused = False
+ self.played = True
+ self.list.activate(self.current)
+ self.list.itemconfigure(self.current, bg='sky blue')
+
+ mixer.music.play()
+ self.update_progress()
+
+ def update_progress(self):
+ song_mut = MP3(self.playlist[self.current])
+ self.song_length = song_mut.info.length
+ slider_position = int(self.song_length)
+ self.mu_slider.config(to=slider_position)
+ pos_ms = mixer.music.get_pos() / 1000
+ self.mu_slider.config(value=pos_ms)
+ clock = time.strftime('%M:%S', time.gmtime(self.song_length))
+ clock2 = time.strftime('%M:%S', time.gmtime(pos_ms))
+ self.status_bar.config(text=f'Time Elapsed: {clock2} / {clock} ')
+ self.after(1000, self.update_progress)
+
+ def pause_song(self):
+ if not self.paused:
+ self.paused = True
+ mixer.music.pause()
+ self.pause['image'] = pause
+ else:
+ if self.played == False:
+ self.play_song()
+ self.paused = False
+ mixer.music.unpause()
+ self.pause['image'] = play
+
+ def prev_song(self):
+ if self.current > 0:
+ self.current -= 1
+ else:
+ self.current = 0
+ self.list.itemconfigure(self.current + 1, bg='white')
+ self.play_song()
+
+ def next_song(self):
+ if self.current < len(self.playlist) - 1:
+ self.current += 1
+ else:
+ self.current = 0
+ self.list.itemconfigure(self.current - 1, bg='white')
+ self.play_song()
+
+ def change_volume(self, event=None):
+ self.v = self.volume.get()
+ mixer.music.set_volume(self.v / 10)
+
+ def delete_songs(self, event=None):
+ items = map(int, self.list.curselection())
+ for item in items:
+ self.list.delete(item)
+ self.playlist.pop(item)
+ self.tracklist['text'] = 'Total Songs: ' + str(len( self.playlist))
+
+
+
+
+
+def run(song_path):
+ global img, prev, play, next_, pause
+ root = tk.Tk()
+ root.title('MP3 Player')
+ root.geometry("572x458")
+
+ def on_closing():
+
+ if messagebox.askokcancel("Quit", "Do you want to quit?"):
+
+ mixer.music.stop()
+ root.destroy()
+ root.protocol("WM_DELETE_WINDOW", on_closing)
+
+ os.path.join(os.path.curdir, 'file.name')
+
+ img = PhotoImage(file=os.path.join(os.path.curdir, 'images/image2.gif'))
+ next_ = PhotoImage(file=os.path.join(os.path.curdir, 'images/next.gif'))
+ prev = PhotoImage(file=os.path.join(os.path.curdir, 'images/previous.gif'))
+ play = PhotoImage(file=os.path.join(os.path.curdir, 'images/play.gif'))
+ pause = PhotoImage(file=os.path.join(os.path.curdir, 'images/pause.gif'))
+
+ app = Player(song_path, master=root)
+ app.mainloop()
\ No newline at end of file