#!/usr/bin/python3
import matplotlib.pyplot as plt
import numpy as np
from scipy.io import wavfile
from scipy.signal import hilbert

def wav_zu_png(wav_pfad, png_pfad):
    samplerate, data = wavfile.read(wav_pfad)

    # Falls Stereo, ersten Kanal wählen
    if len(data.shape) > 1:
        data = data[:, 0]

    # Normalisieren auf Bereich [-1, 1]
    data = data.astype(np.float32)
    data /= np.max(np.abs(data)) if np.max(np.abs(data)) != 0 else 1.0

    # Hüllkurve berechnen (Hilbert-Trafo + Tiefpass-Glättung über 10ms)
    envelope = np.abs(hilbert(data))
    window_len = int(samplerate * 0.01)  # 10 ms Fenster
    if window_len > 1:
        envelope = np.convolve(envelope, np.ones(window_len)/window_len, mode='same')

    dauer = len(data) / samplerate
    zeit = np.linspace(0, dauer, num=len(data))

    # Figsize auf moderate Werte anpassen (z.B. 30x5 bei dpi=150 ergibt 4500px Breite)
    plt.figure(figsize=(30, 5))

    # Hüllkurve in Rot zeichnen (klar identifizierbare Pulse)
    plt.plot(zeit, envelope, color="red", linewidth=1.0, label="MSF Hüllkurve (AM-Absenkung)")
    
    # Optional: Original-Audio transparent im Hintergrund darstellen
    plt.plot(zeit, data, color="blue", alpha=0.2, linewidth=0.3, label="HF/NF Rohdaten")

    # Beschriftungen und Raster
    plt.title(f"MSF 60 kHz Amplitudenverlauf: {wav_pfad}")
    plt.xlabel("Zeit (Sekunden)")
    plt.ylabel("Rel. Amplitude")
    plt.grid(True, linestyle="--", alpha=0.6)
    plt.xlim(0, dauer)
    plt.ylim(-1.1, 1.1)
    plt.legend(loc="upper right")

    plt.tight_layout()
    plt.savefig(png_pfad, dpi=150)
    plt.close()

    print(f"Erfolgreich gespeichert unter: {png_pfad}")

if __name__ == "__main__":
    wav_zu_png("websdr_recording_60khz.wav", "amplitudenverlauf.png")
