import 'dart:io'; import '../../cekirdek/log.dart'; import '../ffmpeg/ffmpeg_servis.dart'; /// Bir ses dosyasından düşük çözünürlüklü RMS dalga formu üretir. class WaveformOlusturucu { /// Returns: List normalize edilmiş RMS değerleri (0-1). /// `bucketSayisi` kadar sample alınır. static Future> rmsAkisi( String sesYolu, { int bucketSayisi = 200, }) async { if (!await File(sesYolu).exists()) return []; try { final toplamSure = await FfmpegServis.sesSuresi(sesYolu); if (toplamSure <= 0) return []; final dilim = toplamSure / bucketSayisi; final degerler = []; for (int i = 0; i < bucketSayisi; i++) { final basla = i * dilim; final bit = (i + 1) * dilim; try { final r = await FfmpegServis.rmsOlc(sesYolu, basla, bit); degerler.add(r); } catch (_) { degerler.add(-60.0); } } // Normalize: RMS dB değerleri negatif (-inf to 0); 0-1'e taşı if (degerler.isEmpty) return []; final minR = degerler.reduce((a, b) => a < b ? a : b); final maxR = degerler.reduce((a, b) => a > b ? a : b); final aralik = (maxR - minR).abs() < 0.01 ? 1.0 : (maxR - minR); return degerler .map((d) => ((d - minR) / aralik).clamp(0.0, 1.0)) .toList(); } catch (e) { Log.uyari('Waveform', 'Hata: $e'); return []; } } }