import '../ffmpeg/ffmpeg_servis.dart'; /// mevcut Python pipeline'daki RMS heuristic'inin Dart portu. class SesEnerjisi { /// Her segment için RMS ölçer ve enerji seviyesini sınıflandırır. /// Returns: ["silence", "low", "medium", "high", "climax"] listesi. static Future> seviyeAnalizi( String sesYolu, List<({double basla, double bit})> sinirlar, ) async { final rmsler = []; for (final s in sinirlar) { try { final v = await FfmpegServis.rmsOlc(sesYolu, s.basla, s.bit); rmsler.add(v); } catch (_) { rmsler.add(-60.0); } } if (rmsler.isEmpty) { return List.filled(sinirlar.length, 'medium'); } final minR = rmsler.reduce((a, b) => a < b ? a : b); final maxR = rmsler.reduce((a, b) => a > b ? a : b); final aralik = (maxR - minR) > 0 ? maxR - minR : 1.0; final seviyeler = []; for (final r in rmsler) { if (r <= -50) { seviyeler.add('silence'); } else { final norm = (r - minR) / aralik; if (norm < 0.2) { seviyeler.add('low'); } else if (norm < 0.5) { seviyeler.add('medium'); } else if (norm < 0.8) { seviyeler.add('high'); } else { seviyeler.add('climax'); } } } return seviyeler; } /// Enerji seviyesine göre prompt'u zenginleştirir (mevcut Python ile aynı). static String dinamikPrompt(String anaPrompt, String seviye) { final sablonlar = { 'silence': { 'prefix': 'dark ambient atmosphere, minimal movement, ', 'suffix': ', slow fade, contemplative mood, still camera', }, 'low': { 'prefix': 'gentle and calm scene, soft lighting, ', 'suffix': ', subtle motion, intimate mood, slow camera pan', }, 'medium': { 'prefix': 'dynamic scene with moderate energy, ', 'suffix': ', fluid motion, engaging atmosphere, steady camera movement', }, 'high': { 'prefix': 'intense and energetic scene, dramatic lighting, ', 'suffix': ', fast motion, powerful atmosphere, dynamic camera angles', }, 'climax': { 'prefix': 'epic climactic moment, explosive visual energy, ', 'suffix': ', rapid motion, overwhelming atmosphere, sweeping cinematic camera', }, }; final s = sablonlar[seviye] ?? sablonlar['medium']!; return '${s['prefix']!}$anaPrompt${s['suffix']!}'; } }