Spaces:
Runtime error
Runtime error
| import librosa | |
| import numpy as np | |
| import soundfile as sf | |
| import os | |
| from pydub import AudioSegment | |
| from ..config import settings | |
| class AudioProcessor: | |
| def get_waveform_data(filepath: str, points: int = 100): | |
| """Generates simplified waveform data for the frontend visualizer.""" | |
| try: | |
| y, sr = librosa.load(filepath, sr=None) | |
| # Resample to 'points' number of data points | |
| if len(y) > points: | |
| # Take the max amplitude in each segment | |
| segment_size = len(y) // points | |
| waveform = [float(np.max(np.abs(y[i*segment_size : (i+1)*segment_size]))) for i in range(points)] | |
| else: | |
| waveform = [float(val) for val in y] | |
| # Normalize to 0-1 | |
| max_val = max(waveform) if waveform else 1 | |
| waveform = [round(val / max_val, 3) for val in waveform] | |
| return waveform | |
| except Exception as e: | |
| print(f"Error generating waveform: {e}") | |
| return [0] * points | |
| def convert_to_mp3(wav_path: str): | |
| """Converts WAV to MP3 for better streaming performance.""" | |
| mp3_path = wav_path.replace(".wav", ".mp3") | |
| try: | |
| audio = AudioSegment.from_wav(wav_path) | |
| audio.export(mp3_path, format="mp3", bitrate="192k") | |
| return mp3_path | |
| except Exception as e: | |
| print(f"Error converting to mp3: {e}") | |
| return None | |
| def get_metadata(filepath: str): | |
| """Extracts basic audio metadata.""" | |
| try: | |
| y, sr = librosa.load(filepath, sr=None) | |
| duration = librosa.get_duration(y=y, sr=sr) | |
| return { | |
| "duration_sec": round(duration, 2), | |
| "duration_str": f"{int(duration // 60)}:{int(duration % 60):02d}", | |
| "sample_rate": sr | |
| } | |
| except Exception as e: | |
| print(f"Error extracting metadata: {e}") | |
| return None | |
| audio_processor = AudioProcessor() | |