Plotting Various Sounds on Graphs using Python and Matplotlib - GeeksforGeeks

27 Jan, 2022
In this article, we will explore the way of visualizing sounds waves using Python and Matplotlib.
 1. Matplotlib: Install Matplotlib using the below command:
pip install matplotlib
2. Numpy: Numpy gets installed automatically installed with Matplotlib. Although, if you face any import error, use the below command to install Numpy
pip install numpy
Note: If you are on Linux like me, then you might need to use pip3 instead of pip or you might create a virtual environment and run the above command.
Import matplotlib, Numpy, wave, and sys module.
Open the audio file using the wave.open() method.
Read all frames of the opened sound wave using readframes() function.
Store the frame rate in a variable using the getframrate() function.
Finally, plot the x-axis in seconds using frame rate.
Use the matplotlib.figure() function to plot the derived graph
Use labels as per the requirement.
Below is the implementation. 
Python3
# importsimport matplotlib.pyplot as pltimport numpy as npimport wave, sys # shows the sound wavesdef visualize(path: str):       # reading the audio file    raw = wave.open(path)         # reads all the frames    # -1 indicates all or max frames    signal = raw.readframes(-1)    signal = np.frombuffer(signal, dtype ="int16")         # gets the frame rate    f_rate = raw.getframerate()     # to Plot the x-axis in seconds    # you need get the frame rate    # and divide by size of your signal    # to create a Time Vector    # spaced linearly with the size    # of the audio file    time = np.linspace(        0, # start        len(signal) / f_rate,        num = len(signal)    )     # using matplotlib to plot    # creates a new figure    plt.figure(1)         # title of the plot    plt.title("Sound Wave")         # label of x-axis    plt.xlabel("Time")        # actual plotting    plt.plot(time, signal)         # shows the plot    # in new window    plt.show()     # you can also save    # the plot using    # plt.savefig('filename')  if __name__ == "__main__":       # gets the command line Value    path = sys.argv[1]     visualize(path)
Output:
So, we are done with coding, now it’s the moment of truth. Let’s check if it actually works or not. You can try out any audio file but make sure that it has to be a wav file. If you have some other file type then you can use ffmpeg to convert it to wav file. If you want then feel free to download the audio file we will be using. You can download it using this link, but do try out other files too.To run the code, you need to pass the path of the audio file in the command line. To do that type the following in your terminal:
python soundwave.py sample_audio.wav
It is important to note that name of the Python file is soundwave.py and the name of the audio file is sample_audio.wav. You need to change these according to your system. Now, a new window should have popped up and should be seeing a sound wave plot. If you have used my audio, then your plot should look something like this.
varshagumber28
adnanirshad158
Data Visualization
Python-matplotlib
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Read JSON file using Python
Adding new column to existing DataFrame in Pandas
Python map() function
How to get column names in Pandas dataframe
Python Dictionary
Taking input in Python
How to Install PIP on Windows ?
Read a file line by line in Python
Enumerate() in Python
Different ways to create Pandas Dataframe