BinVote wersja 0.2

Rekonstrukcja plików i usuwanie trzasków z plików audio

Wstęp

BinVote powstał dlatego, że wszystkie aplikacje jakie znalazłem w sieci (a było ich dużo) nie potrafiły w zadowalający sposób naprawić plików WAV zawierających liczne trzaski charakterystyczne dla jittera. Niektóre były zbyt uniwersalne, ale przez to mało skuteczne, inne nie wiadomo co korygowały i w jakim stopniu (a dodatkowo większość trzasków zostawała). To zmusiło mnie do napisania włąsnego narzędzia. Zresztą dziwiłem się dlaczego "tak prosty" problem nie został jeszcze porządnie rozwiązany. Szybko okazało sie, że problem jest złożony jak diabli. No ale w końcu udało mi się ukończyć pierwszą w miare stabilną wersje, która mnie zadowala. Usunęła z mojego ulubionego 20 minutowago utworu większość przykrych trzasków bez zmiany pozostałego sygnału.

Można wyróżnić dwie podstawowe funkcje BinVote'a:
  • Rekonstrukcja plików na bazie kilku (nieparzysta liczba) częściowo uszkodzonych kopii.
    Przykładem są pliki uzyskiwane po odczycie porysowanej płyty audio CD. Każda kopia może wtedy zawierać pewną liczbę przekłamań. Dodatkowo, jeśli kopie pochodzą z różnych czytników CD, wtedy każda z nich może mieć dane lekko poprzesuwane względem siebie. Z tym sobie jednak radzi BinVote. Naprawianie odbywa się na zasadzie głosowania bajtów, a gdy nie ma kworum, głosowanie odbywa się na poziomie bitów.
    Ta funkcja może być znakomitym uzupełnieniem w przypadku odzyskiwania danych z uszkodzonych płyt za pomocą programu EAC (http://www.exactaudiocopy.de) autorstwa Andre'a Wiethoffa.
    Format pliku wejściowego jest bez znaczenia.
  • Usuwanie trzasków z plików audio.
    Niektórych błedów odczytu nie da się jednak uniknąć nieważne jakiego oprogramowania do sczytywania płyt byśmy nie użyli. Jedynym wyjściem jest korekcja samego sygnału audio. BinVote pierw wyszukuje obszary uszkodzone, minimalizuje liczbę sampli do korekcji (zwykle od 20 do 40 sampli) i rekonstruuje je na podstawie sąsiadujących sampli. Nie jest to jeszcze perfekcyjne narzędzie ale dzięki wielu opcjom konfiguracyjnym daje dużo możliwości osobom, którym bardzo zależy na perfekcyjnym odtworzeniu ich ulubionych płyt CD.
    Wspierany jest tylko jeden format plików: pliki WAV PCM jakości CD, 44100Hz, stereo, 16-bitów.

 Wróć do góry

Objaśnienie opcji linii komend

binvote [INPUT MEDIA FILES] <out_file> [SWITCHES]
Gdzie[INPUT MEDIA FILES] reprezentuje listę plików wejściowych rozdzielonych spacjami. Na wejściu wymagana jest nieparzysta liczba plików. To oczywiście oznacza, że co podanie najmniej jedego pliku jest wymagane.
<out_file> jest nazwą pliku wynikowego. Musi być zawsze podany nawet jeśli generowane są tylko pliki obwiedni (envelope). Poza tym musi być za wszystkimi plikami wejściowymi. W przeciwnym razie zostanie pomylony z plikiem wejściowym.

[SWITCHES] to opcjonalne przełączniki:
-e <envelope_file> <envelope_file> jest nazwą pliku a w zasadzie szablonem nazwy pliku obwiedni. Użycie tego przełącznika spowoduje, że BinVote wygeneruje dwa pliki obwiedni, po jednym dla każdego kanału. Każdy z plików będzie zapisany pod podaną nazwą, z dodaną literą L lub R przed rozszerzeniem pliku WAV.
Np. -e env.wav spowoduje, że binvote utworzy dwa pliki envL.wav i envR.wav
-g Będą usuwane trzaski. W tym przypadku na wejściu akceptowane są jednynie pliki WAV o odpowiednim formacie. Jeśli nie podamy -g, pliki obwiedni również nie będą wygenerowane. Aktywny będzie jedynie pierwszy człon aplikacji - głosowanie.
-u Trzaski będą usuwane jednynie w miejscach wykrycia niespójności kopii. Dodawane są półsekundowe marginesy do miejsc wykrycia takich niespójności.
-weak <wartość> Współczynnik dla słabych sygnałów. Jego domyślna wartość to 2.27. Dodatkowe objaśnienia - patrz poniżej.
-medium <wartość> Współczynnik dla średnich sygnałów. Jego domyślna wartość to 2.4. Dodatkowe objaśnienia - patrz poniżej.
-strong <wartość> Współczynnik dla silnych sygnałów. Jego domyślna wartość to 9.0. Dodatkowe objaśnienia - patrz poniżej.
-dyn <wartość> Współczynnik dynamiki zmian sygnału. Domyślna wartość wynosi 0.01. Dodatkowe objaśnienia - patrz poniżej.
-maxg <wartość> Maksymalna szerokość trzasku. Domyślnie 18 sampli.
-mindist <wartość> Minimalny nominalny odstęp między trzaskami. Domyślnie wartość ta wynosi 500. Dodatkowe objaśnienia - patrz poniżej.
-freq <wartość> Dolna częstotliwość ograniczająca filtru pasmowo-przepustowego. Filtr używany jest do wstępnego uwydatniania trzasków. 2000 jest wartością domyślną.
-hifreq <wartość> Górna częstotliwość ograniczająca filtru pasmowo-przepustowego. Filtr używany jest do wstępnego uwydatniania trzasków. 10000 jest wartością domyślną. Odcina szum, który może znacznie obniżyć zdolność wykrywania trzasków.
-y Nadpisuje pliki bez pytania.
-excl <ranges_file> Obszary wymienione w pliku <ranges_file> są wyłaczone z poszukiwania trzasków i nie będą usuwane. Poniżej znajdują się dodatkowe objaśnienia.
-incl <ranges> Obszary wymienione w pliku <ranges_file> są włączone do poszukiwania trzasków. Poniżej znajdują się dodatkowe objaśnienia.

Kolejność parametrów jest dowolna za wyjątkiem dwóch przypadków: (1) plik wyjściowy musi być podany za wszystkimi plikami wejściowymi, (2) kolejnośc przełączników -excl i -incl ma wpływ na wynikowy obszar przeszukiwania trzasków. Zobacz poniższe wyjaśnienie.
Wróć na górę

 

W jaki sposób działa wyłączanie zakresów z przeszukiwania.

a.)   -excl file1.txt  b.) -incl file2.txt 
     
  file1.txt ranges  file2.txt ranges 
  resulting ranges  resulting ranges 
         
