30 mars 2007

Digital musik och mp3-avkodningens mysterier

Kalla mig gärna bakåtsträvare (även om det är fel), men jag tycker fortfarande att cd-skivor är det bästa mediet för musik. Fast sörjer att Internet och nedladdningen dödar skivbutikerna gör jag inte, jag köper numera nästan alla skivor över Internet. Man får tag på allting där ute, av de mest varierade artister och i de mest obskyra genrer, som inte ens en aldrig så entusiastisk ägare till en aldrig så dammig skivbutik skulle få för sig att importera. Spännande skivletande på obskyra ställen får man också utlopp för på nätet.

Är man vinylentusiast bör man också trivas bäst på nätet. Där går det att hitta gamla plattor likväl som nysläpp för DJ-bruk. Själv har jag länge velat åt den där housemusiken som bara släpps på vinyl, men jag är som sagt cd-konsument, bollar inte med plattor och och mixar ihop, och jag känner mig inte hemma i butikerna där stans DJ-elit hänger, och då är Internet räddningen.

Avbräck för hi-fi

Mycket som inte ges ut på cd utan tidigare bara fanns på vinyltolvor går nu ofta att köpa i digital form någonstans där ute.

Beatports logga Tråkigt nog är det mesta i mp3-format. Hi-fi-utvecklingen har alltså fått ett förhoppningsvis tillfälligt avbräck i och med att man numera ofta avsiktligt försämrar ljudkvaliteten för att minska lagringutrymme och överföringstider. Lyckligtvis finns Beatport, som låter en välja att köpa det mesta i wav-format med äkta cd-kvalitet så att man kan bränna sina egna skivor. Visserligen svindyrt, eftersom de lägger till en dollar per spår i förhållande till förlustkomprimerade format, så jag får punga ut mer per musikminut än i skivbutiken, men det är jag beredd att göra för musik jag annars skulle vara utestängd ifrån.

Allt finns dock inte på Beatport, och inte ens där finns allt i förlustfritt format. Så för ett tag sedan satt jag där med två mp3-filer, i någorlunda acceptabla 320 kb/s, som jag ville bränna ner på cd. Allt jag behövde nu var ett program att omvandla detta till cd-formatets 16 bitar i 44,1 kHz.

Avkodningsbekymmer

Att omvandla ljud till mp3-format kan göras med olika parametrar för olika kvalitet kontra komprimeringsgrad. Att omvandla från mp3 tillbaka till någonting som man kan skicka in i en DA-omvandlare borde däremot bara vara frågan om rätt eller fel. Man får förstås inte tillbaka exakt vad man hade före komprimeringen, mp3-kodning innebär ju en kvalitetsförlust, men man borde åtminstone kunna använda all information man har kvar och avkodningen ska alltså vara deterministisk.

En snabb test av tre olika program, varav två redan fanns på min dator, visade dock att det inte var så enkelt. Programmen gav ganska olika resultat. Jag provade inte om jag kunde höra någon skillnad, men jag kunde se på innehållet i avkodad data att de skiljde sig ganska mycket åt. Faktum är att alla tre till och med hade olika längd!

Så vad beror detta på och vad kan man göra åt det?

Compliance

I grunden beror problemet på avrundning under avkodningen. Olika avkodare är olika noggranna. Oftast kompromissar de med noggrannheten för att inte ta för mycket datorkraft. Lyssnar man på musiken direkt från mp3-filer vill man ju nämligen gärna kunna göra något annat på datorn samtidigt med avkodningen – spela upp musiken om inte annat. När jag bara vill koda om filerna en gång struntar jag i det, jag vill att programmet har största möjliga noggrannhet.

Till ISO-standarden för mp3-avkodning hör en referensbitström för att testa compliance med standarden. Referensdata är i 24 bitars upplösning. Om det finns någon gräns i själva mp3-formatet som gör att det är omöjligt eller meningslöst att ge utdata med fler bitars upplösning än så, eller om man bara valt 24 bitar för att det råkar vara standard för precisionsljudkort, har jag inte lyckats utröna. Hur som helst kan man i alla fall testa avkodare för att se hur mycket de avviker från referensen, och man kan förstås hitta resultatet från någon som gjort det på nätet.

Föga förvånande visar jämförelsen att det är produkten Libmad, från företaget Underbit vars webbplats visar undersökningen, som ger bäst compliance, åtminstone kompilerad med parametrar för att optimera för noggrannhet. Libmad är en fri produkt och den fanns redan på min dator eftersom jag har installerat Sox som använder den. Dock inte kompilerad för att vara maximalt noggrann, men det gick bra att hämta ner källkoden, kompilera med parametern --enable-accuracy, och sedan fixa så att Sox använder det nykompilerade resultatet. Så nu kan jag använda Sox för konverteringen och få utdata med bästa tillgängliga noggrannhet. Allt frid och fröjd, eller?

Dithering

Inte riktigt, jag vill som sagt ha utdata med 16 bitars upplösning till min cd. Hur gör Sox när den går från Libmads 24 till 16 bitar? Det verkar som att den avrundar till närmaste 16-bitarstal, vilket ju känns högst rimligt – och är det bästa man kan göra om man vill få bra värden i compliance-tester. Men, det är inte det bästa om man vill att det ska låta bra.

Enkel avrundning gör nämligen att signalen blir full av skarpa 90-graderskanter, vilket akustiskt innebär att man får in obehagliga övertoner. För bästa ljud bör man använda något som kallas dithering, vilket innebär att man före avrundningen adderar ett högfrekvent brus i de lägsta åtta bitarna. På så vis höjer man slumpmässigt vissa värden och sänker andra, och resultatet efter att signalen jämnats ut av elektronik och öron blir rundare och mer harmoniskt.

Det är inte lätt att ta reda på vilka avkodare som gör dithering och inte, men Underbits egen frontend till Madlib, Madplay, gör det om man inte explicit säger åt den att låta bli. Jag testade den, och när jag jämförde resultatet med det från Sox kunde jag konstatera att Sox inte använder dithering, så jag bestämde mig för att i fortsättningen använda Madplay tillsammans med en noggrannhetskompilerad libmad.

Perfektionister och musiker

Men kanske är det bara teoretiska perfektionister som jag som bryr sig. Jag hittade en wiki som hävdade att det har varit viktigare med tidigare bristfälliga kodare och avkodare, och det stöds av det faktum att alla hetsiga diskussioner jag kunde hitta om ämnet på nätet var minst fem år gamla. Fast jag undrar vad påståendet att skillnaderna är betydelselösa grundar sig på. Man vill ju, eller åtminstone vill jag, att även sista biten av de 16 ska vara vettig (annars har man ju bara 15 bitars upplösning!), även om det kan vara svårt att upptäcka skillnaden när man lyssnar.

På en företagsfest ett tag senare hade jag tillfälle att diskutera ämnet med en musiker som råkar vara ena halvan av Malmös hetaste namn på just Beatport, och även han var helt inne på linjen att alla bitarna har betydelse och att dithering är önskvärt, vilket gjorde mig lite nöjd.

Men så kom han också med den för mig något otillfredsställande nyheten att det finns olika rön om vilken sorts brus man ska lägga på för att få bäst resultat av dithering. Jag vet inte om jag ska försöka ta reda på fakta i den diskussionen också. Lyckligtvis har jag kunnat hålla mig till wav-format sedan dess.

intressant? om mp3, musik


0 comments: