Introduction
Plotting and visualizing an audio file is one of the most important processes in audio analysis. Audio analysis is the process of transforming, exploring, and interpreting audio signals recorded by digital devices so as to extract insights from the audio data.
In this article, we are going to plot a waveform of an audio file with matplotlib.
Prerequisites
- Python installed
- Numpy installed
- Matplotlib installed
- Background in data analysis
Importing module and libraries
As a first step, let's import the modules and libraries that we will need.
import wave
import matplotlib.pyplot as plt
import numpy as np
We will use wave module and numpy to preprocess the audio. We will use matplotlib for plotting the audio.
Loading the Audio file
The audio file that we will use is a wave file.
Let's load the wave file that we want to plot
obj = wave.open('audio_file.wav', 'rb')
Getting Audio parameters
Let's print out the audio parameters such as number of channels, sample width, etc.
We will use .getparams()
method of the wave module
print('Parameters:', obj.getparams())
Output: Parameters: _wave_params(nchannels=1, sampwidth=2, framerate=22050, nframes=81585, comptype='NONE', compname='not compressed')
Now let's get the parameters that we will need for plotting the audio.
- Sample frequency, this is the number of samples per second
sample_freq = obj.getframerate()
- Number of samples, this is the total number of samples or frames in the audio file
n_samples = obj.getnframes()
- Signal wave, this is the wave amplitude which is the sound intensity.
signal_wave = obj.readframes(-1)
- Audio length, this is the duration of the audio.
duration = n_samples/sample_freq
Creating numpy objects
Let's create a numpy object from the signal_wave. This will be plotted on the y-axis.
signal_array = np.frombuffer(signal_wave, dtype=np.int16)
Let's create a numpy object from duration. This will be plotted on the x-axis
time = np.linspace(0, duration, num=n_samples)
Creating an audio plot
plt.figure(figsize=(15, 5))
plt.plot(time, signal_array)
plt.title('Audio Plot')
plt.ylabel(' signal wave')
plt.xlabel('time (s)')
plt.xlim(0, time) #limiting the x axis to the audio time
plt.show()
Output:
Conclusion
In this article, we've learnt how to plot a waveform of an audio file. Apart from plotting the waveform, another plot we can get from an audio file is frequency spectrum. For the frequency spectrum, we plot sample frequency against time. To learn how to plot a frequency spectrum, checkout this link.
Credits
Audio Processing Basics(Assembly AI)
Audio Analysis(altexsoft)
Top comments (3)
Really neat tutorial, thanks for posting! I love all the different things you can do with matplotlib, lots of fun projects to do with it
what kind of insight you usually get from audios?
An example is sentimental and emotional insights