One good thing about music is that when it hits you, you feel no pain. In today’s society everybody loves listening to music and many people consider it a hobby.
In order for us to listen to music freely and without any kind of disturbance from the forced ads we get from the apps available, utilizing our skills can be essential. Using Python we can create a music player app that serves the same purpose as the already existing ones only this time it’s our creation and of course ads free.
Python Music Player
The advancement in technology has led to development of many MP3 music player apps. These apps have a range of functionality and capabilities. As a result, it is hard to choose which is the best among them all.
Additionally, these MP3 music player apps will prompt you to pay a subscription fee or you will be forced to endure ads.
Fortunately, with Python and some of its libraries you can get a fully functional app with features like:
- Open music files,
- Play music,
- Pause music,
- Unpause,
- Stop music just to mention some of the common features.
In this tutorial we will be utilizing our knowledge in Python to achieve this. Now, it’s time to implement the above mentioned features.
Let’s get started.
Project Requirements
Now, before we get started with the fun part of this project which is writing the code, we need to make sure that we have every necessary tool for this task ready.
For us to work on this MP3 music player having basic understanding of Python programming language is necessary, apart from this also some basic knowledge in python libraries will be helpful (we discuss about libraries next sub-topic).
Also, make sure that you have Python installed in your machine and a code editor, too. In this case any code editor will be fine, including Pycharm, VS Code, Atom or any of your choice.
Use the command below to check whether Python is installed. This command works no matter the operating system you are using, including Windows, Mac and Linux systems:
python --version
Having ensured that we have everything set correctly from this step, we can now move to the next step that is installing necessary libraries required for this particular project.
Python Libraries Needed
In order for us to have our application up and running, we will need to make use of some Python libraries that will make it easier to develop the application by adding some functionalities and interactivity to our application. They include:
- Tkinter – Used to create a GUI interface for our application.
- Pygame – Used to include the sound libraries designed to be used with Python.
Now that we have the main libraries required, let’s get started with our development with a step by step guide through each step accompanied with an explanation of what is happening.
You can also get access to the project code available on GitHub here.
Steps to Develop MP3 Music Player App
For a successful implementation of this project we will be following the steps below:
- Install and import necessary libraries.
- Create the project layout.
- Define the music player main functions.
Step 1: Installing the libraries
To get started we need to install the pygame
library. We will use PIP to run the installation command.
pip install pygame
Similarly to install tkinter
we will make use of PIP by executing the command below:
pip install tk
Step 2: Import Important Libraries
In order for us to use the modules that we have installed, we will need to import them, specifically some packages that align with our project.
The code below allows us to do this. Remember, all the code is written in a python file, make sure you already have one created:
#importing libraries import os from tkinter import * from tkinter import Tk from tkinter import filedialog from pygame import mixer
We begin by import os
which is the functional module that will help us get data from our computers. Next, tkinter module is imported; it is the standard module which will be used to create a GUI and by adding the *
sign means we import everything within the library, filedialog
is also imported which will help in operations like opening files or directories. The import mixer
command will be used for manipulation of the song.
Step 3: Create Root Window
At this point we have everything necessary to initialize a root window for our project. The root window is going to be the layout of our app housing all components needed including different functional buttons for interactivity. With the code below we are able to set the window title and also the dimensions. (Feel free to try out different dimensions you are comfortable with).
# Create a GUI window root = Tk() root.title("Music Player") root.geometry("920x600+290+85") root.configure(background='#212121') root.resizable(False, False) mixer.init()
The root = Tk()
is used to create an instance of the tkinter frame which will help display the rot window and also manage other components of the tkinter applications. Just as the name suggests, root.title()
sets the title of the music player which will display at the top of the window (feel free to give it a title of your liking).
In order to get the window size the root.geometry()
is used, and .configure()
is used to give our window a background color. When using tkinter you are given the option to automatically resize the window size which at some point might interfere with the look of your display, now to avoid that the .resizable()
to False
. And finally we initialize the pygame mixer module by using the command mixer.init()
.
Step 4: Loading Music
First we begin by creating a function def AddMusic()
, which will allow us to pass in the code that will be used to load music to our MP3 player.
# Create a function to open a file def AddMusic(): path = filedialog.askdirectory() if path: os.chdir(path) songs = os.listdir(path) for song in songs: if song.endswith(".mp3"): Playlist.insert(END, song) def PlayMusic(): Music_Name = Playlist.get(ACTIVE) print(Music_Name[0:-4]) mixer.music.load(Playlist.get(ACTIVE)) mixer.music.play()
Under the AddMusic()
function we have different parameters set in place. First we begin by defining a variable name path which is set to ask the user to select a directory containing the music. We then make use of an if-loop statement in which the directory path
is passed, which will enable us to open any folder where music is saved.
We also have the PlayMusic()
function, which will play whichever song is selected from the existing files.
Step 5: Branding Our App
When using tkinter, we are able to gain access to multiple features, some of which include the ability to add images to our app. In our case the only image we will add for now is a logo and icon which will act as a sense of branding to our project. For this we will make use of the PhotoImage
widget which will return the passed images on our display.
# icon image_icon = PhotoImage(file="PATH_TO_LOGO") root.iconphoto(False, image_icon) Top = PhotoImage(file="PATH_TO_LOGO") Label(root, image=Top, bg="#0f1a2b").pack() # logo logo = PhotoImage(file="PATH_TO_LOGO") Label(root, image=logo, bg="#0f1a2b", bd=0).place(x=70, y=115)
NOTE: For the icon and the logo, we specified image paths to specific files, make sure you have a logo and an icon in place for this particular step.
Step 6: Creating Interactive Buttons and Labels
This particular step is where we get to design the interface of our app that includes adding the canvas to display the song being played and buttons to perform different operations, setting the fonts, colors, text position etc…
Step 6.1: Buttons
To create the buttons we use the tkinter module. Some of the useful buttons we will need at this point will include the play, pause, stop and resume button. To make the buttons look eye catchy we will be using some designed icons, each corresponding to each command it performs.
# Button ButtonPlay = PhotoImage(file="PATH_TO_IMAGE") Button(root, image=ButtonPlay, bg="#0f1a2b", bd=0, command=PlayMusic).place(x=100, y=400) ButtonStop = PhotoImage(file="PATH_TO_IMAGE") Button(root, image=ButtonStop, bg="#0f1a2b", bd=0, command=mixer.music.stop).place(x=30, y=500) ButtonResume = PhotoImage(file="PATH_TO_IMAGE") Button(root, image=ButtonResume, bg="#0f1a2b", bd=0, command=mixer.music.unpause).place(x=115, y=500) ButtonPause = PhotoImage(file="PATH_TO_IMAGE") Button(root, image=ButtonPause, bg="#0f1a2b", bd=0, command=mixer.music.pause).place(x=200, y=500)
Under each button method the same procedure is followed. We first begin by passing the corresponding name followed by the icon that explains the method, this is just for visuality. We then add some background color and invoke the mixer command which will be called when the button is clicked, like in the first case it will initialize the stop command.
Step 6.2: Labels
Under this section we add some extra functionality to enhance the look of our app. Some of the additional features include adding fonts, creating a frame which will be used to display our playlist and also adding a scrollbar.
Remember that with tkinter you can always add as many features as possible. There is no limit to the number of functionality a music app can perform.
# Label Menu = PhotoImage(file="PATH_TO_IMAGE") Label(root, image=Menu, bg="#0f1a2b").pack(padx=10, pady=50, side=RIGHT) Frame_Music = Frame(root, bd=2, relief=RIDGE) Frame_Music.place(x=330, y=350, width=560, height=250) Button(root, text="Open Folder", width=15, height=2, font=("times new roman", 12, "bold"), fg="Black", bg="#21b3de", command=AddMusic).place(x=330, y=300) Scroll = Scrollbar(Frame_Music) Playlist = Listbox(Frame_Music, width=100, font=("Times new roman", 10), bg="#333333", fg="grey", selectbackground="lightblue", cursor="hand2", bd=0, yscrollcommand=Scroll.set) Scroll.config(command=Playlist.yview) Scroll.pack(side=RIGHT, fill=Y) Playlist.pack(side=LEFT, fill=BOTH)
Now, we only have to do one more step. We just have to add the last piece of code that will execute the program.
Step 7: Run the App
To execute the app we use the mainloop()
method. What it does is, it tells Python to run the tkinter event loop until the user exits it.
# Execute Tkinter root.mainloop()
The Output
Running the above code will create a display of our MP3 music player app. An example of this display is shown below with everything set as defined in the code.
Now, let’s get add some music to the player to be sure everything is working out fine:
From the screenshots above, we have successfully uploaded music into our MP3 player. Feel free to play with different features provided.
It’s important to also highlight that with the two libraries we have used here, you can do more than just the listed features provided in our code. You can also add the next button, previous button, skip ahead button just to mention a few. To learn more about how to implement this and more, check out the official Tkinter and Pygame documentation.
Conclusion
Now you can create your own MP3 music player app using Python that is just like other softwares out there. You can also add more features that we haven’t explored yet.
There is no limitation on the design of the app. What we have just done here is a small percentage of all possible designs. You can redesign it to meet your own specification and style by adding your own icons, logo, button designs etc. It’s about time you start using your own creations.