Murmur

Murmur: mätning

Fas 0. Sidan mäter nätet, ljudkedjan och AAC:ens encoder-delay på just den här telefonen. Resultatet skickas till serverns logg.

Klocksynk mot servern

Tillståndansluter ...
Offset–
RTT (median)–
Jitter–
Spridning i offset–

Spridningen är det som avgör hur mycket offsetvärdet går att lita på. Under några ms är bra; stiger den är nätet för oroligt för att lita på en enskild mätning.

Knappen behövs för att iOS över huvud taget ska släppa fram ljud. AudioContext får bara startas i en användargest.

Ljudkedjan

Web Audio–
Samplingsfrekvens–
outputLatency–
baseLatency–
getOutputTimestamp–
Bluetooth–

AAC encoder-delay

Statusväntar
WAV, första ljudet–
M4A, första ljudet–
Skillnad–

Skillnaden är den fördröjning AAC lägger till enligt den här webbläsaren. Är den olika på iOS och Android får flocken en konstant plattformsoffset som ingen klocksynk kan rätta. Den måste kompenseras separat.

Telefonen tickar fem gånger och lyssnar på sig själv. Mikrofonen används bara under mätningen och släpps direkt efteråt. Knappen blir tillgänglig när ljudmätningen ovan är klar.

Akustisk slinga

Statusväntar
Slinga, högtalare till mikrofon–
Spridning mellan tick–
Signal över brus–
Mikrofonens behandling–
Dom om outputLatency–

Slingan är hela vägen från schemalagd sampel till ljudet är tillbaka i inspelningen. Utgångslatensen är en del av den och kan aldrig vara större. Påstår outputLatency mer än slingan är påståendet omöjligt, och telefonen kommer att ligga konstant fel i flocken. Spridningen mellan de fem ticken säger hur mycket mätningen går att lita på: under en millisekund är bra.

Kör samma mätning mot en påhittad fördröjning inuti telefonen. Svarar den rätt fungerar inspelningen och tidräkningen, och en avvikande akustisk mätning beror då på rummet och inte på koden.

Självtest av mätkedjan

Statusväntar
Lutning–
Fast del, telefonens buffring–
Satt → mätt–

Lutningen är domen. Ökar den påhittade fördröjningen med hundra millisekunder ska mätvärdet göra detsamma, alltså lutning 1,0000. Den fasta delen är telefonens egen buffring och ska inte vara noll.

Ljudklockans drift

Avvikelseväntar
Motsvarar–

Ljudhårdvaran går på sin egen kristall. Driften är varför två telefoner glider isär över tid även när de startade exakt samtidigt.

Enhet

Rapport till servern–