📋 Final Plan v3 🤖 Otomatik Sistem

Muzibu Otomatik Ses Kalitesi Sistemi

Kullanıcı Müdahalesiz, Akıllı Kalite Seçimi (Web Audio API)

8 Ocak 2026
muzibu.com

📝 Basit Anlatım (Herkes İçin)

🎯 Ne Yapacağız?

Sistem otomatik olarak her kullanıcı için en uygun ses kalitesini seçecek. Kullanıcı hiçbir buton görmeyecek, hiç uğraşmayacak!

🤖 Sistem Neye Göre Karar Verir?

  • 👤
    1. Üyelik Durumu:

    • Free kullanıcı → Standard (veri tasarrufu)
    • Premium/Trial → Ultimate (en yüksek kalite)

  • 📶
    2. İnternet Hızı:

    • Yavaş bağlantı (4G, 3G) → Standard
    • Orta hız (WiFi, LTE) → Optimized/EQ Balanced
    • Hızlı (WiFi 5GHz, Fiber) → Ultimate

  • 📱
    3. Cihaz Tipi:

    • Mobil (telefon) → Batarya ve veri tasarruflu kalite
    • Tablet → Orta-yüksek kalite
    • Desktop → En yüksek kalite

  • 🔋
    4. Batarya Durumu (Mobil):

    • Batarya %20'nin altında → Standard (enerji tasarrufu)
    • Batarya normal → Üyeliğe göre ayarlama

🎚️ Otomatik Seçilen Kalite Seviyeleri:

  • 🔵
    Standard: Free kullanıcı, mobil veri, düşük batarya (192 kbps, filtre yok)
  • 🟢
    Optimized: Premium + orta hız WiFi (256 kbps + Loudnorm)
  • 🟡
    EQ Balanced: Premium + iyi WiFi (Optimized + EQ)
  • 🔴
    Ultimate: Premium + hızlı WiFi + desktop (Tüm filtreler)

✨ Kullanıcı Deneyimi

  1. 1. Kullanıcı sitede geziniyor (premium/free üyelik durumu tespit ediliyor)
  2. 2. Şarkıya play basıyor
  3. 3. Sistem arka planda 0.5 saniyede analiz ediyor:
    • • Üyelik durumu: Premium ✓
    • • İnternet: WiFi 50 Mbps ✓
    • • Cihaz: Desktop ✓
    • • Batarya: Tam (desktop) ✓
  4. 4. → Karar: Ultimate kalite
  5. 5. Web Audio API filtreleri devreye giriyor (kullanıcı fark etmiyor)
  6. 6. Müzik profesyonel kalitede çalıyor 🎵

⚙️ Ayarlar Sayfasında (Opsiyonel)

Kullanıcı istersa Ayarlar > Ses Kalitesi bölümünden global tercihini değiştirebilir:

  • Otomatik (Önerilen): Sistem karar verir (varsayılan) ✓
  • Her Zaman Yüksek Kalite: Her durumda Ultimate kullan
  • Veri Tasarrufu: Her durumda Standard kullan

Not: Free kullanıcılar bu ayarları görmez, sadece Standard kalitesi çalışır.

🤖 Otomatik Seçim Algoritması (Karar Ağacı)

📊 Karar Akışı:

1. ÜYELİK KONTROLÜ
   ├─ Free kullanıcı?
   │  └─ YES → ⚪ STANDARD (son)
   │
   └─ Premium/Trial?
      └─ YES → 2. ADIMA GEÇ

2. CİHAZ TİPİ & BATARYA
   ├─ Mobil cihaz?
   │  ├─ Batarya < %20?
   │  │  └─ YES → ⚪ STANDARD (son)
   │  └─ NO → 3. ADIMA GEÇ
   │
   └─ Desktop/Tablet → 3. ADIMA GEÇ

