Preskoči na sadržaj
← Sve bilješke o projektima

HARDVER + SOFTVER + GLAZBA / BILJEŠKE 02

Audio streamer

MILA*

Osobni audio streamer · U razvoju

Glazbeni projekt koji povezuje moje zanimanje za računala, praktično rješavanje problema i svakodnevno slušanje. MILA* spaja postojeći hardver sa sučeljem koje mogu oblikovati prema vlastitim potrebama.

MILA* reproducira album Finka, s formatima izvora i DAC-a iznad reda reprodukcije grupiranog po albumima
Player — reprodukcija albuma, formati izvora i DAC-a te red reprodukcije · 23. listopada 2026. · Klikni za povećanje

Od frustracije do projekta

Glazbu slušam svaki dan, uz veliku osobnu zbirku hi-res FLAC datoteka, internetski radio i streaming. Streameri koje sam koristio frustrirali su me: spori izbornici pri pretraživanju većih zbirki, povremeni prekidi veze i ograničene mogućnosti prilagodbe. Želio sam i izravnu kontrolu obrade zvuka — bit-perfect prijenos datoteka visoke rezolucije, izbjegavanje neželjenog preuzorkovanja i provjeru onoga što DAC stvarno prima.

Odlučio sam izraditi svestran player: namjenski uređaj koji bez kompromisa povezuje lokalnu reprodukciju visoke rezolucije, internetski radio i streaming. Umjesto stalno uključenog glavnog računala, pogledao sam hardver koji sam već imao: Raspberry Pi 5, dodirni zaslon, brz NVMe disk za glazbu, USB DAC i linearno napajanje. Zapisao sam zahtjeve i počeo oblikovati streamer prema njima.

Cilj je bio jasan: svestran player koji lako reproducira FLAC albume visoke rezolucije, drži radio i streaming pri ruci te ostaje potpuno odzivan i jasan u svom ponašanju.

Jedno sučelje za svakodnevno slušanje

Player povezuje kontrole reprodukcije s redom čekanja, favoritima i nedavno reproduciranim ili dodanim sadržajem. Filtri izvora omogućuju prelazak između lokalne glazbe, radija i streaminga unutar istog sučelja.

Ugrađeni dodirni zaslon glavni je način upravljanja. Isto web-sučelje može se otvoriti s telefona ili računala u lokalnoj mreži. Reprodukcija ostaje na streameru; ostali uređaji služe kao daljinski upravljači.

Mobilni MILA* player s omotom albuma, kontrolama reprodukcije, popisom pjesama i donjom navigacijom
Mobilni prikaz — kontrole reprodukcije i pjesme albuma · 23. listopada 2026. · Klikni za povećanje

Zbirka koju mogu istraživati

Velika zbirka hi-res FLAC datoteka zahtijeva brzo i intuitivno sučelje. Lokalna glazba može se pregledavati po albumu, izvođaču, žanru ili mapi, uz pretraživanje, sortiranje i abecednu navigaciju. Brza NVMe pohrana na Pi-ju omogućuje trenutačno učitavanje omota i metapodataka.

Želim da pregledavanje bude povezano sa slušanjem: otvori album, odaberi pjesmu, vrati se u zbirku i upravljaj redom reprodukcije bez gubitka mjesta.

Lokalna glazbena zbirka MILA* s omotima albuma i kontrolama pregledavanja
Zbirka — albumi, izvođači, mape i stalne kontrole reprodukcije · Klikni za povećanje

Radio bez nereda

Radijski prikaz odvaja moju zbirku stanica od otkrivanja novih. Povezuje spremljene stanice, pretraživanje, nedavno slušano i filtre za zemlju, žanr i kvalitetu. Mogu se dodati i vlastiti streamovi.

Pouzdano slušanje u pozadini važan je razvojni cilj. Kad stream ili veza zakažu, sučelje treba objasniti što se dogodilo i ponuditi jasan put oporavka. Dugo slušanje i provjere oporavka dio su preostalog testiranja.

MILA* Moje stanice sa spremljenim radijskim stanicama, filtrima i stalnim mini-playerom
Radio — spremljene stanice, otkrivanje i mini-player · 18. listopada 2026. · Klikni za povećanje

Streaming i upravljanje zvukom

