Co to jest: stereo, joint stereo, dual channel?

Co dzieje się z informacją stereo w plikach MP3?

A może raczej należało by zapytać, czy w ogóle coś się z nią dzieje? A jeśli tak, to czy ma to wpływ na jakość dźwięku?

Dual channel

Najprostszą jest sytuacja, kiedy informacja stereo nie jest w żaden kompresowana. Czyli każdy kanał (w znaczeniu lewy i prawy) kompresowany jest zupełnie niezależnie od siebie, otrzymując przy tym dokładnie połowę bitrate’u. Jest to tryb dual channel (niejako dwa kanały, chodzi o dwa niezależne od siebie kanały mono).

W tym miejscu należy się bardzo ważna uwaga.

Przykłady, które tu podaję, nie mają być szczegółową analizą techniczną kompresji MP3, a jedynie obrazowym przykładem pomagającym zrozumieć wykorzystania pewnych algorytmów. Np. jedna “ramka” pliku MP3 to nie jest jedna sekunda, tylko około 26 milisekund, ale – dla uproszczenia – można to w taki sposób przedstawić.

Wyobraźmy sobie dwa kanały i bitrate 128kbps. Cztery kolejne sekundy muzyki skompresowanej w trybie dual channel mogło by wyglądać tak:

LLRR|LLRR|LLRR|LLRR

Gdzie L to informacje należące do lewego kanału (left), R do prawego (right), a kreska | odgranicza kolejne sekundy. W takim przypadku każdy kanał otrzymuje dokładnie połowę bitrate’u, czyli – w tym przykładzie – 64kbps.

Czy tak jest dobrze?

W przypadku specjalnych zastosowań, gdzie oba kanały są od siebie zupełnie niezależne, jest to pożądana metoda kompresji. Jakie są to zastosowania?

Sztampowym przykładem jest kompresja kursu językowego. Kiedy w jednym kanale lektor mówi coś w jednym języku, podczas gdy w drugim kanale inny lektor mówi to samo w innym języku. Wtedy – faktycznie – kompresja jednego kanału nie powinna mieć wpływu na kompresję drugiego kanału.

A jeśli chodzi o bardziej typowe zastosowanie. O muzykę.

W przypadku kompresji muzyki, tryb dual channel jest nieporządany. Dlaczego? Wyjaśnienie znajduje się poniżej.

Stereo

Standardowo, kompresja muzyki odbywa się w trybie stereo (czasem określanym jako simple stereo). Czym więc rózni się ten tryb od kompresji dual channel?

Różni się on sposobem podziału bitrate’u pomiędzy kanał lewy i prawy. W trybie dual channel był to zawsze podział po połowie gdyż oba kanały traktowane są jako niezależne kanały mono. W trybie stereo podział bitrate’u dowolny i zależy od zawartości kanałów lewego i prawego. Są więc one, podczas kompresji, brane pod uwagę “razem”.

Dlaczego tak jest? Ponieważ nie zawsze jest tak, że jeden kanał musi być skompresowany dokładnie w tym samym stopniu co drugi.

Ponownie – dlaczego? Ponieważ oba kanały niosą często różną informację. Jeśli – dla przykładu – w obu kanałach słychać “gitarę + wokal + perkusję”, to skompresowane one zostaną tak jak w trybie dual channel – bitrate zostanie podzielony na pół. Proste.

LLRR|LLRR|LLRR|LLRR

Jeśli jednak w jednym kanale – załóżmy że lewym – w pewnym momencie zabrzmi “solówka + perkusja” a w drugim “tylko perkusja” albo wręcz zabrzmi “cisza”, to sytuacja ulegnie diametralnej zmianie. Lewy kanał będzie niósł więcej informacji niż prawy. Istnieją teraz dwie możliwości:

  1. przy podziale bitrate’u “na pół” lewy kanał będzie miał niższą jakość niż prawy – w lewym kanale jest “więcej danych do kompresji” niż w prawym, więc kompresja “girary + perkusji” spowoduje większe zniekształcenia dźwięu niż kompresja “samej perkusji” czy wręcz “ciszy” (w tym drugim przypadku spowoduje to po prostu zmarnowanie części bitrate’u, który mógł by zostać przeznaczony do kompresji czegoś)
  2. przy odpowiednim podziale bitrate’u jakość obu kanałów pozostanie identyczna – wówczas “gitara + perkusja” otrzyma taką ilość bitrate’u, żeby pozostała część wystarczyła dla “samej perkusji” czy “ciszy”, a jakość obu kanałów (liczona ilością zniekształceń i ogólną jakością brzmienia) pozostała taka sama

W tym drugim przypadku, podział bitrate’u będzie wyglądał np. tak:

LLLR|LLLR|LLLR|LLLR

Czyli w każdej sekundzie, lewy kanał dostanie 3/4 dostępnego bitrate’u (np. 96kb z 128kb) a prawy pozostałą część, czyli 1/4 (np. 32kb z 128kb).