3. İNTERNET HIZI (Navigator.connection API)
   ├─ Bağlantı yok / Çok yavaş (< 1 Mbps)?
   │  └─ YES → ⚪ STANDARD (son)
   │
   ├─ Yavaş (1-5 Mbps, 3G/4G)?
   │  └─ YES → 🟢 OPTIMIZED (son)
   │
   ├─ Orta (5-10 Mbps, LTE/WiFi)?
   │  └─ YES → 🟡 EQ BALANCED (son)
   │
   └─ Hızlı (> 10 Mbps, WiFi 5GHz/Fiber)?
      └─ YES → 🔴 ULTIMATE (son)

4. KULLANICI TERCİHİ (Ayarlar sayfası - opsiyonel override)
   ├─ "Otomatik" seçili? → Yukarıdaki algoritma geçerli
   ├─ "Her Zaman Yüksek Kalite" seçili? → 🔴 ULTIMATE
   └─ "Veri Tasarrufu" seçili? → ⚪ STANDARD

🎬 Örnek Senaryolar:

📱 Senaryo 1: Mobil + Free Kullanıcı

Durum: Telefon, 4G, Free üyelik
Analiz: Free kullanıcı → Direkt Standard
Sonuç: ⚪ STANDARD

Veri tasarrufu + CPU/batarya dostu. Free kullanıcı için yeterli kalite.

💻 Senaryo 2: Desktop + Premium + Fiber

Durum: Desktop, WiFi 100 Mbps, Premium üyelik
Analiz: Premium ✓ → Desktop ✓ → Hızlı internet (100 Mbps) ✓
Sonuç: 🔴 ULTIMATE

En yüksek kalite: Loudnorm + Stereo + EQ + Lowpass (Backend FFmpeg ile aynı)

📱 Senaryo 3: Mobil + Premium + WiFi + Düşük Batarya

Durum: Telefon, WiFi 50 Mbps, Premium, Batarya %15
Analiz: Premium ✓ → Mobil + Batarya %15 → Batarya tasarrufu gerekli
Sonuç: ⚪ STANDARD

Premium olsa bile batarya %20'nin altında ise enerji tasarrufu öncelikli.

🏠 Senaryo 4: Mobil + Premium + WiFi + Normal Batarya

Durum: Telefon, WiFi 30 Mbps, Premium, Batarya %60
Analiz: Premium ✓ → Batarya OK ✓ → WiFi orta-hızlı (30 Mbps)
Sonuç: 🟡 EQ BALANCED

Mobilde iyi kalite ama CPU yükü çok yüksek olmasın diye Ultimate değil.

🔧 Teknik Detaylar (Geliştiriciler İçin)

📡 Kullanılacak JavaScript API'ler

1. Navigator.connection (Network Information API)

const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
const effectiveType = connection?.effectiveType; // '4g', '3g', '2g', 'slow-2g'
const downlink = connection?.downlink; // Mbps (estimated)

// Örnek:
if (effectiveType === '4g' && downlink > 10) {
  // Hızlı bağlantı → Ultimate/EQ Balanced
} else if (effectiveType === '3g' || downlink < 5) {
  // Yavaş bağlantı → Standard/Optimized
}

2. Battery Status API (Mobil cihazlar)

navigator.getBattery().then((battery) => {
  const level = battery.level; // 0.0 - 1.0 (0% - 100%)
  const charging = battery.charging; // true/false

  if (level < 0.2 && !charging) {
    // Batarya %20'nin altında ve şarjda değil → Standard (enerji tasarrufu)
  }
});

3. User Agent & Device Detection

// Basit cihaz tespiti (iyileştirilebilir kütüphane ile)
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
const isTablet = /iPad|Android(?!.*Mobile)/i.test(navigator.userAgent);
const isDesktop = !isMobile && !isTablet;

// Ekran boyutu kontrolü (ekstra)
const screenWidth = window.screen.width;
if (isMobile && screenWidth < 768) {
  // Küçük ekran telefon
} else if (isDesktop && screenWidth > 1920) {
  // Büyük ekran desktop
}

