mirror of
https://github.com/barkeser2002/just-music-premium.git
synced 2026-09-25 02:19:58 +03:00
- Paralel indirme: tek tek yerine MAX_DL_CONCURRENT=3 escanli indirme havuzu.
active_downloads {thread: yuzde}, download_done sayaci, _pump_downloads havuzu
doldurur, _emit_dl_progress toplam ilerleme + "X/Y (N etkin)" pill. THREAD-GUVENLI:
sinyaller QObject-bagli slotlara gider (self.sender() ile thread bulunur) -> tum
kuyruk/havuz mutasyonu + QThread olusturma ana thread'de; 0 Qt cross-thread uyarisi.
Dogrulandi: sahte-thread testi peak=3, dogru sayac + reset.
- Responsive player bar: ikincil kontroller (klip/karaoke/ambiyans/kuyruk/soz) varsayilan
olarak ⋯ tasma menusune katlanir (>=1500px satir ici acilir). Kontrol GIZLENMEZ.
Boylece bar her genislikte sigar, tasip sayfayi yatay kaydirip sol kenar cubugunu
ekrandan itmez ("sapitmaz"). Dogrulandi: 1600/1100/820px'te overflowX=0, sidebarX=8,
⋯ toggle, 0 JS hatasi. #pHeroBtn eklenince (v1.5.0) bar tasmisti; bu onu cozer.
290 lines
19 KiB
Markdown
290 lines
19 KiB
Markdown
<p align="center">
|
||
<img src="site/img/banner.png" alt="Just Music Premium" width="860">
|
||
</p>
|
||
|
||
<h1 align="center">🎵 Just Music Premium</h1>
|
||
|
||
<p align="center">
|
||
Windows için profesyonel müzik çalar — <b>Spotify tarzı QtWebEngine arayüzü</b> +
|
||
<b>yerli DSP ses motoru</b> (gerçek zamanlı EQ & efektler) + <b>gömülü yt-dlp/ffmpeg</b> +
|
||
<b>htdemucs stüdyo karaoke</b> + <b>crossfade/gapless</b> + <b>Discord Rich Presence</b>.
|
||
</p>
|
||
|
||
<p align="center">
|
||
<a href="https://github.com/barkeser2002/just-music-premium/releases/latest"><img alt="sürüm" src="https://img.shields.io/github/v/release/barkeser2002/just-music-premium?color=1db954&label=s%C3%BCr%C3%BCm&style=for-the-badge"></a>
|
||
<a href="https://github.com/barkeser2002/just-music-premium/releases/latest/download/JustMusic-Setup.msi"><img alt="indir" src="https://img.shields.io/badge/%E2%AC%87%20.msi-indir-1db954?style=for-the-badge"></a>
|
||
<img alt="indirme" src="https://img.shields.io/github/downloads/barkeser2002/just-music-premium/total?color=1ed760&label=indirme&style=for-the-badge">
|
||
<img alt="platform" src="https://img.shields.io/badge/Windows-10%2F11-2a2a2a?style=for-the-badge&logo=windows">
|
||
<img alt="python" src="https://img.shields.io/badge/Python-3.12-3776ab?style=for-the-badge&logo=python&logoColor=white">
|
||
<a href="https://barkeser2002.github.io/just-music-premium/"><img alt="tanıtım" src="https://img.shields.io/badge/%F0%9F%8C%90-tan%C4%B1t%C4%B1m-1ed760?style=for-the-badge"></a>
|
||
</p>
|
||
|
||
## 📸 Ekran Görüntüleri
|
||
|
||
**Klip modu** — ekranı kaplamaz, ana alana gömülür; zaman kodlu sözler klibin üstünde senkron akar:
|
||
|
||

|
||
|
||
**Kalıcı mini oynatıcı** — sekme değiştirince klip köşeye iner ve çalmaya devam eder (akış kesilmez):
|
||
|
||

|
||
|
||
## ⬇ İndir & Kur (Windows)
|
||
|
||
**[⬇ JustMusic-Setup.msi indir](https://github.com/barkeser2002/just-music-premium/releases/latest/download/JustMusic-Setup.msi)** ·
|
||
[Tüm sürümler](https://github.com/barkeser2002/just-music-premium/releases) ·
|
||
[🌐 Tanıtım sayfası](https://barkeser2002.github.io/just-music-premium/)
|
||
|
||
- `.msi` **kullanıcı bazlı** kurar (yönetici/UAC gerekmez); Başlat menüsü + masaüstü kısayolu ekler.
|
||
- **Otomatik güncelleme:** uygulama açılışta GitHub'da yeni sürüm arar; varsa `.msi`'yi arka planda
|
||
sessizce indirir ve **kapanışta kurup yeniden başlatır** (istersen "Şimdi yeniden başlat" ile hemen).
|
||
- `.msi` **GitHub Actions'ta bulutta** derlenir (bkz. `.github/workflows/build.yml`): `v*` etiketi
|
||
push edilince ffmpeg/yt-dlp/deno indirilir, PyInstaller derler, **WiX** ile `.msi` paketlenir ve
|
||
Release'e yüklenir.
|
||
|
||
## 🆕 v1.6.0 — paralel indirme + responsive player bar
|
||
|
||
- **⚡ Paralel indirme:** toplu indirmede artık **aynı anda 3 parça** iner (tek tek değil) — playlist
|
||
toplu indirme çok daha hızlı. Pill toplam ilerlemeyi ve "X/Y (N etkin)" sayacını gösterir; thread-güvenli.
|
||
- **📱 Responsive alt player bar:** kontroller artık dar/orta pencerede **taşmıyor** (taşma sol kenar
|
||
çubuğunu ekrandan itiyordu). İkincil kontroller (klip, karaoke, ambiyans, kuyruk, söz) bir **⋯ menüsüne**
|
||
katlanır; çok geniş ekranda satır içinde açılır. Her genişlikte yatay kayma yok.
|
||
|
||
## 🆕 v1.5.0 — merkez "Şimdi Çalıyor" (A+B karışımı)
|
||
|
||
- **🎧 Merkez now-playing hero (Apple Music tarzı):** çalan parça **ana alanda büyük** görünür — dev kapak
|
||
solda (kapak-renginden blur backdrop), sağda başlık + geniş scrubber + iri transport + tek satır **canlı söz**.
|
||
Alt player bar'daki 💿 düğmesi (ya da **mini kapağa/parça adına tıkla**, ya da komut paleti) ile açılır.
|
||
- **Tek motor saati:** merkez hero'nun scrubber'ı ve alt bar aynı DSP saatinden beslenir — sapma yok; büyük
|
||
kapağa/expand'a tıkla → **theater** (mini → merkez → tam ekran zoom merdiveni).
|
||
- Tümüyle **opt-in ve geri alınabilir**: A'nın daraltılabilir rayı (v1.4.0) + bu B hero'su = **A+B karışımı**.
|
||
`prefers-reduced-motion` saygılı, View-Transition kapak morph'u özellik-testli.
|
||
|
||
## 🆕 v1.4.0 — daraltılabilir kabuk
|
||
|
||
- **📐 Daraltılabilir kenar çubuğu:** üst bardaki ☰ ile kenar çubuğu **tam (300px) ↔ ikon rayı (64px)**
|
||
arasında geçer — içeriğe daha çok yer. Daralınca nav ikonları ve çalma listesi kapakları kalır,
|
||
üzerine gelince isimleri **ipucu (tooltip)** olarak görünür. Durum kaydedilir; kısayol **B**, komut
|
||
paletinde de var.
|
||
- **🪟 Kayan "Şimdi Çalıyor":** sağ panel çağrılınca **yumuşak kayarak** gelir (Apple Music tarzı çekmece),
|
||
`prefers-reduced-motion` saygılı.
|
||
|
||
## 🆕 v1.3.0 — kesintisiz geçiş + Discord
|
||
|
||
- **🎚 Crossfade + boşluksuz (gapless) çalma:** parçalar arasında **eş-güçlü geçiş (0–12 sn)** ya da
|
||
sınırda **boşluksuz** devam. Sıradaki parça önden çözülür → geçişte tek saniye boşluk/tıkırtı kalmaz.
|
||
Albüm, canlı kayıt ve DJ setleri için. Varsayılan kapalı; sıralı çalmada devreye girer.
|
||
- **🎮 Discord Rich Presence:** çalan parça + oynat/duraklat durumu **Discord profilinde** görünür (opsiyonel).
|
||
Ayarlardaki alana kendi **Discord Application ID**'ni gir, toggle'ı aç (Discord açık olmalı).
|
||
- Kontroller **Efektler → "Geçiş & Discord"** kartında (crossfade kaydırıcısı, gapless düğmesi, Discord). TR/EN.
|
||
|
||
## 🆕 v1.2.1 — theater modu
|
||
|
||
- **🎭 Theater modu:** tam ekran "Şimdi Çalıyor"da kapak solda, **zaman kodlu sözler sağda** yan yana;
|
||
çalarken **aktif satır vurgulanır** (Apple Music tarzı sürükleyici görünüm).
|
||
|
||
## 🆕 v1.2.0 — modern görünüm
|
||
|
||
- **🫧 Cam arayüz (glassmorphism):** menüler, komut paleti, bildirimler, mini-oynatıcı ve alt player bar
|
||
buzlu cam; arkasındaki içerik yumuşak blur'lü görünür.
|
||
- **🎨 Kapak-renginden adaptif tema:** çalan parçanın kapak rengi tüm arayüze (accent, görselleştirici,
|
||
butonlar) yansır — okunabilir aralığa clamp'lenir; özel renk seçilince kapanır.
|
||
- **🖼 "Şimdi Çalıyor" hero:** sağ panel ve tam ekranda blurlu kapak arka planı (Apple Music tarzı immersive).
|
||
- **🎤 Dinamik söz adası:** yüzen cam söz penceresi — Enhanced-LRC ile **kelime kelime (karaoke)** vurgulanır,
|
||
sürüklenebilir. `I` tuşu veya komut paletinden aç.
|
||
- **✨ Hareket:** kart/parça giriş animasyonu (kademeli), buton "spring" tepkileri.
|
||
|
||
## 🆕 v1.1.0
|
||
|
||
- **🌍 Dil desteği (TR + EN)** — üst bardaki dil seçicisinden anında geçiş; seçim kaydedilir.
|
||
İç veri (mood, korumalı liste adları) Türkçe kalır, yalnız arayüz çevrilir — kütüphanen bozulmaz.
|
||
|
||
## 🆕 v1.0.4
|
||
|
||
- **📃 Playlist toplu indirme** — YouTube playlist URL'si → önizle, seç, X/Y sayaçlı toplu indir.
|
||
- **⬅➡ Geri / İleri gezinme** — üst bardaki oklar artık görünüm geçmişinde dolaşıyor.
|
||
- Düzeltmeler: komut paletinden karaoke menüsü artık kapanmıyor; arama/akıllı-liste görünümünde
|
||
yanlışlıkla sürükle-sırala kaldırıldı; indirme/ayırma bildirimleri üst üste binmiyor.
|
||
- Bakım: **yt-dlp** güncellendi (YouTube tarafı değişince indirmedeki HTTP 403 düzeldi).
|
||
|
||
## 📚 Geliştirici Belgeleri
|
||
|
||
`docs/` altında — projeyi hızlı kavramak için:
|
||
[Mimari](docs/ARCHITECTURE.md) · [Köprü Sinyalleri](docs/BRIDGE-SIGNALS.md) ·
|
||
[Bilinen Sorunlar](docs/KNOWN-ISSUES.md) · [Geliştirici Rehberi + TR→EN sözlük](docs/DEV.md).
|
||
Kod grafiği: `graphify-out/` (`graphify query "..."`).
|
||
|
||
## 🏗 Mimari
|
||
|
||
- **Arayüz:** HTML/CSS/JS (`justmusic/web/`), `QWebEngineView` içinde render edilir →
|
||
gerçek Spotify seviyesi görsel (gradyan başlıklar, kartlar, animasyonlar).
|
||
- **Ses & tüm mantık:** yerli Python (`engine.py` DSP motoru, `library.py`,
|
||
`downloader.py`, `covers.py`, `naming.py`). Arayüz ↔ Python **QWebChannel**
|
||
köprüsüyle konuşur (`bridge.py`).
|
||
- **Sunucu / port YOK:** her şey in-process. Varlıklar ve kapaklar özel `app://`
|
||
şemasıyla servis edilir (`scheme.py`). Eski pywebview sürümündeki port
|
||
çakışması / sonsuz kilitlenme burada imkânsız.
|
||
|
||
## ✨ Özellikler
|
||
|
||
- **Spotify düzeni:** üstte arama, solda kütüphane (kapaklı çalma listeleri),
|
||
ortada gradyanlı liste görünümü + sütunlu şarkı tablosu, sağda "çalınıyor"
|
||
paneli, altta player bar, ana sayfa kartları, şarkı sözleri görünümü.
|
||
- **Gerçek DSP ses motoru** (numpy/scipy + sounddevice): **30 EQ preset** +
|
||
**10 bant özel EQ** + **🤖 Oto EQ** + efekt paneli (Preamp, Bass Boost, Echo,
|
||
Reverb, **8D Spatial**) — çalarken anında. **Gerçek FFT görselleştirici**.
|
||
- **yt-dlp Python kütüphanesi** + gömülü `ffmpeg.exe`/`deno.exe`: kurulum
|
||
gerekmez. **Ara → 20 sonucu kapaklarıyla gör → satıra tıkla, anında insin**
|
||
(tek tık = tek indirme); dilersen **checkbox ile seçip toplu indir**; ya da
|
||
bağlantı yapıştır → direkt mp3.
|
||
- **📃 Playlist toplu indirme:** YouTube **playlist URL'si** yapıştır → tüm
|
||
parçalar kapaklarıyla önizlenir, **seç ve indir**; ilerleme **X/Y** sayacıyla
|
||
gösterilir, hepsi "İndirilenler" listesine düşer. *(v1.0.4)*
|
||
- **🎤 Stüdyo karaoke (htdemucs / Demucs, YALNIZCA CPU):** şarkıyı gerçekten
|
||
vokal + enstrüman olarak ayırır. Player'daki mikrofon düğmesi bir menü açar:
|
||
**Enstrümantal** (karaoke), **Akapella** (sadece vokal), **⚡ Hızlı karaoke**
|
||
(anında mid-side, motor gerektirmez) ve **Kapat**. Ayrılan stem'ler
|
||
`~/Music/JustMusic/stems/` altında **önbelleğe** alınır → aynı şarkı bir daha
|
||
ayrılmaz (anında geçiş). CPU'da ilk ayırma şarkı başına **~4-5 dk** sürer,
|
||
ilerleme gösterilir; geçiş **çaldığın saniyeyi koruyarak** yapılır.
|
||
- **Akıllı isim & kapak:** dağınık MP3 adları temizlenip "Sanatçı - Başlık"a
|
||
ayrıştırılır, bu temiz adla YouTube kapağı çekilir. "🖼 İsim & Kapak" ile toplu
|
||
senkron.
|
||
- **Otomatik kütüphane:** `~/Music` taranır, her alt klasör bir çalma listesi.
|
||
- **Kuyruk (Sıradaki):** sıraya ekle / sıradaki çal, kuyruk sayfası.
|
||
- **Tam ekran "Şimdi Çalıyor":** kapak renginden gradyan + canlı görselleştirici.
|
||
- **İstatistik sayfası:** toplam parça/liste/süre + en çok dinlenenler (grafik).
|
||
- **Genel arama:** kütüphanede anında arar (şarkı+liste), Enter → YouTube indirme.
|
||
- **Kapak mozaiği** (2×2), **özel vurgu rengi** seçici, **gerçek şarkı süreleri**
|
||
(ffmpeg ile), **indirme göstergesi**, **sürükle-bırak ile listeye ekleme**,
|
||
**klavye kısayolları penceresi**, alt bar mini görselleştirici.
|
||
- **🎚 Crossfade + boşluksuz (gapless) geçiş:** sıradaki parça önden çözülür; eş-güçlü eritme (0–12 sn)
|
||
veya sınırda boşluksuz devam. *(v1.3.0)*
|
||
- **🎮 Discord Rich Presence:** çalan parçayı Discord profilinde göster (opsiyonel, Client ID ile). *(v1.3.0)*
|
||
- **🎭 Theater modu:** tam ekranda kapak + senkron sözler yan yana, aktif satır vurgulu. *(v1.2.1)*
|
||
- **Premium tipografi:** gömülü Sora (başlıklar) + Manrope (gövde) fontları.
|
||
|
||
### 🚀 Çağ açıcı (bize özel DSP) özellikler
|
||
- **🎙 Karaoke / Vokal Azaltma:** gerçek zamanlı merkez-kanal iptaliyle vokali kısar.
|
||
- **🌈 Ruh Hali Motoru:** sesin enerji + parlaklığını analiz edip parçanın "ruh
|
||
halini" (Enerjik/Sakin/Güçlü…) bulur, isteğe bağlı arayüz rengini ona uydurur.
|
||
- **🌊 Şarkı DNA'sı:** parçanın tüm dalga formu (SoundCloud tarzı) — tıklayarak seek.
|
||
- **🔁 A-B Döngü / Pratik Modu:** iki nokta arasında döngü (öğrenmek/çalışmak için).
|
||
- **💡 Ambiyans Işığı:** pencere kenarları müziğin rengi + bası ile titreşir.
|
||
- **🌊 Odak Sesleri:** DSP ile üretilen yağmur / beyaz / kahverengi gürültü
|
||
(müzikle veya tek başına — odak/uyku için).
|
||
- **🎬 Klip Modu (akış — indirme yok):** alt bardaki film tuşu, çalan parçanın
|
||
klibini **yt-dlp ile çözüp internetten oynatır** (`playVideo` → `VideoStreamThread`).
|
||
Ekranı kaplamaz: Spotify gibi ana alana gömülür, kenar çubuğu + alt bar durur
|
||
ve alt bar klibi sürer (oynat/duraklat, seek, ses). **"Sese geç"** ile müziğe
|
||
dönülür — müzik varsayılan dinleme biçimidir. Zaman kodlu sözler varsa
|
||
**klibin üstünde senkron** akar. YouTube'dan inen parçalarda kayıt birebir aynı
|
||
olduğu için **konum iki yönde devredilir** (müziğin 40. sn'si → klip 40. sn'den).
|
||
- **Kalıcı mini oynatıcı:** klip açıkken **sekme/menü değiştirmek akışı KESMEZ** —
|
||
video, YouTube/Spotify gibi köşedeki bir **mini oynatıcıya** iner ve çalmaya
|
||
devam eder; film tuşuna basınca yeniden büyür. Video/ses elementleri bir kez
|
||
kurulup DOM'da yalnızca **taşınır** (yeniden yaratılmaz), böylece yt-dlp'yi her
|
||
seferinde tekrar beklemek gerekmez.
|
||
- Not: QtWebEngine H.264/AAC oynatamaz ve YouTube muxed webm vermez → VP9 video +
|
||
Opus ses **ayrı akış** olarak gelir ve arayüzde senkron tutulur.
|
||
|
||
Ayrıca: 3 durumlu tekrar, liste sıralama, kompakt mod, dosya konumunu aç,
|
||
kalp animasyonu ve daha fazlası. Ses işleme tamamen yerli `DspEngine`'de.
|
||
|
||
### 🎤 Otomatik şarkı sözleri (Lyrica API)
|
||
- Bir parça çalınca sözü yoksa **otomatik** olarak
|
||
[Lyrica](https://test-0k.onrender.com/) servisinden çekilir
|
||
(`/lyrics/?artist=…&song=…×tamps=true&fast=true`).
|
||
- Sözler **zaman kodlu (LRC)** gelir → satırlar çalarken **senkron vurgulanır**,
|
||
satıra tıklayınca o ana atlar. Sanatçı bilgisi yoksa önce `/suggestion` ile bulunur.
|
||
- Sağ paneldeki **"Getir"** butonuyla elle de çekilebilir; kaynak (lrclib,
|
||
Genius, Musixmatch…) bildirilir. Sözler kütüphaneye kaydedilir.
|
||
|
||
### 🧬 Daha da radikal (analiz + üretim)
|
||
- **BPM/tempo tespiti**, **ses eşitleme (loudness normalize)**, **spektrogram**,
|
||
**zaman kodlu (LRC) şarkı sözleri** senkronu, **Komut Paleti (Ctrl+K)**,
|
||
**Ruh Hali Radyosu**, **reverb ortam presetleri** (Oda/Salon/Katedral…),
|
||
**parça kırpma & dışa aktarma** (A-B ile), **akıllı çalma listeleri**.
|
||
- Ayrıca: liste içi **sürükle-sırala**, **özel liste kapağı**, **M3U dışa aktar**,
|
||
**tekrarları kaldır**, **tümünü kuyruğa ekle**, 12 tema, sıradaki önizleme.
|
||
|
||
### 🔧 İndirme mimarisi (ve düzeltmesi)
|
||
- Arama/indirme **yt-dlp'nin PYTHON kütüphanesiyle** yapılır (exe değil):
|
||
gerçek ilerleme kancaları, dönüşüm sonrası **kesin dosya yolu**
|
||
(`requested_downloads[].filepath`) ve anlaşılır hatalar.
|
||
- Modern yt-dlp, YouTube `nsig` korumasını çözmek için bir **JS çalışma zamanı**
|
||
ister → **Deno** (`bin/deno.exe`) gömüldü; `config.py` `bin/`'i sürecin
|
||
PATH'ine ekler, kütüphane Deno'yu otomatik bulur.
|
||
- Sonuç: "sonuç bulunamadı / indirme başarısız" giderildi (gerçek müzik videosu
|
||
indirmesiyle doğrulandı).
|
||
|
||
### 🎨 İkonlar
|
||
Emoji tuşlar **FontAwesome** (gömülü) ile değiştirildi — renk ve arka plan
|
||
tema ile kontrol edilebilir.
|
||
- Sürükle-bırak, favoriler, künye düzenleme, listeler arası kopyalama, hız
|
||
(0.5x–2x), ses boost (100+), uyku zamanlayıcı, 6 tema, JSON yedek.
|
||
- Klavye: `Boşluk` · `←/→` 10 sn · `↑/↓` ses · `S` karışık · `L` tekrar · `N/P`.
|
||
|
||
Veriler `~/Music/JustMusic/` altında (`library.json`, `downloads/`, `covers/`).
|
||
|
||
## 🛠 Kullanılan Araçlar
|
||
|
||
| Katman | Araç | Neden |
|
||
|--------|------|-------|
|
||
| **Arayüz kabuğu** | [PyQt6](https://pypi.org/project/PyQt6/) + **PyQt6-WebEngine** (`QWebEngineView`, `QWebChannel`) | Chromium tabanlı web arayüzü + JS↔Python köprüsü, sunucusuz |
|
||
| **Web arayüzü** | Saf **HTML/CSS/JS** (framework yok) | Spotify seviyesi görsel, tam kontrol |
|
||
| **Ses motoru** | [NumPy](https://numpy.org/) · [SciPy](https://scipy.org/) (`sosfilt`, `lfilter`) · [sounddevice](https://python-sounddevice.readthedocs.io/) | Gerçek zamanlı DSP: EQ, efektler, karaoke, FFT — `QMediaPlayer`'ın yapamadığı |
|
||
| **İndirme** | [yt-dlp](https://github.com/yt-dlp/yt-dlp) (**Python kütüphanesi**) | İlerleme kancaları + kesin dosya yolu + anlaşılır hata |
|
||
| **Kod çözme / MP3** | [FFmpeg](https://ffmpeg.org/) (gömülü `ffmpeg.exe`) | Her biçimi f32 PCM'e çöz, mp3 dönüştür |
|
||
| **JS çalışma zamanı** | [Deno](https://deno.com/) (gömülü `deno.exe`) | YouTube `nsig` korumasını çözmek için şart |
|
||
| **Şarkı sözleri** | [Lyrica API](https://test-0k.onrender.com/) | Zaman kodlu (LRC) senkron sözler |
|
||
| **İkonlar** | [Font Awesome Free](https://fontawesome.com/) (gömülü, çevrimdışı) | SVG ikon — rengi/arka planı tema ile değişir |
|
||
| **Tipografi** | [Sora](https://fonts.google.com/specimen/Sora) + [Manrope](https://fonts.google.com/specimen/Manrope) (gömülü) | Başlık + gövde fontları (latin-ext = Türkçe) |
|
||
| **Paketleme** | [PyInstaller](https://pyinstaller.org/) | Tek `dist\JustMusic\` klasörü (WebEngine + bin + web gömülü) |
|
||
| **Logo** | [OpenRouter](https://openrouter.ai/) → Google **Nano Banana Pro** (Gemini Image) | `logo.png` + `logo.ico` üretimi |
|
||
|
||
> Ses **tarayıcıda değil**, tamamen yerli `DspEngine`'de (sounddevice) çalınır;
|
||
> QtWebEngine yalnızca görseldir. Böylece EQ/efekt kalitesi ve "sunucu yok" garantisi korunur.
|
||
|
||
## 🧩 Kurulum & Çalıştırma
|
||
|
||
```bat
|
||
setup.bat REM .venv + bağımlılıklar (PyQt6, PyQt6-WebEngine, numpy, scipy, sounddevice, yt-dlp)
|
||
run.bat REM çalıştır
|
||
build.bat REM dist\JustMusic\JustMusic.exe üret (~880 MB; WebEngine+ffmpeg gömülü)
|
||
```
|
||
|
||
> **Gömülü ikili araçlar depoda yok** (GitHub 100 MB/dosya sınırı). Çalıştırmadan
|
||
> önce `bin/` klasörüne şunları koyun: **`ffmpeg.exe`** ([indir](https://www.gyan.dev/ffmpeg/builds/)),
|
||
> **`yt-dlp.exe`** ([indir](https://github.com/yt-dlp/yt-dlp/releases)),
|
||
> **`deno.exe`** ([indir](https://github.com/denoland/deno/releases)).
|
||
> (yt-dlp Python kütüphane olarak da `requirements.txt` üzerinden kurulur; `bin/`'deki
|
||
> exe yalnızca yedektir. `ffmpeg` ve `deno` zorunludur.)
|
||
|
||
## 📁 Yapı
|
||
|
||
```
|
||
main.py # QtWebEngine giriş noktası (şema + köprü + pencere)
|
||
justmusic/
|
||
bridge.py # JS↔Python köprüsü (KONTROLÖR): ses, kütüphane, indirme, EQ
|
||
scheme.py # app:// özel şema (web varlıkları + kapaklar)
|
||
engine.py # DSP motoru (EQ+efekt+hız+FFT) — projenin kalbi
|
||
eqpresets.py # 30 EQ profili + bant/efekt tanımları
|
||
library.py # veri modeli + JSON + müzik klasörü tarama
|
||
downloader.py # yt-dlp PYTHON kütüphanesi ile indirme (+ffmpeg mp3)
|
||
covers.py # yt-dlp PYTHON kütüphanesi ile kapak arama/önbellek
|
||
naming.py # MP3 adı temizleme
|
||
config.py # yollar, gömülü bin/web çözümleme
|
||
web/ # index.html, app.css, app.js, qwebchannel.js + fontawesome/ + fonts/
|
||
assets/logo.png
|
||
bin/ffmpeg.exe bin/deno.exe bin/yt-dlp.exe # depoda YOK — kendiniz indirin (deno: nsig/JS çözümü)
|
||
docs/ # README ekran görüntüleri
|
||
setup.bat run.bat build.bat build.py requirements.txt
|
||
```
|
||
|
||
## ℹ️ Not
|
||
|
||
Ses **tarayıcıda değil**, tamamen yerli `DspEngine`'de (sounddevice) çalınır;
|
||
QtWebEngine yalnızca görseldir. Hız artışı pitch'i değiştirir (nightcore); reverb
|
||
çok-taplı "oda" hissidir.
|