Sam podział może być dowolny, nie musi to być podział 3:1 jak w przykładzie. Może to być równie dobrze 2:1, 1.1:1 (minimalna różnica między kanałami) albo też 9:1 (np. w przypadku ciszy w prawym kanale) a nawet – jeśli nie ma innej potrzeby – bitrate zostanie podzielony jest w stosunku 1:1 jak w trybie dual channel. Za podział bitrate’u odpowiadają algorytmy enkodera. Im lepszy enkoder tym lepsze wykorzystanie zalet trybu stereo.

Tak więc wniosek jest taki, że przewagą trybu stereo nad trybem dual channel w przypadku muzyki jest po prostu… jakość. Czyli to, co w przypadku kompresji jest najważniejsze.

Ale czy to już wszystko, co da się zrobić? Nie… nie wszystko.

Joint stereo

Tryb joint stereo jest niejako kontynuacją pomysłu na poprawę jakości trybu dual channel.

O ile tryb stereo pozwolił na wydajną kompresję dźwięku, kiedy dźwięk rozłożony jest nierównomiernie pomiędzy kanałami, o tyle tryb joint stereo pozwala na wydajną kompesję w przypadku nierównomiernego rozłożenia dźwięku w samym kanale.

O co chodzi? Chodzi o rozłożenie dźwięku w kanale a jednocześnie między kanałami. Np. wokal słychać zwykle “na środku sceny”, jednocześnie w obu kanałach. Podczas gdy jakiś instrument może być słyszalny tylko w jednym kanale, a inny instrument tylko w drugim.

W takim przypadku wokal znajduje się w kanale środkowym (mid albo po prostu M), a oba instumenty w kanale bocznym (side, czyli S), czasem – nie do końca poprawnie – zwanym kanałem otaczającym (mimo że określenie to – czyli surround – zarezerwowane jest dla czwartego kanału, w czterokanałowym systemie dźwięku przestrzennego Dolby Surround).

Aby zobrazować to przykładem. Niech w pewnym momencie zabrzmi śpiew a capella. Oczywiście można skompresować go w trybie stereo, ale będzie to okropna strata. To tak jakby przygotować dwa identyczne pliki mono, mające bitrate wynoszący połowę zadanego bitrate’u. Trzymając się przykładu 128kbps – mamy dwa razy po 64kbps. Czyli niejako zmarnowało się – przez zdublowanie – całe 64kbps.

Z pomocą przychodzi tu tryb joint stereo. Dźwięk dzielony jest na kanały M (wokal) oraz S (w naszym przypadku cisza). Wtedy podział kanałów w pliku wygląda np. tak:

MMMS|MMMS|MMMS|MMMS

W każdej sekundzie wokal skompresowany jest wówczas do 3/4 z 128kb, czyli 96kb. Tak więc – w tym przypadku – wokal zyskuje niejako połowę jakości (dodatkowe 32kbps z początkowych 64kbps).

Nie musi być to podział 3:1 jak w powyższym przykładzie, może być równie dowolny co podział bitrate’u pomiędzy kanałami. Podobnie jak w przypadku trybu stereo, o szczegółach tego podziału decydują algorytmy enkodera.

Podsumowanie

O wyborze trybu kompresji, czyli simple stereo lub joint stereo oraz szczegółach podziału bitrate’u pomiędzy oba kanały, decydują algorytmy enkodera. W jednej chwili (w jednej “ramce”) może być zastosowany albo podział na kanały lewy-prawy, albo środkowy-boczny. Dlaczego nie oba naraz? W praktyce, nawet jeśli możliwe, było by to pozbawione sensu.

Mity i fakty, dotyczące trybów kompresji

Istnieje kilka mitów związanych z trybem stereo, o których koniecznie należy powiedzieć i jednocześnie wyjaśnić niepewności i nieporozumienia z tym związane.

Mit: Tryb double channel ma wyższą jakość niż tryb stereo (simple stereo).

Nie, nie ma. Nie w przypadku muzyki, co zostało wyjaśnione w tekście.

Mit: Tryb dual channel należy używać tylko wtedy, gdy bitrate jest wysoki. Np. 320kbps.

Nie. Nawet biorąc pod uwagę tak wysoki bitrate, użycie trybu innego niż dual channel pozwala na dodatkowe korzyści (w znaczeniu: uzyskanie lepszej jakości dźwięku).

Mit: Tryb joint stereo powinien być wykorzystywany tylko w przypadku niskiego bitrate’u (192kbps i mniej).

Nie. Nawet wysoki bitrate może zyskać (w znaczeniu: na jakości dźwięku) w przypadku użycia trybu joint stereo.

Mit: Tryb joint stereo ma niższą jakość niż stereo (simple stereo).

Nie. Jest to błędna opinia spowodowana historią formatu MP3.

