🔴 HATA DÜZELTMESİ (v3'ten)
❌ v3'te Yanlış Olan:
"Free kullanıcılar Standard kalitede dinler" denilmişti. BU YANLIŞ!
Gerçek Sistem: Free kullanıcılar hiç müzik dinleyemez!
Backend API (SongStreamController.php) free kullanıcıya 402 döner,
subscription sayfasına yönlendirir.
✅ v4'te Doğru Olan:
Sadece Premium/Trial kullanıcılar müzik dinleyebilir.
Kalite seçimi algoritması sadece onlar için çalışır.
📝 Basit Anlatım (Herkes İçin)
🎯 Ne Yapacağız?
Premium/Trial kullanıcılar için sistem otomatik olarak en uygun ses kalitesini seçecek. Kullanıcı hiçbir buton görmeyecek, hiç uğraşmayacak!
⚠️ Önemli: Kimler Müzik Dinleyebilir?
Müzik dinleyebilir, otomatik kalite seçimi çalışır.
Play butonuna basınca subscription sayfasına yönlendirilir. Hiç çalmaz!
🤖 Sistem Neye Göre Karar Verir?
-
📶
1. İnternet Hızı:
• Yavaş bağlantı (4G, 3G, < 5 Mbps) → Optimized
• Orta hız (WiFi, 5-10 Mbps) → EQ Balanced
• Hızlı (WiFi 5GHz, Fiber, > 10 Mbps) → Ultimate -
📱
2. Cihaz Tipi:
• Mobil (telefon) → Batarya ve CPU dostu kalite
• Tablet → Orta-yüksek kalite
• Desktop → En yüksek kalite (Ultimate) -
🔋
3. Batarya Durumu (Mobil):
• Batarya %20'nin altında → Optimized (enerji tasarrufu)
• Batarya normal → İnternet hızına göre
🎚️ Otomatik Seçilen Kalite Seviyeleri:
-
🟢
Optimized: Yavaş internet, mobil veri, düşük batarya (256 kbps + Loudnorm)
-
🟡
EQ Balanced: Orta hız WiFi, tablet (Optimized + EQ)
-
🔴
Ultimate: Hızlı WiFi + desktop (Tüm filtreler - Backend FFmpeg ile aynı)
Not: Standard kalitesi kaldırıldı. Premium kullanıcılar minimum Optimized kalitede dinler.
✨ Kullanıcı Deneyimi
- 1. Premium kullanıcı sitede geziniyor
- 2. Şarkıya play basıyor
- 3. Sistem arka planda 0.5 saniyede analiz ediyor:
- • İ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)
Premium 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/Batarya Tasarrufu: Her durumda Optimized kullan
🤖 Otomatik Seçim Algoritması (Basitleştirilmiş)
📊 Karar Akışı:
1. CİHAZ TİPİ & BATARYA
├─ Mobil cihaz?
│ ├─ Batarya < %20?
│ │ └─ YES → 🟢 OPTIMIZED (enerji tasarrufu)
│ └─ NO → 2. ADIMA GEÇ
│
└─ Desktop/Tablet → 2. ADIMA GEÇ
2. İNTERNET HIZI (Navigator.connection API)
├─ Çok yavaş (< 1 Mbps, 2G/3G)?
│ └─ YES → 🟢 OPTIMIZED
│
├─ Yavaş (1-5 Mbps, 4G)?
│ └─ YES → 🟢 OPTIMIZED
│
├─ Orta (5-10 Mbps, LTE/WiFi)?
│ └─ YES → 🟡 EQ BALANCED
│
└─ Hızlı (> 10 Mbps, WiFi 5GHz/Fiber)?
├─ Desktop? → 🔴 ULTIMATE
└─ Mobil/Tablet? → 🟡 EQ BALANCED
3. KULLANICI TERCİHİ (Ayarlar sayfası - opsiyonel override)
├─ "Otomatik" seçili? → Yukarıdaki algoritma geçerli
├─ "Her Zaman Yüksek Kalite"? → 🔴 ULTIMATE (zorla)
└─ "Veri/Batarya Tasarrufu"? → 🟢 OPTIMIZED (zorla)
🎬 Örnek Senaryolar:
📱 Senaryo 1: Mobil + 4G + Premium
Analiz: Mobil + Batarya OK → İnternet yavaş (4G, 3 Mbps)
Sonuç: 🟢 OPTIMIZED
Mobil veri tasarrufu + CPU dostu. 4G'de buffering olmasın.
💻 Senaryo 2: Desktop + WiFi Fiber + Premium
Analiz: Desktop ✓ → Hızlı internet (100 Mbps) ✓
Sonuç: 🔴 ULTIMATE
En yüksek kalite: Loudnorm + Stereo + EQ + Lowpass (Backend FFmpeg ile aynı)
📱 Senaryo 3: Mobil + WiFi + Düşük Batarya + Premium
Analiz: Mobil + Batarya %15 → Batarya tasarrufu öncelikli
Sonuç: 🟢 OPTIMIZED
WiFi hızlı olsa bile batarya %20'nin altında ise enerji tasarrufu önemli.
📱 Senaryo 4: Tablet + WiFi + Premium
Analiz: Tablet → Batarya OK ✓ → WiFi orta-hızlı (30 Mbps)
Sonuç: 🟡 EQ BALANCED
Tablet'te iyi kalite ama Ultimate kadar CPU yükü yok.
🔧 Teknik Detaylar (Geliştiriciler İçin)
🎯 Otomatik Seçim Fonksiyonu (Basitleştirilmiş)
async function autoSelectQuality() {
// NOT: Bu fonksiyon sadece Premium/Trial kullanıcılar için çağrılır
// Free kullanıcılar zaten API'dan 402 alır, müzik çalmaz
// 1. Kullanıcı tercihi (ayarlar sayfası - opsiyonel override)
const userPreference = localStorage.getItem('audio_quality_preference');
if (userPreference === 'always_high') {
return 'ultimate'; // Kullanıcı zorladı
}
if (userPreference === 'data_saver') {
return 'optimized'; // Kullanıcı zorladı
}
// 2. Mobil cihaz + batarya kontrolü
if (isMobile) {
try {
const battery = await navigator.getBattery();
if (battery.level < 0.2 && !battery.charging) {
return 'optimized'; // Düşük batarya → Tasarruf
}
} catch (e) {
// Battery API desteklenmiyorsa devam et
}
}
// 3. İnternet hızı kontrolü
const connection = navigator.connection;
if (connection) {
const downlink = connection.downlink; // Mbps
const effectiveType = connection.effectiveType;
// Çok yavaş/yavaş bağlantı
if (downlink < 5 || effectiveType === 'slow-2g' || effectiveType === '2g' || effectiveType === '3g') {
return 'optimized';
}
// Orta hız (LTE, WiFi orta)
if (downlink < 10) {
return 'eq_balanced';
}
// Hızlı bağlantı (WiFi 5GHz, Fiber)
return isDesktop ? 'ultimate' : 'eq_balanced';
}
// 4. 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ı (player-core.js içinde):
const selectedQuality = await autoSelectQuality();
player.applyQualityPreset(selectedQuality);
console.log('Otomatik seçilen kalite:', selectedQuality);
🎚️ Kalite Presets (3 Seviye - Standard Kaldırıldı)
const QUALITY_PRESETS = {
// Standard KALDIRILDI - Premium kullanıcılar minimum Optimized
optimized: {
label: 'Optimized',
description: '256 kbps + Loudness normalize',
filters: {
gain: 1.2, // +2dB (loudness normalize)
eq: [], // EQ YOK
stereo: 0, // Stereo YOK
lowpass: false // Lowpass YOK
}
},
eq_balanced: {
label: 'EQ Balanced',
description: '256 kbps + Loudness + EQ',
filters: {
gain: 1.2,
eq: [
{ type: 'peaking', frequency: 100, Q: 1, gain: 1 }, // Bass +1dB
{ type: 'peaking', frequency: 8000, Q: 1, gain: -2 } // Treble -2dB
],
stereo: 0,
lowpass: false
}
},
ultimate: {
label: 'Ultimate',
description: 'Tüm filtreler (Backend FFmpeg ile aynı)',
filters: {
gain: 1.2, // Loudness
eq: [
{ type: 'peaking', frequency: 100, Q: 1, gain: 1 }, // Bass +1dB @ 100Hz
{ type: 'peaking', frequency: 8000, Q: 1, gain: -2 } // Treble -2dB @ 8kHz
],
stereo: 0.2, // Stereo widening (20%)
lowpass: 14000 // 14kHz lowpass
}
}
};
📡 Kullanılacak JavaScript API'ler
- •
Navigator.connection→ İnternet hızı (Mbps, 4G/3G/WiFi) - •
Battery Status API→ Batarya seviyesi (mobil) - •
User Agent→ Mobil/Desktop tespiti
📁 Dosya Konumları
- JS: public/themes/muzibu/js/player/features/auto-quality.js
- Core: public/themes/muzibu/js/player/core/player-core.js (güncellenecek)
- Ayarlar: resources/views/themes/muzibu/profile/settings.blade.php (opsiyonel)
📊 Yapılacaklar (Adım Adım)
1 Auto Quality Modülü Oluştur
- ✅
auto-quality.jsdosyası - ✅
autoSelectQuality()fonksiyonu (Premium için) - ✅ Network, Battery, Device detection API'leri
- ✅ QUALITY_PRESETS (3 seviye: Optimized, EQ Balanced, Ultimate)
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 log: "Seçilen kalite: Ultimate (Desktop + WiFi 100Mbps)"
3 Ayarlar Sayfası (Opsiyonel)
- ✅ Settings > "Müzik & Ses" bölümü
- ✅ 3 radio button: Otomatik / Her Zaman Yüksek / Veri Tasarrufu
- ✅ LocalStorage kaydet:
audio_quality_preference
4 Test
- ✅ Premium + Desktop + WiFi → Ultimate
- ✅ Premium + Mobil + 4G → Optimized
- ✅ Premium + Mobil + Düşük batarya → Optimized
- ✅ Premium + Tablet + WiFi → EQ Balanced
- ✅ Ultimate = Backend FFmpeg ile aynı çıktı?
🚀 Sonraki Adım: Onay
💬 Bu planı onaylıyor musunuz?
-
✅
Evet: Koda geçiyoruz (auto-quality.js + player entegrasyonu)
-
❌
Hayır: Neyi değiştirmek istersiniz?
📌 v4 Değişiklik Özeti (v3'ten farklar):
- • Kaldırıldı: Free kullanıcı kontrolü (zaten çalamıyorlar)
- • Kaldırıldı: Standard kalite preset'i (minimum Optimized)
- • Basitleştirildi: Algoritma sadece 3 kalite: Optimized, EQ Balanced, Ultimate
- • Değişmedi: Web Audio API implementasyonu
- • Değişmedi: Otomatik seçim mantığı (internet + cihaz + batarya)