0% found this document useful (0 votes)
30 views7 pages

DSPA - ET22BTEC046 - LAB3.ipynb - Colab

Uploaded by

pranil shah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views7 pages

DSPA - ET22BTEC046 - LAB3.ipynb - Colab

Uploaded by

pranil shah
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

7/22/24, 2:51 PM DSPA_ET22BTEC046_LAB3.

ipynb - Colab

pip install pydub ffmpeg-python

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.

import IPython.display as ipd


from pydub import AudioSegment

audio_file = "/music.wav"

# Load audio file


audio = AudioSegment.from_file(audio_file)

# Play audio using IPython.display


ipd.Audio(data=audio_file, rate=audio.frame_rate)

0:01 / 1:22

from pydub import AudioSegment


import numpy as np
import matplotlib.pyplot as plt
audio_file = "/fantastic.wav"
audio = AudioSegment.from_file(audio_file)
duration_ms = len(audio)
print(f"Duration of the audio: {duration_ms} milliseconds")

samples = audio.get_array_of_samples()

# Calculate duration (in seconds) and sample rate


duration = len(samples) / audio.frame_rate
sample_rate = audio.frame_rate

# Create a time vector spaced linearly with the duration of the audio
time = np.linspace(0, duration, num=len(samples))

# Plotting the waveform


plt.figure(figsize=(10, 4))
plt.plot(time, samples, color='b')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Audio Waveform')
plt.grid(True)
plt.show()

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

Duration of the audio: 4339 milliseconds

(b) Plot the time domain waveform with amplitude as a function of no of samples.

from pydub import AudioSegment


import numpy as np
import matplotlib.pyplot as plt

# List of audio files


audio_files = [
"/fantastic.wav",
"/music.wav",
"/oboe.wav"
]

# Initialize a list to store durations and samples of each audio file


durations = []
samples_list = []

# Loop through each audio file


for audio_file in audio_files:
# Load audio file
audio = AudioSegment.from_file(audio_file)

# Calculate duration (in seconds) and sample rate


duration = len(audio) / 1000 # Convert duration to seconds
sample_rate = audio.frame_rate

# Extract raw audio data (as numpy array)


samples = np.array(audio.get_array_of_samples())

# Store duration and samples


durations.append(duration)
samples_list.append(samples)

# Plotting the waveform for each audio signal


plt.figure(figsize=(15, 10))

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

(c) Plot the corresponding spectrogram of the signal

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

# List of audio files


audio_files = [
"/fantastic.wav",
"/oboe.wav",
"/music.wav"
]

# Initialize lists to store durations and samples of each audio file


durations = []
samples_list = []

# Loop through each audio file


for audio_file in audio_files:
# Load audio file
audio = AudioSegment.from_file(audio_file)

# Calculate duration (in seconds) and sample rate


duration = len(audio) / 1000 # Convert duration to seconds
sample_rate = audio.frame_rate

# Extract raw audio data (as numpy array)


samples = np.array(audio.get_array_of_samples())

# Store duration and samples


durations.append(duration)
samples_list.append(samples)

# Plotting the spectrogram for each audio signal


plt.figure(figsize=(10, 6))

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.

import IPython.display as ipd


from pydub import AudioSegment

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}")

# Prompt user to choose an audio file


choice = int(input("Enter your choice (1-3): ")) - 1 # Subtract 1 to match index

if choice < 0 or choice >= len(audio_files):


print("Invalid choice. Please choose a number between 1 and 3.")
return

# Load selected audio file


audio_file = audio_files[choice]
audio = AudioSegment.from_file(audio_file)

# Play audio using IPython.display


return ipd.Audio(data=audio_file, rate=audio.frame_rate)

# 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

Choose an audio file to play:


1: /music.wav
2: /oboe.wav
3: /fantastic.wav
Enter your choice (1-3): 2

0:01 / 0:02

(e) Input the Speech signal using microphone and perform the above process

import IPython.display as ipd


from pydub import AudioSegment

audio_file = "/pranil.wav"

# Load audio file


audio = AudioSegment.from_file(audio_file)

# Play audio using IPython.display


ipd.Audio(data=audio_file, rate=audio.frame_rate)

0:02 / 0:04

from pydub import AudioSegment


import numpy as np
import matplotlib.pyplot as plt
audio_file = "/pranil.wav"
audio = AudioSegment.from_file(audio_file)
duration_ms = len(audio)
print(f"Duration of the audio: {duration_ms} milliseconds")

samples = audio.get_array_of_samples()

# Calculate duration (in seconds) and sample rate


duration = len(samples) / audio.frame_rate
sample_rate = audio.frame_rate

# Create a time vector spaced linearly with the duration of the audio
time = np.linspace(0, duration, num=len(samples))

# Plotting the waveform


plt.figure(figsize=(10, 4))
plt.plot(time, samples, color='b')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Audio Waveform')
plt.grid(True)
plt.show()

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

Duration of the audio: 4800 milliseconds

from pydub import AudioSegment


import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# List of audio files


audio_files = [
"/pranil.wav"
]

# Initialize lists to store durations and samples of each audio file


durations = []
samples_list = []

# Loop through each audio file


for audio_file in audio_files:
# Load audio file
audio = AudioSegment.from_file(audio_file)

# Calculate duration (in seconds) and sample rate


duration = len(audio) / 1000 # Convert duration to seconds
sample_rate = audio.frame_rate

# Extract raw audio data (as numpy array)


samples = np.array(audio.get_array_of_samples())

# Store duration and samples


durations.append(duration)
samples_list.append(samples)

https://colab.research.google.com/drive/10hNM-QiWZCSknm9v49nXRXHuJaHWEML4?authuser=3#scrollTo=la4RB8soOwhM&printMode=true 7/7

You might also like