Po pierwsze, oprócz opisanego w tekście trybu M/S stereo (mid/side stereo) istnieje także intensity stereo. Najprościej mówiąc, polega ono na złączeniu kanałów stereo (lewy i prawy) w jeden kanał mono, kompresowany razem z informacją o “uśrednionym kierunku, z jakiego dobiega dźwięk”. Wtedy zamiast “sceny dźwiękowej, gdzie każde źródło dźwięku ma swoje własne miejsce” dostajemy “jeden punkt, z którego dobiega ją wszystkie dźwięki”. Nie muszę chyba mówić jak to brzmi. Ważna informacja jest taka, że tryb ten jest coraz rzadziej spotykany. Dla przykładu, enkoder LAME nie posiada go wcale, więc nie można go właczyć nawet przez przypadek.

Po drugie, kiedyś ustawienie enkodera w tryb joint stereo oznaczało że każda ramka była kompresowana w trybie joint stereo, a żdana w trybie simple stereo. Było to oczywiście zupełnie bez sensu nawet mimo tego, iż teoretycznie jakość pozostawała ta sama, ale nie było realnej korzyści z takiego stanu rzeczy. Ale już od dawna tak nie jest. Dziś enkoder dynamicznie określa jakiego trybu użyć aby uzyskać jak najwyższą jakość.
Po rzecie, jeszcze jakiś czas temu implementacja trybu joint stereo delikatnie mówiąc “kulała” nawet w przypadku enkodera FhG (niejako uważanego za “referencyjny” endkoder MP3). Tak więc z powodu niskiej jakości okryła się złą sławą. Jednak już od dość dawna enkoder LAME (oraz – w nowszych wersjach – sam FhG) posiada zaawansowane i co najważniejsze dopracowane algorytmy doboru simple stereo/joint stereo w czasie kompresji, pozwalające uniknąć problemów znanych w przeszłości.

Fakt: Trybu joint stereo należy używać zawsze.

Tak, zawsze. Ale z rozsądkiem.

Na czym więc ten “rozsądek” ma polegać? Na używaniu sprawdzonych enkoderów, najlepiej nowych wersje LAME-a, których algorytmy doboru trybu kompresji informacji stereo są tak dopracowane, że nie dość że nie powodują zniekształceń (patrz powyższy mit) to jeszcze przyczyniają się do polepszenia jakości dźwięku po kompresji.

Za to użycie trybu joint stereo w przypadku “jakiegoś tam enkodera” może dać dość nieoczekiwany skutek w postaci kiepsko brzmiącego dźwięku. Więc w przypadku, kiedy nie jesteśmy pewni jaki właściwie kodek mamy do dyspozycji, bezpieczniejszą kalkulacją jest użycie trybu stereo (simple stereo). Z dwóch powodów: implementacja joint stereo może okazać się “niskiej jakosci”, a sam tryb joint stereo może okazać się nie trybem M/S stereo a intensity stereo.

Uzupełnienie i materiały dodatkowe

6 Responses to “Co to jest: stereo, joint stereo, dual channel?”

  1. [...] Co to jest: stereo, joint stereo, dual channel? [...]

  2. maba says:

    Świetne. Za niedługo, blog będzie swoistym “Kompedium wiedzy” ;)
    Ja z niecierpliwością czekam na coś z innej materii – fotografia.
    Pozdrawiam i gratuluje

  3. KHRoN says:

    mam taką nadzieję, iż jakieś kompendium wiedzy z tego będzie :)

  4. zły says:

    Co do joint’a bylbym ostrozny – kompresowalem Lame 3.97 (najnowsza stabilna wersja). Porownywalem FLAC z MP3 320 kbps i MP3 320 kbps JS. O ile odroznienie 320 i FLAC’a bylo dla mnie niemozliwe (co raczej zaskoczeniem nie jest) to wersje z JS wylapywalem natychmiast – kawalek tracil cala panorame. Spotkalem sie z opinia, ze lame przy CBR nie jest najlepszym encoderem.

  5. KHRoN says:

    bo LAME jest optymalizowany pod kątem trybu VBR – ustawianego przy pomocy presetów (medium, standard, extreme, insane) i parametru V (np. V0, V2 etc.)

    tryb CBR faktycznie traktowany jest po macoszemu (poza –preset insane) i – wręcz – miał być z LAME-a w pewnym momencie usunięty (sic!) ale pozostał “ze względu na kompatybilność ze starymi odtwarzaczami”

    co do JS to nie miałem jak dotąd tego typu problemów… ale używam tylko presetów albo parametru V, nigdy nie ustawiam “własnych parametrów z linii poleceń”

  6. Daniel says:

    Świetny artykuł! Bardzo opisowy i pomocny, dobrze Ci wychodzi tłumaczenie. ;)

    Co do LAME i joint stereo właśnie w nim – ja koduję w V0/V2 i uważam, że jest super. Nie wiem kto teraz już koduje w CBR – na co komu cisza zakodowana w 320kbps? (: Nawet na swoją empetrójkę wrzucam rzeczy zakodowane w V5.

Leave a Reply

Spam protection by WP Captcha-Free