OPUS – nowy, zupełnie darmowy standard dźwięku

OPUS – nowy, zupełnie darmowy standard dźwięku

Voice over IP, strumieniowanie muzyki – znaczna część ruchu w Sieci to transmisja dźwięku. Wymienione usługi na co dzień bez zarzutu działają na szybkich łączach, ale kiedy chce się skorzystać z nich przez sieć telefonii komórkowej, pojawiają się problemy: rozmowy VoIP się rwą, a piosenki są przerywane. Nowy standard audio o nazwie Opus chce się uporać z tymi niedogodnościami. Obiecuje zajmować mniej szerokości pasma – przy równoczesnym podwyższeniu jakości audio, a to wszystko w czasie rzeczywistym. Będący jego częścią kodek jest tworzony jako produkt Open Source i można go stosować bez opłat licencyjnych.

Nowy standard od samego początku opracowywany był z myślą o interaktywnym przesyłaniu dźwięku. To oznacza, że kodek Opus nadaje się nie tylko do zapisywania skompresowanej muzyki, ale także jest zoptymalizowany pod kątem transmisji dwukierunkowej, a więc na przykład wideotelefonii albo rozmów VoIP. Na początku września IETF (Internet Engineering Task Force) podniósł go do rangi oficjalnego standardu i tym samym Opus stał się częścią HTML5. Za Opusem stoją Xiph.Org Foundation, Skype i Mozilla, które w zespole roboczym wspólnie opracowały podstawy techniczne. Tak jak MP3, Opus jest kodekiem obciążonym stratami, czyli kompresuje przesyłane treści, ale odznacza się przy tym bardzo niską latencją. To znaczy, że sygnały docierają z bardzo niewielkim opóźnieniem, przetwarzanie pakietu danych zajmuje 20 milisekund. Dla porównania dodajmy, że w przypadku MP3 trzeba się liczyć z opóźnieniem dziesięciokrotnie większym.

Duża elastyczność kodowania audio

W przypadku Opusa projektanci przywiązywali dużą wagę do elastyczności. I tak szybkość transmisji jest zmienna w granicach od 6 do 510 kb/s, częstotliwość próbkowania waha się pomiędzy 8 a 48 kHz, zaś ramki są rozciągalne w zakresie od 2,5 do 20 milisekund. Spojrzenie pod maskę zdradza, że programiści Opusa wzięli na warsztat istniejące kodeki audio, zoptymalizowali je i połączyli w tak zwany kodek hybrydowy. Opus łączy w sobie oba kodeki – CELT (Constrained Energy Lapped Transform) i SILK – w zmodyfikowanej formie. CELT, jako część rodziny OGG, został zmodyfikowany ze szczególnym uwzględnieniem zdolności do pracy w czasie rzeczywistym, a SILK pochodzi od Skype’a i jest stosowany w tymże programie począwszy od wersji 3 do kodowania mowy.

Budowa i sposób pracy enkodera Opus są w zasadzie proste: sygnał wejściowy przeliczany jest najpierw do częstotliwości próbkowania 48 kHz (wykorzystanie wyższej częstotliwości nie ma sensu, bo ludzkie ucho z trudem zarejestrowałoby różnicę w jakości dźwięku). Później strumień danych, zależnie od częstotliwości wczytanego sygnału, przechodzi przez dekoder CELT albo SILK. CELT jest pierwszym wyborem, jeśli rezultatem ma być dźwięk o najlepszej jakości. Tylko w szczegółach – na przykład krótszym czasem opóźnienia – różni się on od kodeków audio takich jak AAC i MP3. Dźwięk przepuszcza się natomiast przez SILK, kiedy priorytetem jest optymalne wykorzystanie szerokości pasma. W tym celu ten częściowy kodek musi robić kilka rzeczy inaczej niż tradycyjne formaty audio.

Analiza głosu przy rozmowach telefonicznych