c.)   -excl file1.txt -incl file2.txt d.) -incl file2.txt -excl file2.txt
  -excl file1.txt  -incl file2.txt 
  file2.txt ranges  file1.txt ranges 
  resulting ranges  resulting ranges 
         
Plik z zakresami może mieć prawie dowolny format, pod warunkiem że każdy segment/zakres jest opisywany przez jedną linę. Pojedynczy zakres może być określony przez podanie jego początkowego i końcowego czasu lub numeru próbki. Można też podać po prostu gdzie leży środek zakresu. Wtedy automatycznie zostaną dodane półsekundowe marginesy. Czasy można podawać w różnych formatach. Wszelkie separatory oraz tekst przed i za blokiem określającym zakres są ignorowane.
Przykładowo, jako plik z zakresami może posłużyć plik generowany przez program EAC po akończeniu sczytywania ścieżki audio.

Wróć na górę

 

Przykłady użycia:

  1. Usuwanie trzasków w całym pliku wejściowym bez generowania plików obwiedni. Poza tym wyjście z BinVote'a zostanie przekierowane do pliku log.txt. Oznacza to, że wszystkie komunikaty, które normalnie zostałyby wyśietlone na ekranie, zostaną zapisane do pliku. Jest to zalecane, ponieważ bardzo ułatwia sprawdzenie co zostało naprawione a co nie i dlaczego.
    binvote in.wav -g out.wav > log.txt
  2. Usunie trzasków wyłacznie w zakresach podanych w pliku eac_read_errors.log. Pliki obwiedni zostaną wygenerowane:
    binvote in.wav -e env.wav -g -y out.wav -incl eac_read_errors.log
  3. Wykonana zostanie jedynie rekonstrukcja bazująca na pięciu częściowo uszkodzonych kopiach pliku na zasadzie głosowania.
    binvote in1.bin in2.bin in3.bin in4.bin in5.bin -y out.bin
  4. Rekonstrukcja i usuwanie trzasków, ale jedynie w rejonach gdzie była wykryta jakakolwiek niespójność między wersjami:
    binvote in1.wav in2.wav in3.wav -g -u out.wav
  5. Sparametryzowane usuwanie trzasków z zapisem komunikatów do pliku log.txt:
    binvote in.wav -weak 2.45 -medium 3.1 -dyn 0.003 out.wav > log.txt

