DSPA - ET22BTEC046 - LAB3.ipynb - Colab
DSPA - ET22BTEC046 - LAB3.ipynb - Colab
ipynb - Colab
Collecting pydub
Downloading pydub-0.25.1-py2.py3-none-any.whl (32 kB)
Collecting ffmpeg-python
Downloading ffmpeg_python-0.2.0-py3-none-any.whl (25 kB)
Requirement already satisfied: future in /usr/local/lib/python3.10/dist-packages (from ffmpeg-python) (0.18.3)
Installing collected packages: pydub, ffmpeg-python
Successfully installed ffmpeg-python-0.2.0 pydub-0.25.1
(a) Load a short audio file using the inbuilt function in Python.
audio_file = "/music.wav"
0:01 / 1:22
samples = audio.get_array_of_samples()
# Create a time vector spaced linearly with the duration of the audio
time = np.linspace(0, duration, num=len(samples))
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 1/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
(b) Plot the time domain waveform with amplitude as a function of no of samples.
for i in range(len(audio_files)):
plt.subplot(len(audio_files), 1, i+1)
plt.plot(np.linspace(0, durations[i], num=len(samples_list[i])), samples_list[i], color='b')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title(f'Audio Signal {i+1} Waveform')
plt.grid(True)
plt.tight_layout()
plt.show()
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 2/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 3/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
from pydub import AudioSegment
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
for i in range(len(audio_files)):
# Compute spectrogram using scipy.signal.spectrogram
f, t, Sxx = signal.spectrogram(samples_list[i], fs=sample_rate, nperseg=1024, noverlap=512)
# Plot spectrogram
plt.subplot(len(audio_files), 1, i+1)
plt.pcolormesh(t, f, 10 * np.log10(Sxx), shading='gouraud') # Convert to dB and use gouraud shading
plt.colorbar(label='Intensity (dB)')
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [s]')
plt.title(f'Spectrogram of Audio Signal {i+1}')
plt.ylim(0, 10000) # Limit y-axis to 0-10kHz for better visualization
plt.tight_layout()
plt.show()
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 4/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
(d) Analyse the waveform to obtain the signal duration, sampling rate and number of samples.
def play_audio(audio_files):
# Print options for the user
print("Choose an audio file to play:")
for i, file in enumerate(audio_files):
print(f"{i+1}: {file}")
# Example usage:
if __name__ == "__main__":
audio_files = [
"/music.wav",
"/oboe.wav",
"/fantastic.wav"
]
audio_widget = play_audio(audio_files)
if audio_widget:
display(audio_widget)
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 5/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
0:01 / 0:02
(e) Input the Speech signal using microphone and perform the above process
audio_file = "/pranil.wav"
0:02 / 0:04
samples = audio.get_array_of_samples()
# Create a time vector spaced linearly with the duration of the audio
time = np.linspace(0, duration, num=len(samples))
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 6/7
7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.ipynb - Colab
https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 7/7