Qobuz je integriran preko Lyrion Music Servera. AirPlay, Spotify Connect i Bluetooth također su dio rada na prijamnicima, uz zasebno praćenje podrške i provjera tijekom razvoja.

Glavni put reprodukcije koristi Lyrion Music Server → Squeezelite → USB DAC. Cilj mi je izbjeći nepotrebno preuzorkovanje i digitalne promjene glasnoće za podržani sadržaj. Sučelje razlikuje kvalitetu izvora od formata koji se trenutačno prijavljuje na izlazu DAC-a.

Ta je razlika važna: izlaz prikazan kao 32-bitni ne pretvara komprimirani radijski stream u kvalitetniji izvor. Prikaz formata pomaže u istraživanju, ali sam po sebi ne dokazuje bit-perfect reprodukciju.

MILA* prikaz trenutačne reprodukcije preko cijelog zaslona s omotom albuma BEAK, kontrolama i odvojenim oznakama formata izvora i DAC-a
Trenutačna reprodukcija — slušanje preko cijelog zaslona · 18. listopada 2026. · Klikni za povećanje

Postavke koje pripadaju playeru

Izgled, zvuk i usluge, pohrana glazbe i održavanje sustava organizirani su u četiri cjeline. Projekt uključuje teme i opcije zaslona, mjerače, podatke o uređaju i alate za sigurnosne kopije korisničkih podataka. Osjetljive radnje sustava imaju zaštićene kontrole.

Čuvari zaslona i vizualni detalji dio su iskustva, ali koriste isti vizualni jezik kao zasloni za slušanje i pregledavanje.

Postavke MILA* organizirane u četiri cjeline
Postavke — izgled, zvuk, pohrana i održavanje · Klikni za povećanje
Zaslon ažuriranja sustava MILA* s dostupnim paketima i zaštićenim kontrolama ažuriranja
Ažuriranja sustava — dostupni paketi i kontrole · 22. listopada 2026. · Klikni za povećanje

Moja uloga i način rada

Moje iskustvo obuhvaća hardver, kontrolu kvalitete i analizu kvarova, a tako vodim i MILA*. Vodim projekt: definiram zahtjeve, odlučujem kako se sustav treba ponašati, testiram svaku izmjenu na stvarnom uređaju i odlučujem što se objavljuje. AI asistenti za programiranje pišu velik dio implementacije pod mojim vodstvom. Usmjeravanje tog rada i provjera rezultata zasebna su vještina.

Temelj reprodukcije čine Lyrion i Squeezelite; moja aplikacija povezuje izvore, kontrole i funkcije uređaja u usklađeno iskustvo.

Rad je iterativan: primijeti problem, ponovi ga, istraži uzrok, napravi izmjenu i provjeri rezultat. Primjeri u nastavku prate taj obrazac. Nakon završenog obrazovanja za Java developera kroz projekt produbljujem i razumijevanje Pythona.

Primjer iz razvoja · 01

Dosljedni favoriti

01 / Problem
Jedna je radnja mogla dvaput dodati isti favorit. Spor odgovor mogao je stići nakon novije izmjene i ponovno prikazati stariji popis.
02 / Istraživanje
Pregled razvoja pokazao je da dva prikaza popisa dijele istu temeljnu kolekciju. Otkrivena su i mjesta na kojima su stariji odgovori još mogli prebrisati aktualne favorite.
03 / Izmjena
Popisi su razdvojeni, a novije potvrđene promjene sada imaju prednost pred ranijim odgovorima. Neizvjesna se radnja prijavljuje umjesto automatskog ponavljanja.
04 / Provjera
Ciljane automatizirane provjere obuhvatile su dvostruka dodavanja, zakašnjele odgovore i potvrđene promjene. Dokumentirano ažuriranje instalirano je, a prikaz favorita pregledan na Pi-ju. Dulja uporaba i istodoban rad više klijenata ostaju dio daljnje provjere.

Primjer iz razvoja · 02

Naredbe koje su samo izgledale uspješno

01 / Problem
Naredbe Play, Pause i Next mogle su zakazati bez obavijesti u sučelju. Odbijene naredbe tiho su se zanemarivale, a odgovor glazbenog poslužitelja koji je sadržavao pogrešku mogao se protumačiti kao uspjeh.
02 / Istraživanje
Pregled je pratio naredbu od dodirnog gumba preko pozadinskog sustava do Lyrionova JSON-RPC sučelja. Nedostajući rezultat pretvarao se u prazan „uspjeh”. Izgubljen mrežni odgovor također ništa ne govori o tome je li naredba stvarno izvršena.
03 / Izmjena
Svaka naredba sada završava jednim od triju ishoda: potvrđeno, odbijeno ili nepoznato. Nepoznat ishod prikazuje upozorenje da je naredba možda već izvršena. Naredbe se namjerno ne ponavljaju automatski: ponavljanje preklopne naredbe Play/Pause moglo bi poništiti onu koja je uspjela.
04 / Provjera
Novi automatizirani scenariji obuhvatili su odbijene, neispravne i izgubljene odgovore. Ažuriranje je instalirano uz novu sigurnosnu kopiju; glazbeni poslužitelj nastavio je raditi, a player je prijavljivao reprodukciju prije i nakon instalacije.

Primjer iz razvoja · 03

Prekid veze bez lažnih uzbuna

01 / Problem
Kad bi sučelje izgubilo kontakt s playerom, zaslon bi nastavio prikazivati posljednje poznato stanje bez naznake da je možda zastarjelo.
02 / Istraživanje
Dohvat statusa već je ispravno obrađivao istek vremena i zakašnjele odgovore pa su nedostajale povratne informacije, a ne podaci. Pitanje je bilo što smatrati kvarom: jedan spor odgovor ili kartica preglednika u pozadini ne bi trebali izazvati uzbunu.
03 / Izmjena
Dvije uzastopne neuspjele provjere statusa sada prikazuju diskretnu obavijest da status nije dostupan i da player prikazuje posljednju poznatu reprodukciju. Nakon povratka veze nakratko se pojavi obavijest o oporavku. Obavijest ništa ne pokreće ni ponavlja pa ne može prekinuti reprodukciju.
04 / Provjera
Pet novih automatiziranih scenarija obuhvatilo je prekid, oporavak, pojedinačne pogreške i skrivenu stranicu. Na Pi-ju obavijest ostaje skrivena tijekom normalnih provjera; izgled je pregledan u odvojenom pretpregledu. Još nisam izazvao stvaran mrežni kvar na uređaju kako bih je provjerio ondje.

Ovi primjeri pokazuju pristup koji donosim iz kontrole kvalitete: istražiti uzrok, dokumentirati izmjenu i provjeriti rezultat, uz jasno navođenje onoga što još nije provjereno.

Testiranje i objave

MILA* radi na uređaju koji svakodnevno slušam pa je izmjena dovršena tek nakon provjere.

Povratak na prethodnu verziju obuhvaćen je ciljanim testovima; kontrolirana provjera na stvarnom hardveru još je na popisu.

Hardver i temelj sustava

Fotografije mog sustava za slušanje s dodirnim zaslonom, DAC-om, linearnim napajanjem i zvučnicima. Pozadine su ublažene radi prezentacije.

MILA sustav za slušanje sprijeda, s dodirnim zaslonom, DAC-om, linearnim napajanjem i zvučnicima
Moj sustav za slušanje — prednji pogled · Klikni za povećanje
Komponenta Uloga
Raspberry Pi 5 Namjensko računalo koje pokreće streamer
NVMe disk Lokalna pohrana glazbe
Topping E50 USB DAC Audioizlaz
10-inčni dodirni zaslon Ugrađeno upravljačko sučelje
Namjensko linearno napajanje Napajanje DAC-a
Edifier MR5 zvučnici Moj sustav za slušanje

Softver: Raspberry Pi OS · Lyrion Music Server · Squeezelite · Python · HTML/CSS/JavaScript

Trenutačno stanje

MILA* je funkcionalan osobni prototip u aktivnom razvoju. Trenutačan fokus su stabilno slušanje, oporavak nakon prekida i dosljedno ponašanje na različitim veličinama zaslona. Neke integracije i tijekovi rada još traže doradu i provjeru u stvarnim uvjetima prije stabilne objave.

Izvorni kod nalazi se u privatnom repozitoriju. Rado ću u razgovoru predstaviti kod, testove i povijest objava.