bitperfekt lyd Android Android lydresampling USB DAC Android

Bitperfekt lyd på Android: Myte vs virkelighed

Hvad bitperfekt afspilning faktisk betyder på Android, hvorfor det er sværere end du tror, og hvordan du verificerer at din lydkæde ikke hemmeligt resampler din musik.

· 10 min læsetid

Hvad betyder bitperfekt?

Bitperfekt afspilning betyder at de lyddata der når din DAC er identiske med hvad der er gemt i kildefilen. Ikke lignende. Ikke “tæt nok.” Identiske, bit for bit.

For at et signal skal være ægte bitperfekt, må intet i lydkæden ændre dataene mellem dekoderens output og DAC’ens input. Det betyder:

  • Ingen resampling. En 44,1 kHz fil afspilles ved 44,1 kHz, ikke 48 kHz.
  • Ingen lydstyrkejustering. Digital lydstyrkeskalering ændrer sampleværdier.
  • Ingen DSP-behandling. EQ, crossfeed, ReplayGain, limiting — alt dette ændrer signalet.
  • Ingen dithering. Tilføjelse af støj for at maskere kvantiseringsartefakter ændrer stadig dataene.

Hvis et eneste trin i kæden ændrer bare én sample, er outputtet ikke længere bitperfekt. Det er en binær egenskab — der findes ikke noget der hedder “næsten bitperfekt.”

Hvorfor betyder dette noget? Enhver transformation introducerer en vis grad af fejl. Resampling tilføjer interpolationsartefakter. Lydstyrkeskalering reducerer effektiv bitdybde. Selv højkvalitetsbehandling er stadig behandling. For lyttere der har investeret i højopløsningskildefiler og kapable DAC’er, er bevarelsen af det originale signal hele pointen.

Hvorfor Android gør bitperfekt vanskeligt

Enhver lydapp på Android går gennem en systemkomponent kaldet AudioFlinger. Det er lydmixeren og routeren — det centrale knudepunkt der tager lyd fra enhver app på din telefon og kombinerer den til en enkelt outputstrøm til hardwaren.

Problemet er at AudioFlinger har sin egen mening om hvilken samplingsfrekvens din lyd skal have. De fleste Android-enheder konfigurerer AudioFlinger til 48 kHz. Når din musik er ved en anden frekvens — 44,1 kHz for CD-kvalitet, 96 kHz for hi-res — resampler AudioFlinger den for at matche enhedens konfigurerede frekvens.

Denne resampling sker lydløst. Din musikafspiller viser måske “Afspiller: 44,1 kHz FLAC,” men det faktiske signal der når DAC’en er blevet konverteret til 48 kHz af operativsystemet. De fleste afspillere ved ikke engang at dette sker, endsige fortæller dig om det.

Lydstien på Android ser sådan ud:

App -> AAudio API -> AudioFlinger -> Lyddriver -> Hardware

AudioFlinger sidder midt i enhver lydsti. I modsætning til desktopoperativsystemer hvor apps undertiden kan få eksklusiv adgang til lydhardware (Windows WASAPI Exclusive-tilstand for eksempel), tilbyder Android ikke en måde at omgå AudioFlinger helt. Den er altid i kæden.

Dette er vigtigt selv af subtile grunde. Konvertering af 44,1 kHz til 48 kHz er ikke et rent heltalsforhold — det kræver interpolation der introducerer artefakter. Disse artefakter kan være uhørbare på telefonhøjttalere, men på et opløsende hovedtelefonsystem eller en kvalitets-DAC repræsenterer de en unødvendig forringelse af lyd du måske har betalt ekstra for.

USB DAC-løsningen

Eksterne USB DAC’er ændrer ligningen markant. Når du tilslutter en USB DAC til din Android-enhed, kan lyddriveren potentielt understøtte DAC’ens native samplingsfrekvenser i stedet for at være låst til telefonens interne 48 kHz konfiguration.

