add code to generate spectogram array and plot_data

This commit is contained in:
Joel Mathew Thomas
2025-01-06 22:11:49 +05:30
parent 3b7bac94f7
commit 08983d7e72
+34
View File
@@ -0,0 +1,34 @@
import librosa
import numpy as np
def generate_spectogram(audio_file: str, spectogram_type: str = 'mel', sr: int = 22050):
"""
Generates a spectrogram array from an audio file.
Args:
audio_file (str): Path to the input audio file.
spectrogram_type (str): Type of spectrogram ('stft', 'mel'). Default is 'mel'.
sr (int): Sampling rate for audio. Default is 22050.
Returns:
tuple: A tuple containing:
- np.ndarray: Spectrogram array (in decibels).
- dict: Metadata for plotting (sr, x_axis, y_axis).
"""
# Load the audio file
waveform, sr = librosa.load(audio_file, sr=sr)
# Create the spectogram
if spectogram_type == 'mel':
spec = librosa.feature.melspectrogram(y=waveform, sr=sr)
spec_db = librosa.power_to_db(spec, ref=np.max) # Convert to decibels
plot_data = {'sr': sr, 'x_axis': 'time', 'y_axis': 'mel'}
elif spectogram_type == 'stft':
spec = np.abs(librosa.stft(waveform))
spec_db = librosa.amplitude_to_db(spec, ref=np.max)
plot_data = {'sr': sr, 'x_axis': 'time', 'y_axis': 'log'}
else:
raise ValueError(f"Unsupported spectogram type: {spectogram_type}")
return spec_db, plot_data