4. Subscription Status (Backend'den)

// /api/muzibu/songs/{id}/stream endpoint'inden dönen data:
{
  "is_premium": true,  // Premium/Trial → true, Free → false
  "trial_ends_at": "2026-02-01T00:00:00Z",
  "subscription_ends_at": "2026-06-01T00:00:00Z"
}

🎯 Otomatik Seçim Fonksiyonu (Pseudo-code)

async function autoSelectQuality() {
  // 1. Üyelik kontrolü (backend'den gelen data)
  if (!isPremium) {
    return 'standard'; // Free kullanıcı → Standard
  }

  // 2. Kullanıcı tercihi (ayarlar sayfası - opsiyonel)
  const userPreference = localStorage.getItem('audio_quality_preference');
  if (userPreference === 'always_high') {
    return 'ultimate'; // Kullanıcı zorladı
  }
  if (userPreference === 'data_saver') {
    return 'standard'; // Kullanıcı zorladı
  }

  // 3. Mobil cihaz + batarya kontrolü
  if (isMobile) {
    try {
      const battery = await navigator.getBattery();
      if (battery.level < 0.2 && !battery.charging) {
        return 'standard'; // Düşük batarya → Tasarruf
      }
    } catch (e) {
      // Battery API desteklenmiyorsa devam et
    }
  }

  // 4. İnternet hızı kontrolü
  const connection = navigator.connection;
  if (connection) {
    const downlink = connection.downlink; // Mbps
    const effectiveType = connection.effectiveType;

    // Çok yavaş bağlantı
    if (downlink < 1 || effectiveType === 'slow-2g' || effectiveType === '2g') {
      return 'standard';
    }

    // Yavaş bağlantı (3G, 4G düşük hız)
    if (downlink < 5 || effectiveType === '3g') {
      return 'optimized';
    }

    // Orta hız (LTE, WiFi orta)
    if (downlink < 10) {
      return isMobile ? 'optimized' : 'eq_balanced';
    }

    // Hızlı bağlantı (WiFi 5GHz, Fiber)
    return isDesktop ? 'ultimate' : 'eq_balanced';
  }

  // 5. Fallback: Cihaz tipine göre varsayılan
  if (isDesktop) {
    return 'ultimate'; // Desktop → En yüksek kalite
  } else if (isTablet) {
    return 'eq_balanced'; // Tablet → Orta-yüksek
  } else {
    return 'optimized'; // Mobil → Dengeli
  }
}

// Kullanımı:
const selectedQuality = await autoSelectQuality();
player.applyQualityPreset(selectedQuality); // Web Audio API filtrelerini uygula
console.log('Otomatik seçilen kalite:', selectedQuality);

🎚️ Kalite Presets (Değişmedi - v2'den)

const QUALITY_PRESETS = {
  standard: {
    label: 'Standard',
    filters: { gain: 1.0, eq: [], stereo: 0, lowpass: false }
  },
  optimized: {
    label: 'Optimized',
    filters: { gain: 1.2, eq: [], stereo: 0, lowpass: false }
  },
  eq_balanced: {
    label: 'EQ Balanced',
    filters: {
      gain: 1.2,
      eq: [
        { type: 'peaking', frequency: 100, Q: 1, gain: 1 },
        { type: 'peaking', frequency: 8000, Q: 1, gain: -2 }
      ],
      stereo: 0,
      lowpass: false
    }
  },
  ultimate: {
    label: 'Ultimate',
    filters: {
      gain: 1.2,
      eq: [
        { type: 'peaking', frequency: 100, Q: 1, gain: 1 },
        { type: 'peaking', frequency: 8000, Q: 1, gain: -2 }
      ],
      stereo: 0.2,
      lowpass: 14000
    }
  }
};

📁 Dosya Konumları

  • JS: public/themes/muzibu/js/player/features/auto-quality.js (yeni dosya)
  • Core: public/themes/muzibu/js/player/core/player-core.js (güncellenecek)
  • Ayarlar (opsiyonel): resources/views/themes/muzibu/profile/settings.blade.php

⚙️ Ayarlar Sayfası (Opsiyonel - Gelişmiş Kullanıcılar İçin)

Kullanıcı Ayarlar > Müzik & Ses bölümünde global tercihini değiştirebilir. (Varsayılan: Otomatik)

📋 Ayar Seçenekleri:

🤖 Otomatik (Önerilen)

Sistem internet hızı, cihaz tipi ve batarya durumuna göre otomatik karar verir. Çoğu kullanıcı için en iyi seçim.

🔴 Her Zaman Yüksek Kalite

Her durumda Ultimate kalite kullanır. Yüksek veri tüketimi ve CPU kullanımı. WiFi + Desktop kullanıcıları için.

💾 Veri Tasarrufu

Her durumda Standard kalite kullanır. Düşük veri tüketimi ve batarya dostu. Mobil veri paketini korumak isteyenler için.

⚠️ Not: Free kullanıcılar bu ayarları görmez. Free üyelerde sadece Standard kalite çalışır (otomatik zorunlu).

📊 Yapılacaklar (Adım Adım)

1 Auto Quality Modülü Oluştur

  • auto-quality.js dosyası
  • autoSelectQuality() fonksiyonu
  • ✅ Network, Battery, Device detection API'leri
  • ✅ QUALITY_PRESETS object (Backend FFmpeg ile aynı)

2 Player Core Entegrasyonu

  • ✅ AudioContext + Web Audio pipeline
  • ✅ Şarkı başlamadan önce autoSelectQuality() çağır
  • ✅ Seçilen preset'i uygula (GainNode, EQ, Stereo, Lowpass)
  • ✅ Console'a log yaz (debugging için): "Seçilen kalite: Ultimate (Premium + WiFi 100Mbps)"

3 Ayarlar Sayfası (Opsiyonel)

  • ✅ Settings sayfasına "Müzik & Ses" bölümü ekle
  • ✅ 3 radio button: Otomatik / Her Zaman Yüksek / Veri Tasarrufu
  • ✅ LocalStorage'a kaydet: audio_quality_preference
  • ✅ Free kullanıcılara gösterme (premium kontrolü)

4 Test: Tüm Senaryolar

  • ✅ Free kullanıcı → Standard (zorla)
  • ✅ Premium + Desktop + WiFi → Ultimate
  • ✅ Premium + Mobil + 4G → Optimized
  • ✅ Premium + Mobil + Düşük batarya → Standard
  • ✅ Ultimate preset = Backend FFmpeg ile aynı çıktı?
  • ✅ Ayarlar sayfasından override çalışıyor mu?

5 Production Deploy

  • ✅ Cache temizle: npm run prod
  • ✅ Browser console'da kalite log'ları kontrol et
  • ✅ Monitoring: Hangi kalite ne sıklıkla kullanılıyor? (analytics)

Avantajlar (v2'ye Ek)

  • Kullanıcı müdahalesiz: Hiçbir buton görmez, sistem otomatik çalışır
  • Akıllı karar: İnternet + cihaz + batarya durumuna göre optimize eder
  • Veri tasarrufu: Mobil kullanıcılar gereksiz veri harcamaz
  • Batarya dostu: Düşük batarya = hafif kalite
  • Premium ayrıcalık: Free kullanıcılar Standard, Premium tüm kalitelere erişir
  • Gelişmiş kullanıcı kontrolü: İsteyen ayarlardan override edebilir
  • Basit UI: Player bar karmaşıklaşmaz
  • Analytics: Hangi kalite daha çok kullanılıyor? (izlenebilir)

🚀 Sonraki Adım: Onay ve Uygulama

💬 Bu planı onaylıyor musunuz?

  • Evet: Koda geçiyoruz (auto-quality.js modülü oluşturma)
  • Hayır: Neyi değiştirmek istersiniz?

📌 v3 Değişiklik Özeti (v2'den farklar):

  • Kaldırıldı: Player bar'a kalite seçici butonu
  • Eklendi: Otomatik kalite seçim algoritması (internet/cihaz/batarya)
  • Eklendi: Ayarlar sayfasında opsiyonel global tercih
  • Değişmedi: Web Audio API implementasyonu (v2 ile aynı)
  • Değişmedi: Kalite presets (Backend FFmpeg ile uyumlu)