Nøglen er forhandling af samplingsfrekvens — processen med at forespørge hvilke frekvenser DAC’en faktisk understøtter og anmode om den rigtige:

  1. Appen åbner en midlertidig lydstrøm uden at angive en frekvens og lader Android rapportere hvad USB-enheden nativt understøtter.
  2. Appen anmoder derefter om en strøm ved den optimale frekvens for det aktuelle nummer.
  3. Efter strømmen åbnes, læser appen den frekvens der faktisk blev tildelt tilbage — fordi Android kan have tildelt en anden frekvens end den anmodede.
  4. Hvis den tildelte frekvens ikke matcher kildefilen, skal appen beslutte om den skal resample eller rapportere en fejl.

Mange USB DAC’er understøtter frekvenser fra 44,1 kHz helt op til 384 kHz. Når Androids driver korrekt understøtter den tilsluttede DAC, kan appen anmode om nummerets native frekvens og få den tildelt uden nogen resampling — hverken af appen eller af operativsystemet.

Men “korrekt understøtter” gør et stort stykke arbejde i den sætning. Androids USB audio class-driver håndterer den faktiske USB-kommunikation, og dens adfærd varierer på tværs af enheder og Android-versioner. En DAC der fungerer fejlfrit på én telefon kan have driver-quirks på en anden. Det er virkeligheden for USB-lyd på Android, som ingen app fuldt ud kan abstrahere væk.

Sådan verificerer du bitperfekt afspilning

De fleste musikafspillere fortæller dig ikke hvad der faktisk sker med din lyd. Du ser en “afspiller”-indikator og måske filformatet, men den faktiske signalvej — om resampling fandt sted, hvilken frekvens hardwaren kører ved, om operativsystemet indsatte nogen behandling — forbliver usynlig.

Vi byggede Echobox’ signalvejsdiagnostik til at løse præcis dette. Diagnostikskærmen viser dig hele lydkæden i realtid:

  • Kildeformat — codec, samplingsfrekvens og bitdybde for din fil
  • Afkodningstrin — hvad dekoderen producerede
  • DSP-kæde — hvilke behandlingstrin der er aktive og hvilke der er omgået
  • Outputformat — den faktiske samplingsfrekvens og format der sendes til lyd-API’en
  • Enhedsfrekvens — hvad hardwaren kører ved
  • Resamplingindikator — en eksplicit advarsel hvis resampling finder sted nogen steder i kæden

Hvis din 96 kHz FLAC bliver resamplet til 48 kHz fordi din telefons DAC ikke understøtter 96 kHz, vil du se det. Hvis bitperfekt tilstand er aktiv og alle trin er omgået, vil du også se det. Ingen gætteri, ingen forhåbning, ingen tillid til at “HD Audio”-badges betyder noget.

Dette niveau af gennemsigtighed er sjældent. De fleste afspillere behandler lydpipelinen som en sort boks og giver dig ingen værktøjer til at verificere hvad der sker inde i den. For alle der er seriøse med lydkvalitet, betyder verifikation lige så meget som kapabilitet.

Sådan opnår Echobox bitperfekt output

Vi designede Echobox’ arkitektur i tre lag, hver valgt af en bestemt grund:

  • Flutter håndterer brugerfladen — de skærme du interagerer med.
  • Rust håndterer afkodning, fil-I/O, tilstandsstyring og orkestrering.
  • Zig håndterer realtids-lydcallbacket — koden der kører hver ~10 millisekund når operativsystemet beder om den næste chunk af lydsamples.

Denne adskillelse er vigtig for bitperfekt afspilning. Zig-lydmotoren læser forafkodede samples fra en låsefri ringbuffer (fyldt af Rust) og anvender normalt en syv-trins DSP-kæde: ReplayGain, preamp, parametrisk EQ, crossfeed, lydstyrke, grafisk EQ og limiter.

Når bitperfekt tilstand er aktiveret, omgås hele Zig DSP-kæden. Callbacket kopierer samples direkte fra ringbufferen til outputbufferen uden nogen behandling overhovedet. På Rust-siden gør appen:

  1. Anmoder nummerets præcise native samplingsfrekvens fra lyd-API’en — ikke enhedens standardfrekvens, men den frekvens der matcher kildefilen.
  2. Verificerer hvilken frekvens der blev tildelt ved at læse den faktiske strømkonfiguration tilbage.
  3. Nægter at resample lydløst. Hvis DAC’en ikke kan levere den anmodede frekvens, fejler afspilningen med en klar fejlmeddelelse i stedet for lydløst at forringe signalet.

