📝 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. Kullanıcı sitede geziniyor (premium/free üyelik durumu tespit ediliyor)
- 2. Şarkıya play basıyor
- 3. Sistem arka planda 0.5 saniyede analiz ediyor:
- • Üyelik durumu: Premium ✓
- • İnternet: WiFi 50 Mbps ✓
- • Cihaz: Desktop ✓
- • Batarya: Tam (desktop) ✓
- 4. → Karar: Ultimate kalite
- 5. Web Audio API filtreleri devreye giriyor (kullanıcı fark etmiyor)
- 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ı
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
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
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
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:
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 durumda Ultimate kalite kullanır. Yüksek veri tüketimi ve CPU kullanımı. WiFi + Desktop kullanıcıları için.
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.jsdosyası - ✅
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)