Wróć na górę

 

Co to są pliki obwiedni? Jak w ogóle działa usuwanie trzasków?

Na samym początku chciałbym podkreślić, że narzędzie to nie powstało z myślą o w pełni zautomatyzowanym usuwaniu trzasków (No dobra, skłamałem - początkowo miało działać zupełnie automatycznie. Jednak bardzo szybko okazało się, że usuwanie trzasków jest bardzo trudnym problemem. Czasami nawet sam miałem cholernie duże kłopoty ze znalezieniem i usunięciem trzasku ręcznie. Brałem kawałek podejrzanego wave'a przesłuchiwałem go ze sto razy a i tak nie mogłem znaleźć miejsca występowania błędu, chociaż trzask był wyraźnie słyszalny!)
Więc w obecnej postaci BinVote stara się ułatwić ten proces na tyle na ile się da. Jednak ciężko jest uzyskać przyzwoite rezultaty już za pierwszym razem. Dlatego mocno polecam zajrzeć do logów, plików obwiedni aby zobaczyć co i jak zostało zinterpretowane, czy algorytm nie jest zbyt czuły, albo nieczuły na trzaski. Posiadanie dobrych słuchawek lub sprzętu audio jest koniecznością, ponieważ musisz wiedzieć, czy wykryty trzask to rzeczywiście trzask a nie zamierzony efekt muzyka.
BinVote używa wielu heurystyk, aby jak najlepiej odgadywać rodzaj sygnału, jednak prawie na pewno konieczne będzie jakieś dostrajanie.
A do tego nieodzowne są pliki obwiedni.

Pliki obwiedni są generowane po to aby ułatwić użytkownikowi zobaczenie jak zostaną przeprowadzone korekcje sygnału i jak należy dobrać różne współczynniki, aby uzyskać najlepsze efekty. Pliki obwiedni to nic innego jak zwykłe pliki WAV, wiec nie ma potrzeby projektowania dodatkowych narzędzi do ich przeglądania. Można użyć dowolnego edytora plików WAV pozwalających na ich wizualizacje, najlepiej takich, które pozwalają na synchronizacje między otwartymi plikami WAV. Dla każdego kanału generowany jest osobny plik obwiedni.

Poniższy obrazek przezentuje przykładową zawartość pliku obwiedni.


Pokazane jest tu jak będzie przeprowadzona korekcja jednego z kanałów pliku wejściowego. Górny wykres pokazuje zmiany sygnału, zaś dolna część ( drugi kanał pliku obwiedni) zawiera obwiednie sygnału połączoną z informacją o tym, które próóbki uległy zmianie. Obwiednia pokazuje obecny, oszacowany poziom sygnału z pewnym opóźnieniem reakcji na szybkie i krótkie zmiany sygnału. Jeśli w jakimś miejscu wartośc obwiedni jest mniejsza od zera, to oznacza to, że w tym miejscu został wykryty i usunięty trzask. BinVote neguje wartość obwiedni dla wszystkich zmodifikowanych próbek. Zwykle mniej niż 0.01% oryginalnego sygnału ulega modyfikacji.

Na następnej ilustracji zostało przedstawione znaczenie sygnałów zapisywanych w plikach obwiedni.



Jeśli stosunek między odpowiednimi wartościami z górnego kanału (szybkość zmian sygnału) a wartościami z dolnego kanału (obwiednia sygnału) przekracza wartość współczynnika wykrywania trzasku obliczonego dla bieżącej wartości obwiedni, to wtedy ta próbka (i jej bliskie otocznie) uważane są za miejsce występowania potencjalnego trzasku i jest poddawana dalszej analizie.

Graf poniżej prezentuje wartości współczynnika wykrywania trzasku dla różnych wartości sygnału obwiedni i jej powiązania ze współczynnikami dla "słabego, "średniego" i "mocnego" sygnału. Krzywa jest parabolą przechodzącą przez te trzy punkty (chociaż na tym rysunku tego nie widać to jednak jest to parabola, tylko pozioma oś nie jest wyskalowana liniowo).



Zachęcam do ściągnięcia tego, mam nadzieje, użytecznego arkusza MS Excela, zawierającego objaśnienia sposobu interpretacji plików obwiedni razem ze wzorami ułatwiającymi wyznaczyć odpowiednie współczynniki dla BinVote'a. Plik zajmuje jedynie 60kB.
Wróć na górę

 

Szczegółowy opis parametrów

BinVote używa w machanizmach usuwania trzasków algorytmów heurystycznych, które wymagają wielu dodatkowych parametrów. Dla wielu przypadków ustawiania domyślne mogą być wystarczające do usunięcia większości trzasków, jednak efektywność bardzo mocno zależy od rodzaju sygnału wejściowego.

Współczynniki dla słabych, średnich i mocnych sygnałów zostały już wyjaśnione przez ilustracje u góry.
Mogę jeszcze podkreślić, że wspołczynnik dla słabego sygnału podawany jest dla wartości obwiedni wynoszącej 60, średniego sygnału dla wartości 400 i mocnego dla 1600.
dyn mówi o tym jak szybkich zmian sygnału można się spodziewać w sygnale wejściowym. Im mniejsza wartość tym leniwiej zmienia się poziom sygnału w obwiedni. A przez to łatwiej jest wykryć nieporządane trzaski. Jednak z drugiej strony narażamy się na to, że szybkie zbocza sygnału, będą uznane za ewentualne trzaski. Oczywiście są jeszce inne zabezpieczenia przed posądzeniem szybkiego zbocza o to, że nie jest zamierzony, ale należy zachować ostrożność w dobieraniu tego parametru.
maxg określa maksymalną dopuszczalną szerokość trzsku. Ta wartość powinna być jak najmniejsza. Większa wartość może spowodować, że wiele celowo pojawiających się pik, będzie uznanych za niepożądanie trzaski. mindist określa znormalizowany minimalny odstęp między dwoma kolejnymi trzaskami. Znormalizowany oznacza w tym przypadku nie wartość absolutną, a zależną od siły zakłócenia. Ponieważ trzaski przeważnie nie występują obok siebie, więc można poeksperymentować i pozwiększać to wartość, nawet wielokrotnie.
freq i hifreq ustalają pasmo przepustowości filtru pasmowo-przepustowego, który jest używany do wstępnego przygotowania sygnału, a dokładniej do uwydatnienia wszelkich trzasków. Oczywiście używany jest jedynie do celów wewnętrznych i nie ma bezpośredniego wpływu na sygnał wyjściowy.

Wróć na górę
Dokładny opis

Jesteś zainteresowany sprzętemHi-End?
Przejdź do działu

Radioactive Audio Przejdź do Radioactive Audio
Radioactive Pages presents:  
Get Microsoft Silverlight
Radioactive Software... a small gear in Your Company's engine.
Język Angielski   Angielski
Język Polski   Polski