Kombinationen af direkte samplingsfrekvensforhandling, DSP-omgåelse og gennemsigtig fejlhåndtering giver dig det tætteste på ægte bitperfekt output som Android tillader. Hvad vi kontrollerer — behandlingen på applikationsniveau — er ægte bitperfekt. Hvad der sker inde i AudioFlinger og USB-driveren er op til Android, men for velunderstøttede USB DAC’er med matchende frekvenser sender AudioFlinger typisk samples igennem uden ændring.

Hvornår du MÅSKE IKKE vil have bitperfekt

Bitperfekt tilstand er et værktøj, ikke et universelt mål. Der er fremragende grunde til at lade den være slukket:

Du bruger EQ. Hvis du har en parametrisk EQ-profil der korrigerer dine hovedtelefoners frekvensrespons, vil bitperfekt tilstand omgå den helt. EQ’en fungerer kun når DSP-kæden er aktiv. For mange lyttere producerer velafstemt EQ på gode hovedtelefoner en bedre lytteoplevelse end et bitperfekt signal gennem ukorrigerede hovedtelefoner.

Du bruger ReplayGain. Lydstyrkennormalisering på tværs af dit bibliotek kræver anvendelse af gainjusteringer på hvert nummer. Det er DSP-behandling, og det er deaktiveret i bitperfekt tilstand. Hvis du lytter til albums fra forskellige epoker eller genrer, kan lydstyrkehoppene mellem numre uden ReplayGain være forstyrrende.

Du bruger crossfeed. Hovedtelefon-crossfeed simulerer den inter-aurale krydstale du ville høre fra højttalere og reducerer den overdrevne stereoadskillelse ved hovedtelefonlytning. Det er subtilt, men mange lyttere finder at det reducerer træthed ved lange sessioner. Bitperfekt tilstand omgår det.

Du bruger rumkorrektion. Hvis du har målt dit lyttemiljø og oprettet korrektionsfiltre, er de også en del af DSP-kæden.

Pointen med bitperfekt tilstand er ikke at det altid lyder bedre. Pointen er at have valget. Du kan verificere at din DAC modtager et uændret signal når du vil teste hardware, sammenligne DAC’er, eller simpelthen vide at intet ændrer din musik. Og du kan slå det fra når DSP-behandling ægte forbedrer din oplevelse.

De fleste lyttere vil faktisk få bedre lyd med bitperfekt SLUKKET og en god EQ-profil. Bitperfekt er til verifikation og test, ikke hverdagslytning. Vi byggede begge stier ind i Echobox fordi det ville være uærligt at lade som om ét svar passer til alle.

Den korte version

  • Bitperfekt betyder nul ændring af lydsignalet mellem fil og DAC — ingen resampling, ingen lydstyrkeændringer, ingen DSP.
  • Androids AudioFlinger resampler som standard, typisk til 48 kHz, og de fleste musikafspillere kan hverken omgå det eller detektere det.
  • USB DAC’er tilbyder en vej til bitperfekt ved at understøtte kildefilens native samplingsfrekvens, men succes afhænger af Androids driverunderstøttelse for din specifikke DAC.
  • Verifikation betyder mere end påstande. Echobox’ signalvejsdiagnostik viser dig præcis hvad der sker på hvert trin, så du aldrig behøver gætte.
  • Bitperfekt og DSP udelukker hinanden gensidigt. EQ, crossfeed, ReplayGain og limiting kræver alle ændring af signalet. Echobox lader dig vælge hvad der betyder mest for en given session.
  • Ingen app kan fuldstændigt omgå Androids lydsystem. Vi gør alt inden for vores kontrol for at levere et uændret signal, men AudioFlinger forbliver i stien. For understøttede USB DAC’er ved matchende frekvenser er den typisk gennemsigtig.

Relaterede guides: Forstå FLAC og tabsfri lyd | Hi-res lyd på Android | Rumkorrektion til lyd | Hvad gør en audiofil afspiller


Relaterede guider


Prøv Echobox

Oplev det, disse guider beskriver — præcis afspilning på Android.

Én email per milepæl. Ingen støj.