Konwersja częstotliwości próbkowania plików audio (resampling) nie jest prostym zadaniem. W wielu przypadkach może ona zakończyć się znaczną utratą jakości dźwięku. Na szczęście można uniknąć problemów, stosując się do kilku prostych zasad.
Ten artykuł jest tłumaczeniem fragmentu anglojęzycznego podręcznika Linux Audio Quality HOWTO – rozdziału Converting Soundfiles.
Zmiana częstotliwości próbkowania lub rozdzielczości bitowej plików dźwiękowych, przy utrzymaniu maksymalnej jakości, nie zawsze jest łatwa.
Ogólne zasady nie są jedynie charakterystyczne dla Linuksa i mogą być znalezione w internecie, a zatem:
Pozostaw rozdzielczość bitową tak wysoką, jak jest to możliwe, i w całym łańcuchu przetwarzania dźwięku. Jeżeli zamierzasz zakończyć w trybie 16-bitowym, użyj większej rozdzielczości. Taka strategia pozwoli obniżyć szum kwantyzacji.
Kiedy ostatecznie przechodzisz do niższej rozdzielczości bitowej (np. konwertując 16 bitów na 8), zastanów się nad dodaniem szumu (ditheringu). Dithering jest to bardzo mała ilość przypadkowego szumu, który maskuje błędy kwantyzacji i, co dziwne, poprawia uzyskiwaną rozdzielczość (a więc można usłyszeć brzmienia znajdujące się poniżej pierwszego bitu – na przykład wybrzmiewanie pogłosu). Również SoX może dodawać pewien rodzaj ditheringu przy użyciu jego efektu mask [...]
Utrzymuj częstotliwość próbkowania, która jest wielokrotnością końcowej częstotliwości. Dla przykładu: nie wykonuj resamplingu z 96 kHz do 48 kHz, jeżeli chcesz zakończyć na 44,1 kHz. Po prostu nagrywaj z częstotliwością 44,1 kHz lub zwiększ ją do 88,2kHz (chyba, że wierzysz, że narzędzie którego używasz do zmiany częstotliwości próbkowania wykona naprawdę bardzo dobrą robotę). Chociaż wyższa częstotliwość próbkowania da więcej tonów wysokich i zwiększy dynamikę. Problem pojawia się, gdy dokonujesz cyfrowej syntezy i chcesz podzielić częstotliwość przez liczbę inną niż całkowita. Spowoduje to wiele interpolacji i usunie część danych. Wielu jest zdania, że jest to gorsze od rozpoczęcia z ostateczną częstotliwością bitową, ale Twoje odczucie może być inne.
Następną okolicznością, w której używa się częstotliwości 48 kHz, jest wykorzystanie na pewnym etapie pracy przetworników analogowych (takich jak mastering przy pomocy drogich, ulepszonych, klasycznych kompresorów lub w czymś podobnym), przed tym jak ostatecznie wynik zostanie zapisany w 44,1 kHz. W tym wypadku cyfrowy resampling nie jest używany i niektórzy uważają, że początkowa praca przy 48 jest nieco lepsza niż przy 44,1 kHz.
By uniknąć interferencji sygnałów, usuń wszystko powyżej częstotliwości Nyquista przed rozpoczęciem resamplingu (lub upewnij się, że twoje narzędzie zmniejszające liczbę próbek wykona to za Ciebie). Częstotliwość Nyquista jest połową częstotliwości próbkowania jaką pragniesz uzyskać. W przypadku konwertowania z 44,1 do 22,05 kHz przefiltruj wszystko powyżej 11,025 kHz.
Nie normalizuj bez przerwy! Jeśli koniecznie potrzebujesz znormalizowanego sygnału, to zrób to jedynie po wykonaniu wszystkiego innego, ale przed konwersją do ostatecznej rozdzielczości bitowej. (Zakładam, że twój sygnał jest zmiennoprzecinkowy przez cały czas. Jeśli twój sygnał powinien być w jakimś miejscu całkowity, należy zwiększyć poziomy by uzyskać większą rozdzielczość. Ta strategia pomoże zredukować niepożądany błędy kwantyzacji.
Miejscem, gdzie można uzyskać więcej informacji jest FAQ listy dyskusyjnej rec.audio.pro, dostępny tutaj (ang.). Innym znakomitym źródłem informacji na temat dźwięku cyfrowego jest strona Digital Domain (www.digido.com (ang.)). Sporo informacji z tej sekcji zostało przepisanych z tych źródeł.
Powszechnie używanym narzędziem do wykonania tych prac [resamplingu – przyp. tłum.] w systemach Unix jest SoX.
SoX jest dostępny na sox.sourceforge.net. SoX pracuje poprawnie, ale potrzebujesz najnowszej wersji. Wczesne wersje SoXa mają kiepską reputację jeśli chodzi o konwersję częstotliwości. Jest też już alternatywa dla SoXa – patrz informacja Joachima Thienmanna o AFsp.
W chwili obecnej (wrzesień 2000), wersja 12.17 SoX wspiera trzy metody konwersji częstotliwości próbkowania. Ważne jest, by używać prawidłowej.
Streszczenie (z SoX 12.16):
SoX dostarcza też prostego ditheringu za pomocą efektu mask. Kształtowanie szumu nie jest dostępne. By dowiedzieć sie więcej o ditheringu przeszukaj grupę dyskusyjną rec.audio.pro (lub przeczytaj ten artykuł – przyp. tłum.).
Joachim Thiemann informował, że SoX nie pracuje dobrze z niektórymi częstotliwościami próbkowania. Chris Bagwell, opiekun SoXa, donosi, że zostało to poprawione w SoXie 12.17 (wrzesień 2000), więc wszyscy użytkownicy SoXa powinni go uaktualnić.
Poniżej dostępna jest skarga Joachima (z 1999) i jego rozwiązanie:
...rozwiązaniem problemu jest dzielenie częstotliwości próbkowania wyłącznie przez liczby całkowite (na przykład 22050 lub 11025 Hz dla 44,1 kHz), albo po prostu odgrywanie pliku z inną częstotliwością – różnica mniejsza niż 0,255% w prędkości odtwarzania nie jest zauważalna. Dla ostatniego rozwiązania napisałem zamiennik dla programu play (pakiet AFsp).
Mamy tu, w laboratorium przetwarzania sygnałów McGill, własny kod przetwarzania dźwięku, które pozwoliło mi napisać powyższy zamiennik dla play w tak małej ilości kodu. Także narzędzie ResampAudio (część AFsp) wykonuje znacznie lepszą pracę przy zmianie samplingu niż robi to SoX.
Mimo, iż dołożyłem wszelkich sił i środków, to zajmuję się tłumaczeniem półprofesjonalnie. Proszę więc o wyrozumiałość. Wszelkie informacje o niejasnościach i zauważonych błędach proszę kierować do administratora tej strony. Mam nadzieję, że ten tekst pomoże (pomógł) wam w rozwijaniu muzycznych skrzydeł w Linuksie. Powodzenia!
• Programy
• Artykuły
• Blog
• Forum
• Linki
• Kontakt