import librosa
import numpy as np
from pydub import AudioSegment
import soundfile as sf

class AudioAnalyzer:
    def __init__(self):
        pass
    
    def analyze_audio_properties(self, audio_file):
        """Analyze audio for quality and characteristics"""
        y, sr = librosa.load(audio_file, sr=None)
        
        analysis = {
            'sample_rate': sr,
            'duration': len(y) / sr,
            'channels': 1 if y.ndim == 1 else y.shape[0],
            'rms_energy': np.sqrt(np.mean(y**2)),
            'zero_crossing_rate': np.mean(librosa.feature.zero_crossing_rate(y)),
            'spectral_centroid': np.mean(librosa.feature.spectral_centroid(y=y, sr=sr))
        }
        
        return analysis
    
    def detect_speech_segments(self, audio_file, min_duration=0.5):
        """Detect speech segments for better timing"""
        y, sr = librosa.load(audio_file)
        
        # Voice activity detection
        intervals = librosa.effects.split(y, top_db=20)
        
        speech_segments = []
        for interval in intervals:
            start_time = interval[0] / sr
            end_time = interval[1] / sr
            duration = end_time - start_time
            
            if duration >= min_duration:
                speech_segments.append({
                    'start': start_time,
                    'end': end_time,
                    'duration': duration
                })
        
        return speech_segments
    
    def clean_audio(self, audio_file, output_file):
        """Basic audio cleaning"""
        y, sr = librosa.load(audio_file, sr=48000)
        
        # Noise reduction (simple)
        y_cleaned = librosa.effects.preemphasis(y)
        
        # Normalize
        y_cleaned = librosa.util.normalize(y_cleaned)
        
        # Save cleaned audio
        sf.write(output_file, y_cleaned, sr, subtype='PCM_24')
        
        return output_file