SILK szczególnie dobrze sprawdza się w przypadku sygnałów próbkowanych z niską częstotliwością (do 16 kHz) – są to parametry typowe dla rozmowy telefonicznej. Dlatego całość materiału o częstotliwości próbkowania poniżej 16 kHz Opus dekoduje, wykorzystując SILK. Pracę tego dekodera można podzielić na cztery etapy: analiza, filtr wstępny, kodowanie i wydanie (patrz grafi ka po prawej stronie). Punktem ciężkości jest analiza głosu, w trakcie której dokonuje się rozpoznania mowy. Na początku sygnał zostaje rozdzielony na mowę i dźwięki poboczne, potem następuje rozkład ramek mowy według częstotliwości na małe cząstki, z których SILK odfi ltrowuje opóźnienia i na podstawie tych ostatnich rozpoznaje cechy sygnału mowy. Podczas kolejnej optymalizacji analizowane są szumy i pakowane wszystkie odgłosy uboczne w jak najmniejsze, zajmujące niewiele szerokości pasma subramki. Dzięki wiedzy z etapów analitycznych SILK wykorzystuje prognozowanie wysokości dźwięku i kwantyzację częstotliwości: jeśli na przykład wysokość głosu podczas rozmowy zmieni się nieznacznie, to w pakietach z mową wystarczy przesłać tylko informację o różnicy. Celem jest tutaj możliwie najbardziej kompaktowy strumień danych bez utraty jakości. Kolejnym środkiem umożliwiającym uzyskanie dobrego wyniku okazuje się kwantyzacja szumów. SILK zważa przy tym, aby nie pojawiały się żadne zbędne optymalizacje i aby nieuniknione szumy nie zajęły zbyt dużej części dostępnej szerokości pasma.

Wszystkie sygnały o wysokiej częstotliwości, a więc do 20 kHz, wykorzystują dekoder CELT. Tak jak w MP3 i AAC za pomocą zmodyfi kowanej, dyskretnej transformacji cosinusowej przetwarza on częstotliwości na współczynniki i podczas następującej teraz kwantyfi kacji obcina wszystkie dźwięki, które dla ludzkiego ucha słyszalne są słabo bądź wcale. Ponieważ SILK i CELT mogą działać również symultanicznie, to programiści zdefi niowali trzy tryby Opus: tryb SILK tylko do transmisji mowy przy niewielkiej szerokości pasma, tryb hybrydowy dla transmisji mowy w najlepszej jakości i tryb CELT do transmisji samej muzyki. Użytkownicy Firefoksa od wersji 15 mogą odtwarzać pliki Opus bez wtyczki. Opus wkrótce zostanie też zintegrowany z VLC Media Playerem. Pod adresem opus-codec.org/examples znajdują się różne przykłady do posłuchania na próbę.

OPUS W SZCZEGÓŁACH

Opus zasadniczo składa się z dwóch kodeków: CELT i SILK, które w zależności od rodzaju sygnału (muzyka, mowa) mogą dokonać kompresji audio. O ile CELT działa podobnie do MP3, o tyle SILK optymalizuje sygnał mowy przed jego zakodowaniem.

MUZYKA I MOWA

CELT kompresuje muzykę w czasie rzeczywistym. W tym celu pakuje on dane w małe ramki. W ten sposób powstaje opóźnienie (delay) wynoszące tylko 2,5 sekundy.

SILK najpierw przelicza sygnał do częstotliwości próbkowania 16 kHz, dopiero potem następuje właściwe kodowanie.

KODOWANIE MOWY

Sygnał przechodzi w SILK przez 8 stacji, zanim zostanie wygenerowany:

  1. Rozpoznawanie mowy – tu próbuje się odseparować mowę od szumów tła.
  2. Analiza wysokości dźwięku redukuje częstotliwość próbkowania ramek mowy.
  3. Analiza szumów optymalizuje szumy pod kątem dostępnej szybkości transmisji.
  4. Filtr wstępny dostosowuje sygnał i przekazuje go do kolejnych instancji kodujących.
  5. Prognozowanie wysokości dźwięku – na tym etapie wyliczane są z dotychczasowych ramek zmiany dla przyszłych ramek.
  6. Kwantyzacja częstotliwości wyrównuje wysokość dźwięku transmitowanej mowy.
  7. Optymalizacja opóźnienia zapewnia, że przy niewielkiej szybkości transmisji głos zostanie zakodowany z akceptowalnym odkształceniem.
  8. Kwantyzacja szumów wpasowuje odfiltrowane wcześniej szumy pomiędzy zakodowane ramki mowy.
  9. Kodowanie obszaru – teraz następuje wygenerowanie zakodowanego gotowego sygnału w postaci ramek.

KODEKI W PORÓWNANIU

W zestawieniu z innymi kodekami audio Opus, przy krótkim opóźnieniu, pokrywa kompletną szerokość pasma transmisji. Kodeki mowy z dziedziny telekomunikacji są wprawdzie podobnie szybkie, ale nie są w stanie wygenerować dobrej jakości. Klasycznym kodekom muzycznym brakuje zdolności pracy w czasie rzeczywistym.