sip-assign2
May 7, 2025
ASSIGNMENT2
[5]: from google.colab import drive
drive.mount('/content/drive')
--------------------------------------------------------------------------ValueError
Traceback (most recent call last)
<ipython-input-5-d5df0069828e> in <cell line: 0>()
1 from google.colab import drive
----> 2 drive.mount('/content/drive')
/usr/local/lib/python3.11/dist-packages/google/colab/drive.py in␣
↪mount(mountpoint, force_remount, timeout_ms, readonly)
98 def mount(mountpoint, force_remount=False, timeout_ms=120000,␣
↪readonly=False):
99
"""Mount your Google Drive at the specified mountpoint path."""
--> 100
return _mount(
101
102
mountpoint,
force_remount=force_remount,
/usr/local/lib/python3.11/dist-packages/google/colab/drive.py in␣
↪_mount(mountpoint, force_remount, timeout_ms, ephemeral, readonly)
197
raise ValueError('Mountpoint must not be a symlink')
198
if _os.path.isdir(mountpoint) and _os.listdir(mountpoint):
--> 199
raise ValueError('Mountpoint must not already contain files')
200
if not _os.path.isdir(mountpoint) and _os.path.exists(mountpoint):
201
raise ValueError('Mountpoint must either be a directory or not␣
↪exist')
ValueError: Mountpoint must not already contain files
QUESTION 1
[7]: import os
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal
1
import soundfile as sf
import pandas as pd
from tabulate import tabulate
import time
def create_directories(base_dir, output_dir):
os.makedirs(output_dir, exist_ok=True)
print(f"Output directory: {output_dir}")
return output_dir
def list_audio_files(directory, extension='.wav'):
return [f for f in os.listdir(directory) if f.endswith(extension)]
def design_band_stop_filter(samples, fs, low_freq, high_freq):
nyquist = 0.5 * fs
norm_low = low_freq / nyquist
norm_high = high_freq / nyquist
if norm_high >= 1.0:
norm_high = 0.99
if norm_low >= norm_high:
print(f"Invalid filter: low={low_freq:.2f} Hz, high={high_freq:.2f} Hz")
return samples
b, a = signal.butter(2, [norm_low, norm_high], btype='bandstop')
try:
filtered_audio = signal.filtfilt(b, a, samples, padtype='odd', padlen=3)
except ValueError:
print(f"Warning: Using lfilter for {low_freq}-{high_freq}Hz")
filtered_audio = signal.lfilter(b, a, samples)
return filtered_audio
def process_audio_files(source_dir, dest_dir, sample_rate, freq_range):
audio_files = list_audio_files(source_dir)
if not audio_files:
print(f"No audio files found in {source_dir}")
return {}
quality_ratings = {}
for audio_file in audio_files:
print(f"\n{'='*50}\nProcessing: {audio_file}")
file_path = os.path.join(source_dir, audio_file)
2
audio_samples, actual_sample_rate = sf.read(file_path)
duration = len(audio_samples)/actual_sample_rate
print(f"Audio: {len(audio_samples)} samples, {duration:.2f} seconds")
quality_ratings[audio_file] = {}
for center_freq in freq_range:
high_freq = center_freq + 1000
filtered_audio = design_band_stop_filter(
audio_samples, actual_sample_rate, center_freq, high_freq
)
output_filename = f"{os.path.
↪splitext(audio_file)[0]}_notch_{int(center_freq)}-{int(high_freq)}Hz.wav"
output_path = os.path.join(dest_dir, output_filename)
sf.write(output_path, filtered_audio, actual_sample_rate)
print(f"\nFiltered: {center_freq}Hz - {high_freq}Hz")
print(f"Original: '{audio_file}' | Filtered: '{output_filename}'")
while True:
try:
quality_rating = int(input(f"Rate quality (0=different,␣
↪10=identical): "))
if 0 <= quality_rating <= 10:
break
else:
print("Enter 0-10")
except ValueError:
print("Invalid input")
quality_ratings[audio_file][center_freq] = quality_rating
return quality_ratings
def display_rating_table(ratings, freq_range):
df = pd.DataFrame(index=ratings.keys(),␣
↪columns=[f"{int(f)}-{int(f+1000)}Hz" for f in freq_range])
for file, file_ratings in ratings.items():
for freq, rating in file_ratings.items():
df.loc[file, f"{int(freq)}-{int(freq+1000)}Hz"] = rating
df.loc['Average'] = df.mean(numeric_only=True)
print("\n\nAudio Quality Ratings (higher is better):")
print(tabulate(df, headers='keys', tablefmt='grid', showindex=True))
3
timestamp = time.strftime("%Y%m%d-%H%M%S")
csv_filename = f"quality_ratings_{timestamp}.csv"
df.to_csv(csv_filename)
print(f"\nRatings saved to {csv_filename}")
return df
def plot_ratings(ratings_df, output_dir):
df_without_avg = ratings_df.drop('Average', errors='ignore')
plt.figure(figsize=(12, 8))
for file in df_without_avg.index:
freqs = [int(col.split('-')[0]) for col in ratings_df.columns]
plt.plot(freqs, df_without_avg.loc[file], marker='o', label=file)
plt.plot(freqs, ratings_df.loc['Average'], 'k--', linewidth=2,␣
label='Average')
↪
plt.xlabel('Center Frequency (Hz)')
plt.ylabel('Quality Rating')
plt.title('Audio Quality Ratings by Frequency Band')
plt.grid(True)
plt.legend()
plt.tight_layout()
plot_filename = os.path.join(output_dir, 'quality_ratings_plot.png')
plt.savefig(plot_filename)
print(f"Plot saved to {plot_filename}")
plt.close()
def main():
source_directory = "/content/que1"
destination_directory = "/content/drive/MyDrive/sip_assign_2que_1"
sampling_rate = 16000
student_id = 9578956
print(f"Student ID: {student_id}")
freq_increment = 500
lower_freq = 500
upper_freq = 7000
frequency_range = np.arange(lower_freq, upper_freq + freq_increment,␣
↪freq_increment)
output_dir = create_directories(source_directory, destination_directory)
4
ratings = process_audio_files(source_directory, output_dir, sampling_rate,␣
frequency_range)
ratings_df = display_rating_table(ratings, frequency_range)
plot_ratings(ratings_df, output_dir)
↪
print("\nAudio processing complete!")
if __name__ == "__main__":
main()
Student ID: 9578956
Output directory: /content/drive/MyDrive/sip_assign_2que_1
==================================================
Processing: Speaker_3.wav
Audio: 190464 samples, 4.32 seconds
Warning: Using lfilter for 500-1500Hz
Filtered: 500Hz - 1500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_500-1500Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 1000-2000Hz
Filtered: 1000Hz - 2000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_1000-2000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 1500-2500Hz
Filtered: 1500Hz - 2500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_1500-2500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 2000-3000Hz
Filtered: 2000Hz - 3000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_2000-3000Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 2500-3500Hz
Filtered: 2500Hz - 3500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_2500-3500Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 3000-4000Hz
Filtered: 3000Hz - 4000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_3000-4000Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 3500-4500Hz
5
Filtered: 3500Hz - 4500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_3500-4500Hz.wav'
Rate quality (0=different, 10=identical): 5
Warning: Using lfilter for 4000-5000Hz
Filtered: 4000Hz - 5000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_4000-5000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 4500-5500Hz
Filtered: 4500Hz - 5500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_4500-5500Hz.wav'
Rate quality (0=different, 10=identical): 5
Warning: Using lfilter for 5000-6000Hz
Filtered: 5000Hz - 6000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_5000-6000Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 5500-6500Hz
Filtered: 5500Hz - 6500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_5500-6500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 6000-7000Hz
Filtered: 6000Hz - 7000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_6000-7000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 6500-7500Hz
Filtered: 6500Hz - 7500Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_6500-7500Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 7000-8000Hz
Filtered: 7000Hz - 8000Hz
Original: 'Speaker_3.wav' | Filtered: 'Speaker_3_notch_7000-8000Hz.wav'
Rate quality (0=different, 10=identical): 8
==================================================
Processing: Speaker_2.wav
Audio: 194745 samples, 4.42 seconds
Warning: Using lfilter for 500-1500Hz
Filtered: 500Hz - 1500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_500-1500Hz.wav'
Rate quality (0=different, 10=identical): 7
6
Warning: Using lfilter for 1000-2000Hz
Filtered: 1000Hz - 2000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_1000-2000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 1500-2500Hz
Filtered: 1500Hz - 2500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_1500-2500Hz.wav'
Rate quality (0=different, 10=identical): 5
Warning: Using lfilter for 2000-3000Hz
Filtered: 2000Hz - 3000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_2000-3000Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 2500-3500Hz
Filtered: 2500Hz - 3500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_2500-3500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 3000-4000Hz
Filtered: 3000Hz - 4000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_3000-4000Hz.wav'
Rate quality (0=different, 10=identical): 5
Warning: Using lfilter for 3500-4500Hz
Filtered: 3500Hz - 4500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_3500-4500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 4000-5000Hz
Filtered: 4000Hz - 5000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_4000-5000Hz.wav'
Rate quality (0=different, 10=identical): 4
Warning: Using lfilter for 4500-5500Hz
Filtered: 4500Hz - 5500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_4500-5500Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 5000-6000Hz
Filtered: 5000Hz - 6000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_5000-6000Hz.wav'
Rate quality (0=different, 10=identical): 5
Warning: Using lfilter for 5500-6500Hz
Filtered: 5500Hz - 6500Hz
7
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_5500-6500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 6000-7000Hz
Filtered: 6000Hz - 7000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_6000-7000Hz.wav'
Rate quality (0=different, 10=identical): 10
Warning: Using lfilter for 6500-7500Hz
Filtered: 6500Hz - 7500Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_6500-7500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 7000-8000Hz
Filtered: 7000Hz - 8000Hz
Original: 'Speaker_2.wav' | Filtered: 'Speaker_2_notch_7000-8000Hz.wav'
Rate quality (0=different, 10=identical): 7
==================================================
Processing: Speaker_4.wav
Audio: 159744 samples, 3.62 seconds
Warning: Using lfilter for 500-1500Hz
Filtered: 500Hz - 1500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_500-1500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 1000-2000Hz
Filtered: 1000Hz - 2000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_1000-2000Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 1500-2500Hz
Filtered: 1500Hz - 2500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_1500-2500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 2000-3000Hz
Filtered: 2000Hz - 3000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_2000-3000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 2500-3500Hz
Filtered: 2500Hz - 3500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_2500-3500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 3000-4000Hz
8
Filtered: 3000Hz - 4000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_3000-4000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 3500-4500Hz
Filtered: 3500Hz - 4500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_3500-4500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 4000-5000Hz
Filtered: 4000Hz - 5000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_4000-5000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 4500-5500Hz
Filtered: 4500Hz - 5500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_4500-5500Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 5000-6000Hz
Filtered: 5000Hz - 6000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_5000-6000Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 5500-6500Hz
Filtered: 5500Hz - 6500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_5500-6500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 6000-7000Hz
Filtered: 6000Hz - 7000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_6000-7000Hz.wav'
Rate quality (0=different, 10=identical): 10
Warning: Using lfilter for 6500-7500Hz
Filtered: 6500Hz - 7500Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_6500-7500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 7000-8000Hz
Filtered: 7000Hz - 8000Hz
Original: 'Speaker_4.wav' | Filtered: 'Speaker_4_notch_7000-8000Hz.wav'
Rate quality (0=different, 10=identical): 8
==================================================
Processing: Speaker_5.wav
Audio: 256216 samples, 5.34 seconds
9
Filtered: 500Hz - 1500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_500-1500Hz.wav'
Rate quality (0=different, 10=identical): 8
Filtered: 1000Hz - 2000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_1000-2000Hz.wav'
Rate quality (0=different, 10=identical): 9
Filtered: 1500Hz - 2500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_1500-2500Hz.wav'
Rate quality (0=different, 10=identical): 6
Filtered: 2000Hz - 3000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_2000-3000Hz.wav'
Rate quality (0=different, 10=identical): 6
Filtered: 2500Hz - 3500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_2500-3500Hz.wav'
Rate quality (0=different, 10=identical): 9
Filtered: 3000Hz - 4000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_3000-4000Hz.wav'
Rate quality (0=different, 10=identical): 5
Filtered: 3500Hz - 4500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_3500-4500Hz.wav'
Rate quality (0=different, 10=identical): 8
Filtered: 4000Hz - 5000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_4000-5000Hz.wav'
Rate quality (0=different, 10=identical): 8
Filtered: 4500Hz - 5500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_4500-5500Hz.wav'
Rate quality (0=different, 10=identical): 7
Filtered: 5000Hz - 6000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_5000-6000Hz.wav'
Rate quality (0=different, 10=identical): 7
Filtered: 5500Hz - 6500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_5500-6500Hz.wav'
Rate quality (0=different, 10=identical): 10
Filtered: 6000Hz - 7000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_6000-7000Hz.wav'
Rate quality (0=different, 10=identical): 7
10
Filtered: 6500Hz - 7500Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_6500-7500Hz.wav'
Rate quality (0=different, 10=identical): 8
Filtered: 7000Hz - 8000Hz
Original: 'Speaker_5.wav' | Filtered: 'Speaker_5_notch_7000-8000Hz.wav'
Rate quality (0=different, 10=identical): 8
==================================================
Processing: Speaker_1.wav
Audio: 144384 samples, 3.27 seconds
Warning: Using lfilter for 500-1500Hz
Filtered: 500Hz - 1500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_500-1500Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 1000-2000Hz
Filtered: 1000Hz - 2000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_1000-2000Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 1500-2500Hz
Filtered: 1500Hz - 2500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_1500-2500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 2000-3000Hz
Filtered: 2000Hz - 3000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_2000-3000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 2500-3500Hz
Filtered: 2500Hz - 3500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_2500-3500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 3000-4000Hz
Filtered: 3000Hz - 4000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_3000-4000Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 3500-4500Hz
Filtered: 3500Hz - 4500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_3500-4500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 4000-5000Hz
11
Filtered: 4000Hz - 5000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_4000-5000Hz.wav'
Rate quality (0=different, 10=identical): 6
Warning: Using lfilter for 4500-5500Hz
Filtered: 4500Hz - 5500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_4500-5500Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 5000-6000Hz
Filtered: 5000Hz - 6000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_5000-6000Hz.wav'
Rate quality (0=different, 10=identical): 9
Warning: Using lfilter for 5500-6500Hz
Filtered: 5500Hz - 6500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_5500-6500Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 6000-7000Hz
Filtered: 6000Hz - 7000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_6000-7000Hz.wav'
Rate quality (0=different, 10=identical): 8
Warning: Using lfilter for 6500-7500Hz
Filtered: 6500Hz - 7500Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_6500-7500Hz.wav'
Rate quality (0=different, 10=identical): 7
Warning: Using lfilter for 7000-8000Hz
Filtered: 7000Hz - 8000Hz
Original: 'Speaker_1.wav' | Filtered: 'Speaker_1_notch_7000-8000Hz.wav'
Rate quality (0=different, 10=identical): 6
Audio Quality Ratings (higher is better):
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
|
|
500-1500Hz |
1000-2000Hz |
1500-2500Hz |
2000-3000Hz |
2500-3500Hz |
3000-4000Hz |
3500-4500Hz |
4000-5000Hz |
4500-5500Hz |
5000-6000Hz |
5500-6500Hz |
6000-7000Hz |
6500-7500Hz |
7000-8000Hz |
+===============+==============+===============+===============+===============+
===============+===============+===============+===============+===============+
===============+===============+===============+===============+===============+
| Speaker_3.wav |
7 |
9 |
8 |
7 |
6 |
8 |
5 |
9 |
5 |
6 |
8 |
9 |
6 |
8 |
12
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
7 |
5 |
| Speaker_2.wav |
9 |
7 |
8 |
5 |
9 |
4 |
7 |
5 |
9 |
10 |
8 |
7 |
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
| Speaker_4.wav |
9 |
6 |
8 |
9 |
9 |
9 |
8 |
9 |
6 |
8 |
8 |
10 |
8 |
8 |
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
| Speaker_5.wav |
8 |
9 |
6 |
6 |
9 |
5 |
8 |
8 |
7 |
7 |
10 |
7 |
8 |
8 |
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
| Speaker_1.wav |
7 |
8 |
8 |
9 |
9 |
6 |
8 |
6 |
9 |
9 |
8 |
8 |
7 |
6 |
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
| Average
|
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
nan |
+---------------+--------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
---------------+---------------+---------------+---------------+---------------+
Ratings saved to quality_ratings_20250507-104701.csv
Plot saved to /content/drive/MyDrive/sip_assign_2que_1/quality_ratings_plot.png
Audio processing complete!
Summary of Findings The experiment investigated the perceptual effects of bandstop filtering on
speech recordings by applying filters with a 1000Hz bandwidth at various center frequencies. Five
speakers’ recordings were evaluated, and quality ratings were assigned on a scale of 0-10 (where
10 indicates no perceptible difference between filtered and original recordings). Best Performing
Frequency Bands The analysis revealed that different frequency bands yielded optimal results for
different speakers:
Speaker 1: 2000-3000Hz and 2500-3500Hz (tied at score 9)
Speaker 2: 6000-7000Hz (score 10)
13
Speaker 3: 1000-2000Hz and 4000-5000Hz (tied at score 9)
Speaker 4: 6000-7000Hz (score 10)
Speaker 5: 5500-6500Hz (score 10)
Overall Performance Analysis
The highest average score across all speakers was achieved by the 6000-7000Hz band (8.80) Two
speakers had their best performance with the 6000-7000Hz bandstop filter The overall average
quality score was 7.57
QUESTION 2
QUESTION 3
[ ]: import matplotlib.pyplot as plt
import collections
import seaborn as sns
[ ]: def read_dict(fpath):
phon_dict = {}
with open(fpath, 'r', encoding='latin1') as file:
for line in file:
if line.startswith(';;;'):
continue
parts = line.strip().split()
phon_dict[parts[0]] = parts[1:]
return phon_dict
[ ]: def draw_cumulative_chart(phon_dict):
lengths = [len(phns) for phns in phon_dict.values()]
max_len = 30
counts = [sum(1 for ln in lengths if ln <= k) for k in range(1, max_len +␣
↪1)]
sns.set_style("whitegrid")
plt.figure(figsize=(8, 5))
sns.lineplot(x=range(1, max_len + 1), y=counts, marker='o', linewidth=2)
plt.xlabel('Max Phoneme Length', fontsize=12)
plt.ylabel('Cumulative Word Count', fontsize=12)
plt.title('Cumulative Count of Words by Phoneme Length', fontsize=14)
plt.show()
[ ]: def draw_phoneme_bar_chart(phon_dict):
phoneme_freq = collections.Counter()
14
for phns in phon_dict.values():
phoneme_freq.update(phns)
phon_list, freq_list = zip(*phoneme_freq.items())
sns.set_style("whitegrid")
plt.figure(figsize=(12, 6))
sns.barplot(x=list(phon_list), y=list(freq_list), palette="viridis")
plt.xlabel('Phoneme', fontsize=12)
plt.ylabel('Frequency', fontsize=12)
plt.title('Phoneme Frequency Distribution', fontsize=14)
plt.xticks(rotation=90)
plt.show()
[ ]: def extract_phonemes(sentence, phon_dict):
return [phon_dict.get(word, ['UNKNOWN']) for word in sentence.upper().
↪split()]
[ ]: def count_matching_lengths(phon_dict):
return sum(1 for word, phns in phon_dict.items() if len(word) == len(phns))
[ ]: phoneme_dict = read_dict('cmudict-0.7b.txt')
draw_cumulative_chart(phoneme_dict)
draw_phoneme_bar_chart(phoneme_dict)
print("Phonemic sequence:", extract_phonemes("Hello world", phoneme_dict))
print("Words where word length == phoneme length:",␣
↪count_matching_lengths(phoneme_dict))
15
<ipython-input-4-6086b7fb4467>:8: FutureWarning:
Passing `palette` without assigning `hue` is deprecated and will be removed in
v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same
effect.
sns.barplot(x=list(phon_list), y=list(freq_list), palette="viridis")
Phonemic sequence: [['HH', 'AH0', 'L', 'OW1'], ['W', 'ER1', 'L', 'D']]
Words where word length == phoneme length: 32222
QUESTION 4
[ ]: !pip install g2p-en torch
Requirement already satisfied: g2p-en in /usr/local/lib/python3.11/dist-packages
(2.1.0)
Requirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages
(2.5.1+cu124)
Requirement already satisfied: numpy>=1.13.1 in /usr/local/lib/python3.11/distpackages (from g2p-en) (1.26.4)
Requirement already satisfied: nltk>=3.2.4 in /usr/local/lib/python3.11/distpackages (from g2p-en) (3.9.1)
Requirement already satisfied: inflect>=0.3.1 in /usr/local/lib/python3.11/distpackages (from g2p-en) (7.5.0)
Requirement already satisfied: distance>=0.1.3 in
16
/usr/local/lib/python3.11/dist-packages (from g2p-en) (0.1.3)
Requirement already satisfied: filelock in /usr/local/lib/python3.11/distpackages (from torch) (3.17.0)
Requirement already satisfied: typing-extensions>=4.8.0 in
/usr/local/lib/python3.11/dist-packages (from torch) (4.12.2)
Requirement already satisfied: networkx in /usr/local/lib/python3.11/distpackages (from torch) (3.4.2)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages
(from torch) (3.1.5)
Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages
(from torch) (2024.10.0)
Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)
Requirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)
Requirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)
Requirement already satisfied: nvidia-cudnn-cu12==9.1.0.70 in
/usr/local/lib/python3.11/dist-packages (from torch) (9.1.0.70)
Requirement already satisfied: nvidia-cublas-cu12==12.4.5.8 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.5.8)
Requirement already satisfied: nvidia-cufft-cu12==11.2.1.3 in
/usr/local/lib/python3.11/dist-packages (from torch) (11.2.1.3)
Requirement already satisfied: nvidia-curand-cu12==10.3.5.147 in
/usr/local/lib/python3.11/dist-packages (from torch) (10.3.5.147)
Requirement already satisfied: nvidia-cusolver-cu12==11.6.1.9 in
/usr/local/lib/python3.11/dist-packages (from torch) (11.6.1.9)
Requirement already satisfied: nvidia-cusparse-cu12==12.3.1.170 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.3.1.170)
Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in
/usr/local/lib/python3.11/dist-packages (from torch) (2.21.5)
Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)
Requirement already satisfied: nvidia-nvjitlink-cu12==12.4.127 in
/usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)
Requirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.11/distpackages (from torch) (3.1.0)
Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/distpackages (from torch) (1.13.1)
Requirement already satisfied: mpmath<1.4,>=1.1.0 in
/usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch) (1.3.0)
Requirement already satisfied: more_itertools>=8.5.0 in
/usr/local/lib/python3.11/dist-packages (from inflect>=0.3.1->g2p-en) (10.6.0)
Requirement already satisfied: typeguard>=4.0.1 in
/usr/local/lib/python3.11/dist-packages (from inflect>=0.3.1->g2p-en) (4.4.2)
Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages
(from nltk>=3.2.4->g2p-en) (8.1.8)
Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages
17
(from nltk>=3.2.4->g2p-en) (1.4.2)
Requirement already satisfied: regex>=2021.8.3 in
/usr/local/lib/python3.11/dist-packages (from nltk>=3.2.4->g2p-en) (2024.11.6)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages
(from nltk>=3.2.4->g2p-en) (4.67.1)
Requirement already satisfied: MarkupSafe>=2.0 in
/usr/local/lib/python3.11/dist-packages (from jinja2->torch) (3.0.2)
[ ]: nltk.download('cmudict')
nltk.download('punkt')
[nltk_data] Downloading package cmudict to /root/nltk_data…
[nltk_data]
Package cmudict is already up-to-date!
[nltk_data] Downloading package punkt to /root/nltk_data…
[nltk_data]
Package punkt is already up-to-date!
[ ]: True
[ ]: import nltk
nltk.download('averaged_perceptron_tagger')
nltk.download('cmudict')
nltk.download('punkt')
nltk.download('maxent_ne_chunker')
nltk.download('words')
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]
/root/nltk_data…
[nltk_data]
Package averaged_perceptron_tagger is already up-to[nltk_data]
date!
[nltk_data] Downloading package cmudict to /root/nltk_data…
[nltk_data]
Package cmudict is already up-to-date!
[nltk_data] Downloading package punkt to /root/nltk_data…
[nltk_data]
Package punkt is already up-to-date!
[nltk_data] Downloading package maxent_ne_chunker to
[nltk_data]
/root/nltk_data…
[nltk_data]
Package maxent_ne_chunker is already up-to-date!
[nltk_data] Downloading package words to /root/nltk_data…
[nltk_data]
Package words is already up-to-date!
[ ]: True
[ ]: import nltk
nltk.download('averaged_perceptron_tagger_eng')
nltk.download('cmudict')
[nltk_data] Downloading package averaged_perceptron_tagger_eng to
[nltk_data]
/root/nltk_data…
[nltk_data]
Unzipping taggers/averaged_perceptron_tagger_eng.zip.
18
[nltk_data] Downloading package cmudict to /root/nltk_data…
[nltk_data]
Package cmudict is already up-to-date!
[ ]: True
[ ]: !pip install --upgrade nltk
Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages
(3.9.1)
Requirement already satisfied: click in /usr/local/lib/python3.11/dist-packages
(from nltk) (8.1.8)
Requirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages
(from nltk) (1.4.2)
Requirement already satisfied: regex>=2021.8.3 in
/usr/local/lib/python3.11/dist-packages (from nltk) (2024.11.6)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages
(from nltk) (4.67.1)
[ ]: from g2p_en import G2p
g2p = G2p()
words = [
"wonderfully", "magnificent", "experience", "understand", "incredible",
"opportunity", "successful", "university", "enthusiastic", "appreciation"
]
phoneme_sequences = {w: g2p(w) for w in words}
for word, phonemes in phoneme_sequences.items():
print(f"{word}: {' '.join(phonemes)}")
wonderfully: W AH1 N D ER0 F AH0 L IY0
magnificent: M AE0 G N IH1 F AH0 S AH0 N T
experience: IH0 K S P IH1 R IY0 AH0 N S
understand: AH2 N D ER0 S T AE1 N D
incredible: IH0 N K R EH1 D AH0 B AH0 L
opportunity: AA2 P ER0 T UW1 N AH0 T IY0
successful: S AH0 K S EH1 S F AH0 L
university: Y UW2 N AH0 V ER1 S AH0 T IY0
enthusiastic: IH0 N TH UW2 Z IY0 AE1 S T IH0 K
appreciation: AH0 P R IY2 SH IY0 EY1 SH AH0 N
Question 6
[ ]: import numpy as np
import librosa
import librosa.display
19
import scipy.signal as sig
import matplotlib.pyplot as plt
import os
[ ]: def calc_ltas(audio_file, win_dur=0.02, sample_rate=16000, fft_size=1024):
audio_data, sr = librosa.load(audio_file, sr=sample_rate)
frame_len = int(win_dur * sr)
freqs, power_spec = sig.welch(audio_data, fs=sr, nperseg=frame_len,␣
↪nfft=fft_size)
log_power = 10 * np.log10(power_spec + 1e-10)
return freqs, log_power
[ ]: def visualize_ltas(freq_vals, ltas_collection, legends, graph_title):
plt.figure(figsize=(10, 5))
for spectrum, legend in zip(ltas_collection, legends):
plt.plot(freq_vals, spectrum, label=legend, linewidth=2)
plt.xlabel("Frequency (Hz)")
plt.ylabel("Power (dB)")
plt.title(graph_title)
plt.grid(True)
plt.legend()
plt.show()
[ ]: speech_files = [
"/content/q5_recording/RecordingFilename_Avish_Fakirde_Group1.wav", "/
↪content/q5_recording/RecordingFilename_Avish_Fakirde_Group2.wav",
"/content/q5_recording/RecordingFilename_Avish_Fakirde_Group3.wav", "/
↪content/q5_recording/RecordingFilename_Avish_Fakirde_Group4.wav",
"/content/q5_recording/RecordingFilename_Avish_Fakirde_Group5.wav", "/
↪content/q5_recording/RecordingFilename_Avish_Fakirde_Group6.wav"
]
noise_files = [
"/content/q5_noise/street-and-traffic-ambience-london-52033.wav", "/content/
↪q5_noise/the-rain-and-the-city-traffic-190469.wav",
"/content/q5_noise/indian-wedding-dhols-52474.wav",
"/content/q5_noise/flea-market-ambience-hungary-19196.wav"
]
speech_ltas, noise_ltas = [], []
labels_speech, labels_noise = [], []
[ ]: for idx, clip in enumerate(speech_files):
if os.path.exists(clip):
freq_vals, spectrum = calc_ltas(clip)
speech_ltas.append(spectrum)
20
labels_speech.append(f"Speech {idx+1}")
for idx, clip in enumerate(noise_files):
if os.path.exists(clip):
_, spectrum = calc_ltas(clip)
noise_ltas.append(spectrum)
labels_noise.append(f"Noise {idx+1}")
visualize_ltas(freq_vals, speech_ltas, labels_speech, "LTAS - Speech␣
↪Recordings")
visualize_ltas(freq_vals, noise_ltas, labels_noise, "LTAS - Noise Recordings")
for idx, noise_spectrum in enumerate(noise_ltas):
combined_spectra = speech_ltas + [noise_spectrum]
combined_labels = labels_speech + [labels_noise[idx]]
visualize_ltas(freq_vals, combined_spectra, combined_labels, f"LTAS -␣
↪Speech vs {labels_noise[idx]}")
21
22
23
[ ]: def closest_ltas_match(speech_data, noise_data):
min_diff = float("inf")
best_match = None
for noise_idx, noise_spec in enumerate(noise_data):
for speech_idx, speech_spec in enumerate(speech_data):
diff = np.linalg.norm(noise_spec - speech_spec)
if diff < min_diff:
min_diff = diff
best_match = (noise_idx, speech_idx)
return best_match
[ ]: matched_noise, matched_speech = closest_ltas_match(speech_ltas, noise_ltas)
print(f"Most Similar LTAS: Speech {matched_speech+1} � Noise {matched_noise+1}")
Most Similar LTAS: Speech 2 � Noise 4
NOISE 4 THAT IS MARKET NOISE IS MATCHING
QUESTION 5
[ ]: !pip install praat-parselmouth
Collecting praat-parselmouth
Downloading praat_parselmouth-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinu
x2014_x86_64.whl.metadata (2.9 kB)
Requirement already satisfied: numpy>=1.7.0 in /usr/local/lib/python3.11/distpackages (from praat-parselmouth) (2.0.2)
Downloading praat_parselmouth-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2
014_x86_64.whl (10.8 MB)
24
���������������������������������������� 10.8/10.8 MB
89.1 MB/s eta 0:00:00
Installing collected packages: praat-parselmouth
Successfully installed praat-parselmouth-0.4.5
[ ]: import os
import numpy as np
import librosa
import librosa.display
import scipy.signal
import scipy.fftpack
import scipy.io.wavfile as wav
import parselmouth
def formant_vals(x):
y = parselmouth.Sound(x)
z = y.to_formant_burg(time_step=0.01, max_number_of_formants=5)
a1, a2, a3 = [], [], []
for b in np.arange(0, y.duration, 0.01):
p = z.get_value_at_time(1, b)
q = z.get_value_at_time(2, b)
r = z.get_value_at_time(3, b)
if p and q and r:
a1.append(p)
a2.append(q)
a3.append(r)
return np.mean(a1), np.mean(a2), np.mean(a3)
def freq_shift(u, v, src_f, tgt_f):
s1, s2, s3 = src_f
t1, t2, t3 = tgt_f
g = np.fft.rfft(u)
h = np.fft.rfftfreq(len(u), d=1/v)
def remap(k):
if k < s1:
return k * (t1 / s1)
elif k < s2:
return k * (t2 / s2)
elif k < s3:
return k * (t3 / s3)
else:
return k
new_g = np.zeros_like(g, dtype=complex)
for i, j in enumerate(h):
m = remap(j)
idx = np.argmin(np.abs(h - m))
new_g[idx] = g[i]
25
z = np.fft.irfft(new_g)
return z
in_dir = "/content/q5_input"
out_dir = "/content/drive/MyDrive/sip_assign_2que_5"
os.makedirs(out_dir, exist_ok=True)
files = [f for f in os.listdir(in_dir) if f.endswith(".wav")]
f_vals = {}
for f in files:
p = os.path.join(in_dir, f)
f_vals[f] = formant_vals(p)
for s in files:
s_path = os.path.join(in_dir, s)
rate, audio = wav.read(s_path)
audio = audio.astype(np.float32)
for t in files:
if s == t:
continue
tgt_f = f_vals[t]
mod_audio = freq_shift(audio, rate, f_vals[s], tgt_f)
name = f"{s[:-4]}_to_{t}"
save_path = os.path.join(out_dir, name + ".wav")
wav.write(save_path, rate, mod_audio.astype(np.int16))
print(f"Converted {s} → {t} and saved to {save_path}")
print("All vowel transformations completed!")
Converted IY.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_O.wav.wav
Converted IY.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_AE.wav.wav
Converted IY.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_ER.wav.wav
Converted IY.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_I.wav.wav
Converted IY.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_UH.wav.wav
Converted IY.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_AH.wav.wav
Converted IY.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_OW.wav.wav
Converted IY.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_U.wav.wav
26
Converted IY.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_A.wav.wav
Converted IY.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_OO.wav.wav
Converted IY.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/IY_to_E.wav.wav
Converted O.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_IY.wav.wav
Converted O.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_AE.wav.wav
Converted O.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_ER.wav.wav
Converted O.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_I.wav.wav
Converted O.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_UH.wav.wav
Converted O.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_AH.wav.wav
Converted O.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_OW.wav.wav
Converted O.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_U.wav.wav
Converted O.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_A.wav.wav
Converted O.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_OO.wav.wav
Converted O.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/O_to_E.wav.wav
Converted AE.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_IY.wav.wav
Converted AE.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_O.wav.wav
Converted AE.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_ER.wav.wav
Converted AE.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_I.wav.wav
Converted AE.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_UH.wav.wav
Converted AE.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_AH.wav.wav
Converted AE.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_OW.wav.wav
Converted AE.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_U.wav.wav
Converted AE.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_A.wav.wav
Converted AE.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_OO.wav.wav
27
Converted AE.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AE_to_E.wav.wav
Converted ER.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_IY.wav.wav
Converted ER.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_O.wav.wav
Converted ER.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_AE.wav.wav
Converted ER.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_I.wav.wav
Converted ER.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_UH.wav.wav
Converted ER.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_AH.wav.wav
Converted ER.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_OW.wav.wav
Converted ER.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_U.wav.wav
Converted ER.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_A.wav.wav
Converted ER.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_OO.wav.wav
Converted ER.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/ER_to_E.wav.wav
Converted I.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_IY.wav.wav
Converted I.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_O.wav.wav
Converted I.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_AE.wav.wav
Converted I.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_ER.wav.wav
Converted I.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_UH.wav.wav
Converted I.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_AH.wav.wav
Converted I.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_OW.wav.wav
Converted I.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_U.wav.wav
Converted I.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_A.wav.wav
Converted I.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_OO.wav.wav
Converted I.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/I_to_E.wav.wav
Converted UH.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_IY.wav.wav
28
Converted UH.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_O.wav.wav
Converted UH.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_AE.wav.wav
Converted UH.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_ER.wav.wav
Converted UH.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_I.wav.wav
Converted UH.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_AH.wav.wav
Converted UH.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_OW.wav.wav
Converted UH.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_U.wav.wav
Converted UH.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_A.wav.wav
Converted UH.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_OO.wav.wav
Converted UH.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/UH_to_E.wav.wav
Converted AH.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_IY.wav.wav
Converted AH.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_O.wav.wav
Converted AH.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_AE.wav.wav
Converted AH.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_ER.wav.wav
Converted AH.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_I.wav.wav
Converted AH.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_UH.wav.wav
Converted AH.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_OW.wav.wav
Converted AH.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_U.wav.wav
Converted AH.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_A.wav.wav
Converted AH.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_OO.wav.wav
Converted AH.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/AH_to_E.wav.wav
Converted OW.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_IY.wav.wav
Converted OW.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_O.wav.wav
Converted OW.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_AE.wav.wav
29
Converted OW.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_ER.wav.wav
Converted OW.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_I.wav.wav
Converted OW.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_UH.wav.wav
Converted OW.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_AH.wav.wav
Converted OW.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_U.wav.wav
Converted OW.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_A.wav.wav
Converted OW.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_OO.wav.wav
Converted OW.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OW_to_E.wav.wav
Converted U.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_IY.wav.wav
Converted U.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_O.wav.wav
Converted U.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_AE.wav.wav
Converted U.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_ER.wav.wav
Converted U.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_I.wav.wav
Converted U.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_UH.wav.wav
Converted U.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_AH.wav.wav
Converted U.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_OW.wav.wav
Converted U.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_A.wav.wav
Converted U.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_OO.wav.wav
Converted U.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/U_to_E.wav.wav
Converted A.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_IY.wav.wav
Converted A.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_O.wav.wav
Converted A.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_AE.wav.wav
Converted A.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_ER.wav.wav
Converted A.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_I.wav.wav
30
Converted A.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_UH.wav.wav
Converted A.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_AH.wav.wav
Converted A.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_OW.wav.wav
Converted A.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_U.wav.wav
Converted A.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_OO.wav.wav
Converted A.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/A_to_E.wav.wav
Converted OO.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_IY.wav.wav
Converted OO.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_O.wav.wav
Converted OO.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_AE.wav.wav
Converted OO.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_ER.wav.wav
Converted OO.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_I.wav.wav
Converted OO.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_UH.wav.wav
Converted OO.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_AH.wav.wav
Converted OO.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_OW.wav.wav
Converted OO.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_U.wav.wav
Converted OO.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_A.wav.wav
Converted OO.wav → E.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/OO_to_E.wav.wav
Converted E.wav → IY.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_IY.wav.wav
Converted E.wav → O.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_O.wav.wav
Converted E.wav → AE.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_AE.wav.wav
Converted E.wav → ER.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_ER.wav.wav
Converted E.wav → I.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_I.wav.wav
Converted E.wav → UH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_UH.wav.wav
Converted E.wav → AH.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_AH.wav.wav
31
Converted E.wav → OW.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_OW.wav.wav
Converted E.wav → U.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_U.wav.wav
Converted E.wav → A.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_A.wav.wav
Converted E.wav → OO.wav and saved to
/content/drive/MyDrive/sip_assign_2que_5/E_to_OO.wav.wav
All vowel transformations completed!
32
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )