1 puan yazan GN⁺ 2025-05-24 | 1 yorum | WhatsApp'ta paylaş
  • 2025’te bile iPhone’da kullanıcıya ait müzik dosyalarını özgürce dinleyip eşzamanlamanın zor olması sorunundan yola çıkarak, SwiftUI ile yerel öncelikli bir müzik çalar doğrudan geliştirildi
  • Apple Music aboneliği iptal edilince iCloud Music Library eşzamanlaması duruyor; iTunes Match ise yılda 24,99 $ karşılığında 256 kbps AAC kopyaları çevrim içi saklayan ayrı bir ücretli seçenek
  • React Native/Expo, derin iç içe geçmiş iCloud klasörlerini gezme ve dosya izinlerini ele alma konusunda sık sık başarısız olup çökünce, Apple’ın yerel API’lerini kullanan SwiftUI uygulaması daha basit bir tercih hâline geldi
  • Uygulama, dosya adı ile artist, album, title gibi metadata’yı SQLite FTS5 ile arıyor; iCloud içe aktarma, kütüphane yönetimi ve oynatma ekranlarını ayrı ayrı yapılandırıyor
  • iOS’ta güvenlik kapsamlı yer imleri ve kişisel geliştirme derlemesi kısıtları nedeniyle, bireyin kendi yaptığı uygulamayı uzun süre kararlı biçimde kullanma sürecinde bile dosya erişimi ve dağıtım engelleri sürüyor

Neden kendi müzik çalarımı yaptım

  • iPhone’da kullanıcıya ait müzik dosyalarını çalmak için hâlâ Apple’a ödeme yapmak ya da çeşitli kısıtları aşmak gereken bir durum var
  • Yerel müzik kütüphanesini zaten düzenlemiş kullanıcılar için streaming servisleri zorunluluktan çok bir kolaylık işlevine yakın
  • Apple Music aboneliğini iptal edince iCloud Music Library tabanlı cihazlar arası eşzamanlama duruyor
    • Bu özellik aboneliğin arkasında yer alıyor
    • iTunes Match kullanılırsa yılda 24,99 $ karşılığında tekrar kullanılabiliyor
    • Match, 256 kbps AAC kopyaları çevrim içi saklıyor; kullanıcı değiştirmediği sürece özgün dosyalar aynı kalıyor
    • Abonelik yoksa bulut eşzamanlaması ortadan kalkıyor ve kablo/Wi‑Fi eşzamanlamasına dönmek gerekiyor
  • Amaç; ses dosyalarını içe aktaran, düzenleyen ve çalan temel bir müzik çaları doğrudan yapmaktı
  • Tamamlanan uygulama tam metin arama, iCloud desteği ve yerel öncelikli bir deneyim sunuyor; GitHub’da yayımlandı

Mevcut seçenekler neden uymadı

  • Apple’ın varsayılan uygulamaları

    • Files uygulamasıyla iCloud’daki müzik dosyalarını doğrudan çalmak mümkün, ancak müzik dinleme uygulaması olarak tasarlanmış değil
    • Çalma listesi yönetimi, metadata sıralama ve oynatma kuyruğu gibi temel özellikler eksik
    • Müziği çalmanın kendisi mümkün olsa da genel kullanıcı deneyimi sınırlı; bununla ilgili Apple topluluk tartışmaları da var
  • Üçüncü taraf uygulamalar

    • App Store’da birçok çevrim dışı müzik çalma uygulaması var, ancak kullanıcıların zaten sahip olduğu dosyaları çalan uygulamalarda bile çoğu zaman abonelik tabanlı fiyatlandırma uygulanıyor
    • Doppler, tek seferlik ödeme modeli sunmasıyla avantajlıydı
    • Ancak UX’i albüm yönetimi merkezliydi, arama kalitesi tatmin edici değildi ve çok sayıda iç içe klasör içeren iCloud içe aktarmaları yavaş ve kullanımı zordu

React Native’den SwiftUI’ye geçiş süreci

  • İlk tercih edilen React Native/Expo

    • Geçmiş Swift deneyimi nedeniyle Swift’ten kaçınıp, web geliştirme deneyimini yeniden kullanmaya imkân veren React Native/Expo ilk tercih oldu
    • Oynatma UI’ını yapmak kolaydı ve gereken özelliklere sahip gibi görünen Gionatha Sturba’nın music-player şablonu kullanıldı
    • Sorun dosya sistemi erişimi ve bulut dosya eşzamanlamasında büyüdü
    • expo-filesystem gibi kütüphaneler temel dosya seçimini destekliyordu, ancak derin iç içe geçmiş iCloud dizinlerinde özyinelemeli gezinme sık sık başarısız oluyor ya da uygulamanın çökmesine yol açıyordu
    • iOS sandbox’ı, açık kullanıcı izni olmadan uygulamaların dosya okumasını engelliyor
    • Sonuçta JavaScript tabanlı yaklaşım, Apple’ın yerel API’lerini doğrudan kullanmaktan daha karmaşık hâle geldi; Swift’e geçmek iCloud dosya erişimi ve sandbox izinleri üzerinde daha iyi denetim sağladı
  • SwiftUI’nin seçilme nedeni

    • UIKit veya storyboard yerine SwiftUI seçilerek bildirime dayalı bir UI katmanı oluşturuldu; domain mantığına ve veri eşzamanlamasına odaklanıldı
    • Swift’in async/await ve Swift Actors entegrasyonu, veri akışı ve eşzamanlılık yönetimini kolaylaştırdı
    • SwiftUI, uygulamayı bağımsız ViewModel bileşenleri şeklinde yapılandırmaya yardımcı oldu
    • OpenAI o1 ve DeepSeek gibi LLM’ler, saf UI kodu veya veri bağlama kodu üretirken karmaşık karşılıklı bağımlılıkları daha az oluşturdu

Uygulama yapısı ve veri modeli

  • Üç ana ekran

    • Uygulama Library import, Library management ve Player and playback olmak üzere üç akışa ayrılıyor
    • Library import, iCloud kütüphane klasörünü ekliyor; tüm klasörlerde ses dosyalarını tarayıp yolları SQLite veritabanına ekliyor
    • Library management, eklenen şarkıları yönetiyor ve çalma listelerini oluşturuyor
    • Player and playback; tekrar, karıştırma, kuyruk yönetimi, oynat/durdur ve sonraki şarkı işlevlerinden sorumlu
    • Apple’ın varsayılan dosya seçicisi, anahtar sözcükle aranmış birden çok dizini ve birden çok dosyayı tek seferde seçme akışına uygun değil
    • Uygulama boş kütüphaneyle başlatılırsa Sync sekmesinde “Add iCloud Source” düğmesi gösteriliyor
    • Klasör seçilince ağaç gezinmesi sırasında ilerleme çubuğu gösteriliyor; indeksleme bitince Library sekmesine geçiliyor
    • İlk ekranda Playlists / Artists / Albums / Songs gösteriliyor
    • Bir parçaya dokununca altta Mini-Player beliriyor; buna dokununca tam ekran Player’a geçiliyor
    • Tam ekran Player; shuffle, tekrar, kuyruğu yeniden sıralama ve ses düzeyi sunuyor
    • Sync’te “+”ya basıp başka bir klasör seçilirse yeni şarkılar arka planda birleştiriliyor ve yeniden başlatma gerekmiyor
  • Sunucu tarzı mantık katmanı

    • Mobil uygulama olmasına rağmen web ve bulut backend deneyimine dayanarak backend tarzı bir mimari uygulandı
    • Domain ve mantık katmanları View ve ViewModel katmanlarından ayrılarak bulut eşzamanlaması, metadata ayrıştırma ve SQLite veri erişimi kararlı biçimde işlendi
    • Katman yapısı şöyle
      • SQLite özgün şarkı satırlarını ve FTS indeksini saklıyor
      • Repository veritabanını sarmalıyor ve asenkron API’ler sunuyor
      • Domain Actor; içe aktarma, arama, kuyruk mantığı gibi iş kurallarının sahibi oluyor
      • ViewModel, Actor’a abone oluyor ve UI için struct’lara dönüştürüyor
      • SwiftUI View, kendisine iletilen verileri render ediyor
    • Durum değişiklikleri thread-safe tutuluyor; iCloud eşzamanlaması, oynatma ve UI’ın katmanları doğrudan atlamaması için ayrıştırılıyor

SQLite FTS5 ile yapılan yerel arama

  • Kalıcı depolama için SQLite kullanıldı; CoreData kullanılmadı
  • CoreData’dan kaçınma nedeni; şema, ham sorgular ve özellikle tam metin arama üzerinde doğrudan denetim gereksinimiydi
  • iOS 11 civarından bu yana FTS işlevleri içeren SQLite, ek kurulum olmadan kullanılabiliyor
  • Normal sorgularda SQLite.swift kullanıldı, ancak FTS sorguları düz SQL ifadeleriyle işlendi
  • SQLite FTS5, dosya adı ve artist, album, title gibi metadata’nın ayrı bir arama altyapısı olmadan sorgulanmasını sağlıyor
  • FTS tablo yapısı

    • İki FTS5 tablosu kullanıldı
    • songs_fts: SQLiteSongRepository tarafından kullanılıyor ve artist, title, album, albumArtist alanlarını indeksliyor
    • source_paths_fts: SQLiteSourcePathSearchRepository tarafından kullanılıyor ve fullPath, fileName alanlarını indeksliyor
    • İki FTS tablosu, temel B-tree tabloları olan songs ve source_paths yanında yer alıyor
    • FTS, UI’da salt okunur; tüm yazma işlemleri Repository içinde ele alınıyor
    • songs_fts oluşturma örneğinde songId UNINDEXED bırakılıyor ve unicode61 tokenizer kullanılıyor
    • Farklı karakterleri işleyebilmek için unicode61 seçildi
    • Aranmayan anahtarlar UNINDEXED olarak belirlenerek terim sözlüğünün gereksiz büyümesi engelleniyor
  • Kısmi arama ve sıralama

    • Kullanıcı “lumine” yazınca içeride “lumine*” gibi wildcard eklenerek kısmi arama sonuçları anında bulunuyor
    • Arama sonuçlarını sıralamak için SQLite’ın bm25 işlevi kullanılıyor
    • Bu yöntem öngörülebilir bir şema, yerel öncelikli yaklaşım ve güçlü tam metin arama sunuyor; ağ bağımlılığı veya dış servis eklemiyor

iOS dosya erişimi ve yer imi kısıtları

  • iOS uygulamaları dosya konumlarını hatırlamak için kalıcı yer imleri saklayabiliyor
  • Ancak uygulama sandbox’ı dışındaki dosyalara genişletilmiş erişim veren security-scoped bookmarks yalnızca macOS’ta sunuluyor
  • iOS uygulamaları normal yer imleriyle dosya yolunu hatırlayıp belge seçici aracılığıyla yeniden erişim isteyebiliyor, ancak bu erişimin sessizce sürmeye devam edeceğinin garantisi yok
  • İlgili bilgiler Apple’ın bookmark documentation sayfasında yer alıyor
  • Bunu hafifletmek için dosyaları uygulamanın kendi sandbox container’ına kopyalayan alternatif bir mekanizma geliştirildi
    • Yer imi geçerliyken dosyalar arka planda proaktif olarak kopyalanıyor
    • iOS izinleri sıfırlasa bile hatalı ses dosyası referanslarına erişme riski azaltılıyor
  • Bu yaklaşım indeksleme hızını da iyileştiriyor
    • Erişim etkin durumdayken klasör yapısı bir kez taranıyor
    • Yalnızca ilgili ses dosyaları içe aktarılıyor
    • Derin iç içe geçmiş dizinlerde güvenli biçimde geziniliyor
  • Dış konumlardaki tekil ses dosyalarını cihaz yeniden başlatıldıktan sonra da kararlı biçimde çalma sorunu çözülmedi
  • Yerel uygulamalarda bile bu kullanım senaryosu iOS’ta yeterince desteklenmiyor; dosya erişimini kararlı yönetmek hâlâ karmaşık

Oynatma ve UI uygulaması

  • Metadata ayrıştırma

    • Ses dosyası metadata’sını ayrıştırmak için Apple’ın AVFoundation framework’ündeki AVURLAsset kullanıldı
    • AVURLAsset, title ve album artist gibi medya dosyası metadata’sını inceleyebiliyor
    • Parça numarası gibi bazı alanların ID3 etiketlerinde doğrudan aranması gerekti
    • Resmî belgeler uç durumları yeterince kapsamadığı için GitHub aramasıyla uygulama örneklerinden yararlanıldı
  • Ses oynatma

    • Kütüphane indekslendikten sonra ses çalar, bir AVAudioPlayer örneği başlatılıp çalınacak şekilde uygulandı
    • Control Center’dan müziği kontrol etmek için AVAudioPlayerDelegate protokolünü uygulamak ve Apple’ın MPRemoteCommandCenter’ına bağlanmak gerekiyor
    • MPRemoteCommandCenter, uygulamanın sistem düzeyindeki oynatma kontrollerine yanıt vermesini sağlıyor

Swift ve Apple geliştirme deneyimi

  • Zor olan noktalar

    • Xcode’un gerçek zamanlı SwiftUI preview’leri bir ilerleme, ancak genel geliştirme deneyimi Flutter’ın 5 yıl önce sunduğu VSCode entegrasyonu, gerçek zamanlı simulator reload ve tanıdık debugging araçları düzeyine ulaşmıyor
    • Swift’in Neovim veya VSCode için LSP desteği xcode-build-server gibi ek araçlar gerektiriyor ve web merkezli ekosistemdeki geliştirme deneyimiyle aynı değil
    • Apple SDK’lerinin bir kısmı hâlâ Objective-C tarzında kalmış durumda
    • Spotlight dosya araması yalnızca NSMetadataQuery ile açığa çıkarılıyor; NSMetadataQuery KVO ve string anahtarlar kullanıyor
    • Swift dostu bir wrapper henüz yok
    • SwiftUI’nin bildirime dayalı UI’ı yararlı, ancak iCloud izinlerinin işin içine girdiği tüm uygulama davranışı preview’de emüle edilemiyor; bulut etkileşimlerini doğrudan mock etmek gerekiyor
  • İyi olan noktalar

    • async/await sayesinde I/O ağırlıklı eşzamanlılık kodu callback olmadan, imperative kod gibi yazılabildi
    • Actor içine senkron kodu da kolayca koyup JavaScript ekosistemindekine benzer şekilde çağırmak mümkün oldu
    • React Native veya Flutter’ın açık kaynak binding’leriyle sınırlı kalmadan Apple’ın yerel kütüphaneleri doğrudan kullanılabildi
    • Birçok Apple API’sinde örnekler bulunduğu için başlamak kolaydı
    • SwiftUI’nin React tarzı UI oluşturma biçimi üretkenlik ve keşif alanı sağlıyor

Kişisel bir uygulamayı iOS’ta uzun süre kullanmak zor

  • Yaklaşık 1,5 haftalık geliştirme sonunda iCloud depolamasından ses dosyalarını içe aktarabilen yerel/çevrim dışı bir müzik çalar yapıldı
  • Ancak geliştirici sertifikası yoksa uygulama yalnızca 7 gün çalışıyor; sonrasında yeniden derlemek gerekiyor
  • Apple Developer Program’a kaydolmak için 99 $ ödemek gerekiyor
  • AB’nin DMA Act sonrasında bile sideloading tamamen açılmış değil
    • AB kullanıcıları geliştirici sitesinden üçüncü taraf marketplace uygulamaları yükleyebiliyor
    • Geliştiricilerin hâlâ Apple’ın yıllık 99 $’lık programına kaydolması gerekiyor
    • Apple’ın Alternative Terms koşullarını da kabul etmeleri gerekiyor
    • Kişisel ve hobi amaçlı kullanımda 7 günlük geliştirme derlemesi sınırı ortadan kalkmıyor
  • iOS PWA’larında da kısıtlar sürüyor
    • iOS 16~18.x güncellemelerinden sonra bile PWA’lar Safari sandbox’ı içinde çalışıyor
    • WebGL2 ve web-push kullanılabiliyor
    • Web Bluetooth, USB, NFC, Background Sync ve yaklaşık 50 MB’ı aşan garantili depolama sunulmuyor
    • WebGL, Metal shim üzerinden geçtiği için gerçek frame rate çoğu zaman yerel Metal uygulamalarının gerisinde kalıyor
  • Yapay zeka, aşina olunmayan teknolojilerle çalışmak için gereken bilgiyi daha erişilebilir kılarak yazılım geliştirme karmaşıklığını azalttı; ancak iOS uygulamaları hâlâ yapay kurallara uymak zorunda
  • Bireyin kendi yaptığı uygulama bile bir haftadan uzun çalışacaksa Apple’ın son engeli varlığını koruyor; bu da kişisel uygulama geliştirme ve dağıtımını kısıtlıyor

1 yorum

 
GN⁺ 2025-05-24
Hacker News yorumları
  • Winamp’ın varsayılan müzik çalar olduğu dönemlerden geçtim ve streaming çağında bile yerel müzik arşivimi hâlâ klasörler halinde düzenli tutuyorum.
    Buradaki yorumlardaki diğerleri gibi, çevrimdışı müzik dinlemek için hobi projesi olarak eski usul bir müzik çalar yaptım; tek sayfalık bir HTML/JS uygulaması ve tam klavye kontrolü ile basit bir kuyruk özelliği var.
    Buradan bakabilirsiniz: https://nobsutils.com/mp

    • Yaklaşık 27 yıl sonra bile Winamp UI’ının doğruya oldukça yakın olduğunu düşünüyorum.
      Bir dizindeki dosya grubu, tüm koleksiyonu karıştırma, yalnızca belirli bir dizini çalma gibi basitlikleri hoşuma gidiyordu.
    • Böyle basit bir müzik çalar arıyordum, hoşuma gitti.
      Bu arada, şu an standart yer imi kısayolu olan cmd + d, web sitesini yer imlerine eklemek yerine temayı değiştiriyor.
    • Benim için varsayılan müzik çalar her zaman foobar2000’di; şimdi onun yerine Cog uygulamasını kullanıyorum.
  • 25 yıldır müzik koleksiyonumu FLAC formatında oluşturuyordum; geçen yıl bir Android telefon ve 1 TB MicroSD kart aldım, böylece tüm müziğimi içine koyabilir oldum.
    Teknolojinin yetişmesini beklemek uzun bir projeydi ama artık hepsini cebime koyabildiğim için oldukça memnunum.
    Sektörün dayattığı şeyleri stream edip reklamlara katlanırken kontrolü bırakan bir kiracı olmak istemeyen tek kişi ben olamam; kendi uygulamasını bile yapan insanları görmek de harika.

    • Teknoloji aslında uzun zaman önce yetişti; bu daha çok amaca uygun olmayan bir formatta ısrar etmek gibi.
      İyi yeniden kodlanırsa, farkı duyamayacağınız şeffaf ses kalitesiyle tüm müziğinizi çok daha küçük bir karta sığdırabilirsiniz; yedek olarak da masaüstünde FLAC tutarsınız.
    • Koleksiyonu seçme işini gerçekten iyi yapmışsın.
      Benim koleksiyonumun yalnızca yaklaşık %25’i FLAC/APE/ALAC/WavePack olmasına rağmen 3 TB’ı aşıyor; bu yüzden hareket halindeyken müzik dinlemek zor.
      Mobil cihaza ne koyacağımı önceden seçemiyorum.
    • Ben de 25 yıldan çok daha kısa süredir olsa da kişisel koleksiyonumu yalnızca FLAC olarak oluşturuyorum ve şimdiden 1 TB’ı geçti.
      Sunucu olarak https://www.navidrome.org, istemci olarak https://symfonium.app kombinasyonu çok iyi oldu.
      Artık 2 TB SD kartlar da var; fiyatı düşünce muhtemelen bir tane alırım.
    • Android’de kapak görseli ve başlık konusunda hep kararsız sorunlar yaşadım.
      Değiştirsem de uygulanmıyor ya da uygulanmışken birden alakasız bir kapağa dönüyordu; dışarıdan bakınca Android hatası gibi görünüyordu.
      Böyle bir sorun yaşayıp yaşamadığını merak ediyorum.
  • Albümlerin tamamını dinleyebilmek, ama arada duraklayıp cihaz değiştirebilmek için kendim bir web uygulaması yaptım.
    Albümleri baştan sona dinlemeyi seviyorum; en azından YouTube Music çalma konumunu hatırlamıyor ve başka bir cihazda albümü tekrar açıp kaldığım yeri bulmam gerekiyor, bu da rahatsız ediciydi.
    Web uygulamamda URL yapıştırınca sunucu yt-dlp ile indiriyor ve oradan stream edilebiliyor; çalma konumunu her zaman hatırladığı için arabada telefondan dinleyip işte dizüstü bilgisayardan devam edebiliyorum.
    NTS Radio gibi başka kaynaklardan miks eklerken de iyi uyuyor.

    • YouTube Music’te en sinir bozucu bulduğum şey tam olarak kaydedilebilir bir kuyruk ve daha akıcı cihaz geçişiydi.
      Herkese açıksa o web uygulamasına bir göz atmak isterim.
  • Henüz tamamını okumadım ama güzel bir yazı; geliştiricinin daha ayrıntılı kararları nasıl ve neden aldığını okumayı seviyorum.
    Denediği ses çalarların hoşuna gitmediği fikrine katılıyorum.
    Müzik uygulamaları dünyasında ekran düzeni ve UI neredeyse evrenselleşmiş gibi; ben bunu sevmiyorum ve pek de anlamıyorum.
    Her müzik uygulamasıyla boks yapıyormuşum gibi hissediyorum, bu yüzden yeni bir şey denemek isteyen birini görmek güzel.

  • Hâlâ Apple Music uygulamasına kendi yerel dosyalarımı koyup kullanıyorum.
    Apple Music streaming servisini kapalı tutuyorum, macOS’teki Apple Music uygulamasına her şeyi içe aktarıyorum, sonra da 2007’deymiş gibi telefonu dizüstüne takıp iPod gibi senkronize ediyorum.
    Her şey beklediğim gibi çalışıyor; müziklerim sık değişmediği için senkronizasyon da sorun olmuyor.
    Kablolu senkronizasyon yaparken garip bir nostalji de hissediyorum.

    • Bildiğim kadarıyla iTunes ile otomatik Wi‑Fi senkronizasyonu da hâlâ gayet iyi çalışıyor.
  • async/await yokken Swift’te eşzamanlılık kodunun Go veya JS/TS’ye kıyasla daha kaba ve daha çok boilerplate içerdiği fikrine katılmakta zorlanıyorum.
    Asenkron işleme, eşzamanlılık kodu yazmayı kolaylaştırabilir; ancak kod tabanı büyüdükçe akıl yürütmeyi daha az basit hale getirebilir.
    Karmaşık asenkron kod tabanlarında kod akışını ve eşzamanlılığı anlamak daha zordur.
    Amaç thread üzerinde kod çalıştırma maliyetini azaltmaksa çözüm hafif green thread’lerdir; amaç thread kodunun bakım maliyetini azaltmaksa asenkron yaklaşım uzun vadede daha fazla emek gerektirebilir.

    • İyi eşzamanlılık, kod büyüdükçe anlamayı ve akıl yürütmeyi daha basit hale getirmelidir.
      Yalnızca süreç ya da servis tabanlı kapsülleme bile büyük fayda sağlar.
      Bunun eşzamanlılığın kendisinin başarısızlığı değil, daha çok async/await soyutlamasının sınırı olduğunu düşünüyorum.
    • Bu durumda hedef basit bir ses çalar olduğu için muhtemelen büyük bir sorun olmayacaktır.
  • Yazının yalnızca şarkıları yöneten ve çalan yazılımdan değil, fiziksel bir cihazdan da bahsetmesini beklemiştim
    Birkaç yıl önce müzik dinlemeyi gerçekten seven ama henüz telefon kullanmaya hazır olmayan 10 yaşındaki oğluma bir MP3 çalar almak istemiştim; seçeneklerin bu kadar içler acısı olmasına şaşırmıştım
    Apple’ın iPod’u sonlandırarak kimsenin dolduramadığı büyük bir boşluk yarattığını düşünüyorum
    USB bellek biçimindeki iPod shuffle, bugüne kadar kullandığım en iyi MP3 çalardı; küçüktü, ayrı kablo gerektirmeden takılabiliyordu ve pili de uzun gidiyordu
    Müziklerde gezinmek için ekranı yoktu ama zaten amaç buydu; işi shuffle’a bırakıyordunuz
    Bu kadar nispeten basit bir fikrin bile donanım pazarında doğru düzgün kopyalanmamış olması üzücü
    İnsanlar bunun donanım değil yazılım/DRM sorunu olduğunu söyleyecektir ama iyi ve ucuz taşınabilir müzik çalma cihazlarının olmaması gerçekten çok yazık

    • Buradaki asıl değişimin iPod’un yok olması olmadığını düşünüyorum
      MP3 çalarları Spotify ve akıllı telefonlar öldürdü; ikisi de pazarın havasını o kadar çok kapladı ki geriye kalanları boğdu
    • Fiio bu kategoride epey ürün yapıyor
      Örneğin https://www.fiio.com/cp13 ve https://www.fiio.com/jm21 var
    • Çok sayıda ikinci el iPod var ve eski sabit diskli modellerin önemli bir kısmını flash depolamaya dönüştürmek de oldukça kolay; bu da bir seçenek olabilir
      Elektronik ve “eski” cihazları yeniden değerlendirmeyi öğrenmek için küçük bir eğitim projesi olarak da iyi olur
      Dış görünümü özelleştirmek için çok sayıda seçenek var; Bluetooth veya USB‑C eklemek gibi daha derin modifikasyonlar da mümkün
      Başkalarının da söylediği gibi yazılım tarafı da Windows’ta iTunes, macOS’ta Finder/Music entegrasyonu ile hâlâ gayet iyi çalışıyor
    • Bunun donanım ya da yazılım sorunundan çok talep sorunu olduğunu düşünüyorum
      Çinli üreticiler, Mini iPhone 16 veya Mini S24 gibi güzel görünen, müzik çalabilen ve akıllı telefon işlevleri de olan cihazları 50–100 dolara satıyor
      Ebeveynlerin MP3 çalar yerine çocuklarına buna benzer cihazlar alma olasılığı daha yüksek
      14 yaşındaki oğluna telefon vermemek alışılmışın dışında bir ebeveynlik yaklaşımı ve buna saygı duyuyorum; ancak bu tür bir talep, mevcut olası arzın ötesine geçecek kadar büyük görünmüyor
    • Sony hâlâ Walkman markasıyla oldukça iyi çalarlar üretiyor: https://electronics.sony.com/audio/walkman-digital-recorders...
      10 yaşındaki bir çocuk için pahalı olabilir ama eBay’de ikinci elini bulmak mümkün olabilir
  • Yerel müzikleri Music.app ile yönetip Finder’ın iPhone eşzamanlamasını kullanma kombinasyonu benim için hâlâ iyi çalışıyor
    Ancak Music.app, berbat Big Sur yeniden yazımından sonra yıllardır bakımsız kalmış gibi görünüyor ve can sıkıcı hataları da var
    Kusurlarına rağmen bu kombinasyon, gördüklerim arasında en iyi müzik kitaplığı yönetimi + mobil eşzamanlama çözümü; fakat yazılımın bakımı yapılmıyor ve çapraz platform da değil, bu yüzden sonunda kendi sistemimi yazmam gerekecek gibi

    • Music “yeniden yazımının” sorunlarının bir kısmı, bunun gerçek bir yeniden yazımdan çok iTunes’tan kopyala-yapıştır yapılmış olmasına dayanıyor
      OS 9 döneminden kalma izler taşıyan modal ayarlar/tercihler penceresi gibi iTunes’a özgü tuhaflıkların çoğu hâlâ duruyor
      OS X ayarlar penceresi modal olmamalı
      Baştan yapılmış WinUI tabanlı Windows için Music gibi, sıfırdan yeniden yapılmış bir sürüm üzerinde içeride çalışıyor olduklarını tahmin ediyorum
      1. nesil Video iPod’umda yerleşik Finder eşzamanlaması hâlâ oldukça bozuk
        En sinir bozucu olan podcast eşzamanlamasıydı; iTunes’un sorumlu olduğu dönemde iyi çalışıyordu ama Big Sur’daki Finder eşzamanlamasında bir hata var: başka bir parçaya veya podcast’e gidip geri dönünce oynatma konumunu hatırlamıyor
        Bu yüzden birkaç dakikadan uzun podcast’ler cihazda fiilen kullanılamaz hâle geliyor
    • Benim uygulamamı da deneyebilirsiniz: https://www.plastaq.com/minimoon
  • İnsanlar Android’e geçmek yerine gerçekten kendi müzik uygulamalarını yazıyor
    Bunun mavi konuşma balonları yüzünden mi, yoksa çevrimdışı müzik çalma hariç her şeyin “öylece çalışması” yüzünden mi olduğunu merak ediyorum

    • Sırf ekmeği daha lezzetli diye gerçekten başka bir ülkeye taşınır mısınız?
      Kendiniz pişirmenin nesi sorun, bilmiyorum
    • iOS için bir müzik çalar prototipi yaptım
      Çünkü VLC uygulaması dosya sunucumdaki FLAC’ların meta verilerini güvenilir biçimde ayrıştıramıyordu ve depolama sınırları yüzünden tüm müzik koleksiyonumu cihaza kaydedemiyordum
      Uygulamam, daha fazla özellik istemem açısından hâlâ prototip; ama ses çalma, uzak dosya erişimi ve FLAC meta verisi ayrıştırma var, yani ek özellikleri uygulamaya motive olmayacak kadar çalışıyor
      Yazardaki gibi başta deneyimim olduğu ve bakımını yaptığım birkaç uygulama da bulunduğu için React Native kullanmak istedim; ancak başka platformları hedeflemek ya da hata ayıklamak istemedim
      Bu yüzden SwiftUI’ı denemeye karar verdim ve özel bir araçla[1] hot reload benzeri bir şey yaptım
      Xcode’a özel linker bayrakları eklemeyi gerektiren epey kirli bir hack ama TypeScript ve React Native’in geliştirici deneyimini aratmayacak kadar çalışıyor
      [1] https://github.com/johnno1962/InjectionIII
    • İnsanlar gerçekten Android’den kaçınmak için kod yazıyor
    • foobar2000 uzun zamandır App Store’daydı
      Açıkçası yazarın hoşuna giden ücretsiz bir müzik uygulaması bulamamış olması bana biraz tuhaf geliyor
      Yine de bir şeyler yapmak için illa bir bahaneye gerek yok; bu, hikâyeyi başlatmak için bir anlatı da olabilir
    • iOS’ta navidrome/substreamer uygulama kombinasyonunu kullanıyorum ve iyi çalışıyor
      Seçilen müzikleri cihazda tutmak da mümkün
  • Çevrimdışı bir müzik koleksiyonunuz varsa https://play.google.com/store/apps/details?id=in.krosbits.mu... uygulamasını gerçekten öneririm
    Sorunsuz şekilde iyi çalışıyor

    • Symfonium da harika
      Plex, Jellyfin, WebDAV, SMB gibi şeyleri de destekliyor