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:
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:
- 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
- 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
- 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
- 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
- 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ę