ˇ ´ UCEN ´I TECHNICKE ´ V BRNE ˇ VYSOKE BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ˇ ´ITACOV ˇ ´ ´ ´I USTAV POC E´ GRAFIKY A MULTIMEDI FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ˇ ˇ ´ AN ´ ´I ZMENA RYCHLOSTI (SYNCHRONIZACE) PREHR AV ˇ ´ ˇ CI VIDEA V ZAVISLOSTI NA RYCHLOSTI RE
´ RSK ˇ ´ PRACE ´ BAKALA A BACHELOR’S THESIS
´ AUTOR PRACE AUTHOR
BRNO 2008
´ MICHAL HROMADKO
ˇ ´I TECHNICKE ´ V BRNE ˇ VYSOKE´ UCEN BRNO UNIVERSITY OF TECHNOLOGY
ˇ ´ICH TECHNOLOGI´I FAKULTA INFORMACN ˇ ´ITACOV ˇ ´ ´ GRAFIKY A MULTIMEDI ´ ´I USTAV POC E FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ˇ ˇ ´ AN ´ ´I ZMENA RYCHLOSTI (SYNCHRONIZACE) PREHR AV ˇ ´ ˇ CI VIDEA V ZAVISLOSTI NA RYCHLOSTI RE PLAYING OF VIDEO DEPENDING ON SPEED OF SPEECH
ˇ ´ PRACE ´ BAKALA´ RSK A BACHELOR’S THESIS
´ AUTOR PRACE
´ MICHAL HROMADKO
AUTHOR
´ VEDOUC´I PRACE SUPERVISOR
BRNO 2008
¨ Ing. IGOR SZOKE
Licenˇcn´ı smlouva je uvedena v archivn´ım v´ ytisku uloˇzen´em v knihovnˇe FIT VUT v Brnˇe.
Abstrakt Tato bakal´ aˇrsk´ a pr´ ace se zab´ yv´ a rozˇs´ıˇren´ım pˇrehr´avaˇce VLC o metodu PSOLA. Tato metoda umoˇzn ˇuje mˇenit rychlost pˇrehr´av´an´ı videa pˇri zachov´an´ı z´akladn´ıho t´onu a srozumitelnosti ˇreˇci.
Kl´ıˇ cov´ a slova VLC, modul, PSOLA, ˇreˇc, rychlost
Abstract This bachelor’s thesis discusses adding the PSOLA method into the VLC Media Player. PSOLA method is used for playing rate modification. It doesn’t change base tone and understandableness of the speech.
Keywords VLC, plugin, PSOLA, speech, speed, rate
Citace Michal Hrom´ adko: Zmˇena rychlosti (synchronizace) pˇrehr´av´an´ı videa v z´avislosti na rychlosti ˇreˇci, bakal´ aˇrsk´ a pr´ ace, Brno, FIT VUT v Brnˇe, 2008
Zmˇ ena rychlosti (synchronizace) pˇ rehr´ av´ an´ı videa v z´ avislosti na rychlosti ˇ reˇ ci Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem tuto bakal´ aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Ing. Igora Sz¨ okeho. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ ych jsem ˇcerpal. ....................... Michal Hrom´adko 14. kvˇetna 2008
Podˇ ekov´ an´ı Dˇekuji vedouc´ımu bakal´ aˇrsk´e pr´ ace Ing. Igoru Sz¨okemu, za veden´ı, ochotu pˇri ˇreˇsen´ı probl´emu, cann´e rady a pˇripom´ınky pˇri zpracov´an´ı a ˇreˇsen´ı bakal´aˇrsk´e pr´ace.
c Michal Hrom´
adko, 2008. Tato pr´ ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe informaˇcn´ıch technologi´ı. Pr´ ace je chr´ anˇena autorsk´ym z´ akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´ avnˇen´ı autorem je nez´ akonn´e, s v´yjimkou z´ akonem definovan´ych pˇr´ıpad˚ u.
Obsah ´ 1 Uvod 1.1 Pr˚ uvodce prac´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 3
2 Pˇ rehr´ avaˇ ce videa 2.1 Media Player Classic 2.2 Miro . . . . . . . . . 2.3 MPlayer . . . . . . . 2.4 xine . . . . . . . . . 2.5 GStreamer . . . . . . 2.6 VLC . . . . . . . . .
. . . . . .
5 5 6 6 6 6 6
. . . . . .
. . . . . .
. . . . . .
3 Pˇ rehr´ avaˇ c VLC 3.1 Vnitˇrn´ı uspoˇr´ ad´ an´ı . . . . 3.1.1 Moduly j´ adra . . . 3.1.2 Vstupn´ı moduly . 3.1.3 Demultiplexory . . 3.1.4 Dekod´ery . . . . . 3.1.5 Filtry videa . . . . 3.1.6 Filtry zvuku . . . 3.1.7 V´ ystupn´ı moduly . 3.2 Rozˇsiˇritelnost . . . . . . . 3.2.1 Struktura modulu 3.2.2 Zvukov´e filtry . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
8 8 10 10 10 10 11 11 11 11 12 13
4 Metoda PSOLA a fon´ emov´ y rozpozn´ avaˇ c 4.1 Detekce z´ akladn´ıho t´ onu . . . . . . . . . . . 4.1.1 Autokorelaˇcn´ı funkce . . . . . . . . . 4.1.2 Harmonic Product Spectrum (HPS) 4.1.3 Harmonic and Noise Model (HNM) . 4.2 Ok´enkovac´ı funkce . . . . . . . . . . . . . . 4.3 V´ ybˇer period z´ akladn´ıho t´onu . . . . . . . . 4.4 Rozˇs´ıˇren´ı o fon´emov´ y rozpozn´avaˇc . . . . . 4.4.1 Fon´emov´ y rozpozn´avaˇc . . . . . . . . 4.4.2 Rozˇs´ıˇren´ı PSOLY . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
15 16 16 17 17 18 18 19 20 20
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
1
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
5 Implementace 5.1 Hlaviˇcka modulu . . . . . 5.2 Konstruktor a destruktor 5.3 V´ ykonn´ a funkce . . . . . . 5.4 Fon´emov´ y detektor . . . . 5.5 Uˇzivatelsk´e rozhran´ı . . .
. . . . .
21 21 22 23 24 24
6 Testy 6.1 Kvalita v´ ystupu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Pˇresnost synchronizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Vyt´ıˇzen´ı syst´emu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26 26 26 26
7 Z´ avˇ er
28
A Obsah CD
30
B Pˇ reklad VLC
31
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Kapitola 1
´ Uvod Pˇrehr´av´ an´ı videa je jednou z nejrozˇs´ıˇrenˇejˇs´ıch a nejobl´ıbenˇejˇs´ıch ˇcinnost´ı, jak´e lze na poˇc´ıtaˇci provozovat. Ze zaˇc´ atku ˇslo jen o z´abavu nˇekolika nadˇsenc˚ u, kteˇr´ı s u ´ˇzasem v oˇc´ıch sledovali nˇekolik mˇen´ıc´ıch-se pixel˚ u na obrazovce. V´ yvoj se vˇsak ned´a zastavit a brzy se na monitory poˇc´ıtaˇc˚ u dostala i videa jiˇz sledovateln´e kvality. Bohuˇzel to mˇelo za d˚ usledek velk´ y rozvoj poˇc´ıtaˇcov´eho pir´ atstv´ı. Objevili se pokoutn´ı prodejci vyp´alen´ ych CD s r˚ uzn´ ymi filmy. Dalˇs´ım miln´ıkem byla urˇcitˇe moˇznost pˇren´aˇset (streamovat) video pˇres Internet. V dneˇsn´ı dobˇe nen´ı probl´em se na poˇc´ıtaˇci pod´ıvat na film ve vysok´em rozliˇsen´ı, nebo ˇzivˇe sledovat pˇrenos z konference na druh´e stranˇe planety. D´ıky tˇemto technick´ ym vymoˇzenostem se objevila dalˇs´ı u ´ˇzasn´a moˇznost - sledovat ˇzivˇe pˇrenos z pˇredn´ aˇsky pˇeknˇe v teple domova (koleje). Sledov´an´ı pˇredn´aˇsky na d´alku samozˇrejmˇe nenahrad´ı jej´ı n´ avˇstˇevu, ale to student˚ um oˇcividnˇe nevad´ı a u ´ˇcast na pˇredn´aˇsk´ ach ze pomalu zaˇcala zmenˇsovat. Po tomto kroku chybˇela k dokonalosti pouze jedna vˇec. Z´aznamy pˇredn´aˇsek. Ty na sebe nenechaly dlouho ˇcekat. Ke staˇzen´ı je k dispozici nˇekolik stovek pˇredn´aˇsek z r˚ uzn´ ych kurz˚ u. Pro studenty je to skvˇel´ a moˇznost jak si pˇred zkouˇskou zopakovat probranou l´atku. M´a to jeden drobn´ y nedostatek. Pˇredn´aˇsky jsou dlouh´e a pˇredn´aˇsej´ıc´ı obˇcas mluv´ı pomalu nebo v˚ ubec. Kaˇzd´ y jistˇe zkusil pˇrehr´av´an´ı pˇredn´aˇsky zrychlit a zjistil, ˇze se dostavil velmi nepˇr´ıjemn´ y efekt. Pˇredn´ aˇsej´ıc´ı se zmˇenil v nesrozumitelnˇe drmol´ıc´ıho kaˇcera Donalda“. ” Kromnˇe toho, ˇze je to celkem vtipn´e, se vˇsak ˇz´adan´ y efekt nedostavil. Video je nutn´e opˇet zpomalit a sledovat v norm´ aln´ı rychlosti. C´ılem t´eto bakal´ aˇrsk´e pr´ ace je upravit nˇekter´ y z existuj´ıc´ıch pˇrehr´avaˇc˚ u videa tak, aby bylo moˇzn´e dynamicky mˇenit rychlost pˇrehr´av´an´ı videa se zachov´an´ım srozumitelnosti ˇreˇci. Vych´az´ım v n´ı z diplomov´e pr´ ace Ing. Aleˇse Kov´aˇr´ıka s n´azvem Zmˇena rychlosti ˇreˇci [7]. Jeho diplomov´ a pr´ ace se zab´ yv´ a pr´avˇe zrychlov´an´ım a zpomalov´an´ım ˇreˇci pˇri zachov´ an´ı srozumitelnosti. Pro zmˇenu rychlosti pouˇz´ıv´a metodu PSOLA1 s rozˇs´ıˇren´ım o fon´emov´ y rozpozn´ avaˇc.
1.1
Pr˚ uvodce prac´ı
Ve 2. kapitole nazvan´e Pˇrehr´ avaˇce videa se zab´ yv´am v´ ybˇerem vhodn´eho pˇrehr´avaˇce. Popisuji zde krit´eria pro v´ ybˇer a nˇekolik zkouman´ ych pˇrehr´avaˇc˚ u. Kapitola ˇc´ıslo 3 popisuje mnou vybran´ y pˇrehr´avaˇc VLC. Od z´akladn´ıho popisu postupnˇe pˇrech´az´ım k vlastnostem, vnitˇrn´ımu uspoˇr´ad´an´ı a tvorbˇe modul˚ u. Pˇri tvorbˇe t´eto kapitoly 1
Pitch Synchronous OverLap Add
3
jsem vych´ azel ˇc´ asteˇcnˇe z dokumentace VLC [2], ale pˇredevˇs´ım ze studia zdrojov´ ych k´od˚ u. V kapitole nazvan´e Metoda PSOLA a fon´emov´ y rozpozn´avaˇc(4) vych´az´ım z diplomov´e pr´ace Ing. Kov´ aˇr´ıka [7] a z knihy pana Tieriho Dutoida [6]. Jak jej´ı n´azev napov´ıd´a, zab´ yv´ a se popisem metody PSOLA, fon´emov´eho rozpozn´avaˇce a jejich vz´ajemn´eho propojen´ı. Posledn´ı kapitola (5) se zab´ yv´a vlastn´ı u ´pravou pˇrehr´avaˇce VLC. Popisuji zde zaˇclenˇen´ı upraven´e metody PSOLA do VLC a probl´emy se kter´ ymi jsem se bˇehem implementace setkal.
4
Kapitola 2
Pˇ rehr´ avaˇ ce videa Prvn´ım krokem pˇri tvorbˇe t´eto bakal´aˇrsk´e pr´ace bylo naj´ıt vhodn´ y pˇrehr´avaˇc videa. Hledan´ y pˇrehr´avaˇc mus´ı b´ yt pokud moˇzno multiplatformn´ı a otevˇren´ y. Otevˇrenost´ı mysl´ım ˇs´ıˇren´ı pˇrehr´avaˇce pod jednou z open-source licenc´ı. Nejrozˇs´ıˇrenˇejˇs´ı z tˇechto licenc´ı je GP - GNU Generel Lublic Licence [3]. Tato licence umoˇzn ˇuje volnou editaci zdrojov´ ych k´od˚ u programu. Dalˇs´ım hlediskem byla rozˇs´ıˇrenost pˇrehr´avaˇce. Lid´e vˇetˇsinou nemaj´ı r´adi vˇeci, kter´e neznaj´ı. D˚ uleˇzit´ y je tak´e celkov´ y dojem z pˇrehr´avaˇce. Bral jsem v potaz funkˇcnost, moˇznost rozˇs´ıˇren´ı o pˇr´ıdavn´e moduly a v neposledn´ı ˇredˇe tak´e vzhled. Mnoz´ı mohou nam´ıtat, ˇze na vzhledu nez´aleˇz´ı, ale z vlastn´ı zkuˇsenosti v´ım, ˇze vzhled je d˚ uleˇzit´ ym faktorem. Pˇri bliˇzˇs´ım zkoum´ an´ı pˇrehr´ avaˇc˚ u jsem se zamˇeˇril na dalˇs´ı jejich vlastnosti. D˚ uleˇzitou vlastnost´ı je napˇr´ıklad poˇcet r˚ uzn´ ych multimedi´aln´ıch form´at˚ u, kter´e je pˇrehr´avaˇc schopen pˇrehr´at. Dˇr´ıve bylo nutn´e m´ıt nˇekolik r˚ uzn´ ych pˇrehr´avaˇc˚ u v z´avislosti na typu pˇrehr´avan´eho materi´ alu. V dneˇsn´ı dobˇe vˇetˇsinou postaˇc´ı jeden kvalitn´ı pˇrehr´avaˇc a sada kodek˚ u (chodec pacek). Proto jsem se zamˇeˇril sp´ıˇse na moˇznost pˇrehr´av´an´ı r˚ uzn´ ych multimedi´aln´ıch stream˚ u vys´ılan´ ych jak po lok´ aln´ıch s´ıt´ıch, tak po Internetu. Nejvˇetˇs´ı v´ahu jsem pˇriˇradil protokolu RESP 1 s jehoˇz pomoc´ı je moˇzn´e sledovat z´aznamy pˇredn´aˇsek z naˇs´ı fakulty. Dalˇs´ım d˚ uleˇzit´ ym faktorem byla moˇznost sledovat pˇredn´aˇsky pˇr´ımo ˇzivˇe. To sice nem´a na mou pr´ aci vliv, protoˇze ˇziv´ y pˇrenos nejde zrychlit, ale proˇc m´ıt v´ıce pˇrehr´avaˇc˚ u kdyˇz staˇc´ı jeden. U pˇrehr´ avaˇc˚ u jsem zkoumal tak´e moˇznost z´aznamu pˇrehr´avan´eho streamu. Mnoho student˚ u jistˇe vyuˇzije moˇznost zaznamenat si sledovanou pˇredn´aˇsku. Z´aznamy je samozˇrejmˇe moˇzn´e stahovat pˇr´ımo z video server˚ u FIT, ale u nˇekter´ ych pˇredn´aˇsek tato moˇznost nen´ı, nebo jsou zveˇrejnˇeny aˇz po delˇs´ım ˇcase. Zaj´ımav´a je tak´e moˇznost napl´anovat si nahr´av´ an´ı dopˇredu. Osobnˇe velmi ˇcasto vyuˇz´ıv´am takzvan´ y time shifting. Jde o moˇznost pozastavit pr´avˇe sledovan´ y ˇziv´ y pˇrenos a pozdˇeji pokraˇcovat ve sledov´an´ı. Nejd˚ uleˇzitˇejˇs´ı zkoumanou vlastnost´ı byla snadn´a rozˇsiˇritelnost pˇrehr´avaˇce. Sudoval jsem moˇznost jednoduˇse zaˇclenit metodu PSOLA pro zmˇenu rychlosti zvuku. To vyˇzaduje modularitu pˇrehr´ avaˇce a tak´e kvalitn´ı dokumentaci.
2.1
Media Player Classic
Tento pˇrehr´ avaˇc se vyznaˇcuje svou jednoduchost´ı. Jak je patrn´e z jeho jm´ena, vzhledem vych´az´ı z pˇrehr´ avaˇce Windows Media Player verze 6. Zvl´ad´a pˇrehr´avat vˇetˇsinu zn´am´ ych form´at˚ u videa a zvuku. Bohuˇzel postr´ad´a jakoukoliv moˇznost pˇrehr´avat streamovan´e video. 1
ˇ Regal Stime Streaming Protocol
5
Media Player Classic je vyv´ıjen v r´amci projektu Guliverkli pod licenc´ı GPL. Je distribuov´an s vˇetˇsinou sad kodek˚ u. D´ıky tomu je pomˇernˇe dobˇre rozˇs´ıˇren. Bohuˇzel je z´avisl´ y na platformˇe Microsoft Windows.
2.2
Miro
Miro je pomˇernˇe nov´ y pˇrehr´ avaˇc. V mnoha smˇerech je revoluˇcn´ı. Podle v´ yvoj´aˇr˚ u [4] mˇen´ı poˇc´ıtaˇc v internetovou televizi. V podstatˇe jde sp´ıˇse o stahovaˇc videa s moˇznost´ı jeho pˇrehr´av´ an´ı. Umoˇzn ˇuje stahovat videa z mnoha internetov´ ych server˚ u. Z tˇech nejzn´amˇejˇs´ıch uvedu napˇr´ıklad YouTube. Podporuje pˇrehr´ av´ an´ı mnoha form´at˚ u videa. Vˇsechna tato videa vˇsak mus´ı b´ yt staˇzena v poˇc´ıtaˇci. Neobjevil jsem moˇznost jak pˇrehr´at multimedi´aln´ı stream. Z hlediska uˇzivatelsk´eho rozhran´ı je to velmi poveden´ y program. Kombinuje jednoduchost s modern´ımi grafick´ ymi prvky. Je platformovˇe nez´ avisl´ y a je ˇs´ıˇren pod licenc´ı GPL.
2.3
MPlayer
MPlayer je jedn´ım z nejrozˇs´ıˇrenˇejˇs´ıch open-source pˇrehr´avaˇc˚ u. Jde spustit t´emˇeˇr na vˇsech zn´am´ ych architektur´ ach. Je to v´ yborn´ y pˇrehr´avaˇc, kter´ y zvl´ad´a pˇrehr´at doslova cokoliv. Pokud je to moˇzn´e, nab´ız´ı pˇekn´e a jednoduch´e uˇzivatelsk´e rozhran´ı. Toto rozhran´ı je moˇzn´e mˇenit pomoc´ı motiv˚ u vzhledu (skin˚ u). S´am jsem tento pˇrehr´avaˇc nˇejakou dobu pouˇz´ıval a byl jsem s n´ım naprosto spokojen. Jedin´a vˇec, kter´a mi v tomto pˇrehr´avaˇci chyb´ı je moˇznost zaznamen´ av´ an´ı streamovan´eho videa na disk.
2.4
xine
Xine je sama o sobˇe knihovna pro pˇrehr´av´an´ı multim´edi´ı. Podporuje vˇetˇsinu zn´am´ ych form´at˚ u. V´ yvojov´ y t´ ym k t´eto knihovnˇe vytvoˇril i celkem pˇekn´e uˇzivatelsk´e rozhran´ı xineui. Nˇekolik zn´ am´ ych multimedi´ aln´ıch pˇrehr´avaˇc˚ u, napˇr´ıklad Totem, je postaveno pr´avˇe na xine.
2.5
GStreamer
GStreamer je knihovna pro pr´ aci s multim´edii. Kromˇe pˇrehr´av´an´ı podporuje i editaci. Obsahuje mnoho n´ astroj˚ u pro v´ yvoj´aˇre multimedi´aln´ıho software. Samotn´a knihovna je snadno rozˇsiˇriteln´ a a kdokoliv m˚ uˇze pˇrispˇet nov´ ym modulem ˇci kodekem. Na rozd´ıl od vˇsech pˇredchoz´ıch pˇrehr´ avaˇc˚ u je tato knihovna ˇs´ıˇrena pod licenc´ı LGPL, coˇz umoˇzn ˇuje jej´ı nasazen´ı i v komerˇcn´ıch pˇrehr´avaˇc´ıch. Mezi nejzn´amˇejˇs´ı pˇrehr´avaˇce zaloˇzen´e na t´eto knihovnˇe patˇr´ı napˇr´ıklad Kaffeine, Rhythmbox a Totem2 .
2.6
VLC
VLC je naprosto univerz´ aln´ı pˇrehr´avaˇc. Kromnˇe samotn´eho pˇrehr´av´an´ı vˇsech moˇzn´ ych typ˚ u m´edi´ı dok´ aˇze tak´e pracovat jako streamovac´ı server. M´a zabudovanou podporu r˚ uzn´ ych zaˇr´ızen´ı jako jsou napˇr´ıklad TV karty a kamery. Jejich obraz dok´aˇze nejen zobrazit, ale 2
Tento pˇrehr´ avaˇc je zaloˇzen jak na knihovnˇe xine tak na knihovnˇe GStreamer.
6
tak´e uloˇzit na disk, nebo vys´ılat po internetu. Z hlediska uˇzivatelsk´eho rozhran´ı jde o velmi pˇekn´ y a poveden´ y pˇrehr´ avaˇc. Tento pˇrehr´ avaˇc jsem si vybral pro svou bakal´aˇrskou pr´aci a jeho podrobnˇejˇs´ımu popisu vˇenuji celou n´ asleduj´ıc´ı kapitolu (3).
7
Kapitola 3
Pˇ rehr´ avaˇ c VLC VLC media player [5] je multiplatformn´ı multimedi´aln´ı pˇrehr´avaˇc a streamovac´ı server vyv´ıjen´ y v r´ amci projektu VideoLAN. D´ıky tomu, ˇze m´a v sobˇe zakomponov´any veˇsker´e potˇrebn´e kodeky se z nˇej st´ av´ a naprosto univerz´aln´ı a sobˇestaˇcn´ y pˇrehr´avaˇc. Porad´ı si s vˇetˇsinou zn´ am´ ych typ˚ u multim´edi´ı. Uˇzivatel´e si mohou vybrat z mnoha r˚ uzn´ ych zp˚ usob˚ u ovl´ad´an´ı. D´ıky tomu se d´ a VLC ovl´adat pˇres klasick´e uˇzivatelsk´e rozhran´ı (wxWidgets nebo skins2), konzoli (pˇr´ıkazy nebo rozhran´ı ncurses), webov´e rozhran´ı, Telnet nebo gesta myˇsi. Na obr´ azku 3.1 je zobrazeno klasick´e uˇzivatelsk´e rozhran´ı VLC.
Obr´ azek 3.1: Z´ akladn´ı uˇzivatelsk´e rozhran´ı pˇrehr´avaˇce VLC (wxWidgets).
Kromˇe klasick´eho pˇrehr´ av´ an´ı videa nab´ız´ı VLC tak´e integraci s webov´ ym prohl´ıˇzeˇcem, moˇznost vys´ılat (streamovat) po s´ıti, ukl´adat stream na disk a funkci time shifting. To z nˇej dˇel´ a opravdu univerz´ aln´ı n´ astroj pro pr´aci s videem a zvukem. Pˇr´ıkladem zaj´ımav´eho vyuˇzit´ı VLC budiˇz vys´ıl´ an´ı televizn´ıch program˚ u, pˇrij´ıman´ ych pomoc´ı televizn´ı karty, po kolejn´ı s´ıti. Na sledov´ an´ı pˇredn´ aˇsek je VLC naprosto ide´aln´ı. Umoˇzn ˇuje jak sledov´an´ı ˇziv´eho pˇrenosu z pˇredn´ aˇsky tak sledov´ an´ı jej´ıho z´ aznamu pˇr´ımo ze serveru bez nutnosti staˇzen´ı do poˇc´ıtaˇce. Aktu´ aln´ı verzi pˇrehr´ avaˇce je moˇzn´e st´ahnout na str´ank´ach http://www.videolan.org/ vlc/. K dispozici je instal´ ator pro Windows, pˇredkompilovan´e bal´ıˇcky pro r˚ uzn´e distribuce syst´emu Linux a zdrojov´e k´ ody. O velk´e rozˇs´ıˇrenosti a obl´ıbenosti VLC svˇedˇc´ı poˇcet staˇzen´ı aktu´aln´ı verze bl´ıˇz´ıc´ı se k 79 000 000 (ze dne 8.5.2008).
3.1
Vnitˇ rn´ı uspoˇ r´ ad´ an´ı
Cel´ y pˇrehr´ avaˇc VLC je sloˇzen z modul˚ u. Tyto moduly jsou na sobˇe t´emˇeˇr nez´avisl´e. D´ıky tomu je moˇzn´e upravit jednu ˇc´ ast bez vlivu na zbytek pˇrehr´avaˇce. Je tak´e velmi jednoduch´e
8
pˇridat modul zcela nov´ y. Pˇrid´ av´an´ım nov´eho modulu se budu zab´ yvat v dalˇs´ı ˇc´asti t´eto kapitoly (3.2). Vˇsechny moduly jsou sdruˇzeny do kategori´ı a subkategori´ı. D´ale je jim pˇriˇrazena jasn´ a funkce (capability) a priorita (score). Pˇri zav´adˇen´ı modul˚ u se urˇc´ı potˇrebn´e funkce a podle nich jsou moduly vybr´ any. Pokud pro urˇcitou funkci existuje v´ıce modul˚ u, vybere se ten s nejvyˇsˇs´ı prioritou. V pˇr´ıpadˇe chyby pˇri zav´adˇen´ı modulu (napˇr´ıklad nezn´am´ y form´ at vstupn´ıch dat) se zav´ adˇen´ı pˇreruˇs´ı a je vybr´an modul s prioritou niˇzˇs´ı. D´ıky tomuto postupu je vˇzdy vybr´ an modul, kter´ y nejl´epe odpov´ıd´a vˇsem poˇzadavk˚ um. Dalo by se ˇr´ıci ˇze pˇrehr´ avaˇc za bˇehu dok´ aˇze zmˇenit svou vnitˇrn´ı strukturu tak, aby co nejl´epe odpov´ıdala typu pˇrehr´ avan´eho m´edia. Z program´ atorsk´eho hlediska jsou vˇsechny moduly reprezentov´any jako objekty. Maj´ı sv´e metody, konstruktor a destruktor, datov´e poloˇzky (atributy) a d´ıky d˚ umysln´e sadˇe maker je implementov´ ana i dˇediˇcnost. Velmi elegantnˇe je tak´e vyˇreˇsena moˇznost lokalizace. Za bˇehu je VLC rozdˇelen do nˇekolika vl´aken (threads), kter´a spolu vz´ajemnˇe komunikuj´ı. To umoˇzn ˇuje spravedliv´e vyt´ıˇzen´ı vˇsech ˇc´ast´ı pˇrehr´avaˇce a dosaˇzen´ı plynul´eho pˇrehr´av´an´ı. Dek´odov´ an´ı a pˇrehr´ av´ an´ı se dˇeje naprosto nez´avisle (asynchronnˇe). T´ım je doc´ıleno toho, ˇze vˇsechny ˇc´ısti zvuku i videa jsou pˇrehr´any pˇresnˇe v urˇcen´em ˇcase bez nutnosti ˇcek´an´ı na dekod´ery. Na obr´ azku 3.2 je zn´ azornˇena vnitˇrn´ı struktura VLC pˇri pˇrehr´av´an´ı videa s titulky s vyznaˇcen´ım jednotliv´ ych vl´ aken a komunikaˇcn´ıch cest. Tento obr´azek jsem pˇrevzal od jednoho z v´ yvoj´ aˇr˚ u VLC [1].
Obr´ azek 3.2: Vnitˇrn´ı struktura VLC Seznam vˇsech kategori´ı modul˚ u je uveden v Pr˚ uvodci u ´pravami VLC [2]. J´a ve sv´e pr´ aci uvedu jen nˇekolik z´ akladn´ıch.
9
3.1.1
Moduly j´ adra
J´adro pˇrehr´ avaˇce VLC se skl´ ad´ a z nˇekolika modul˚ u. Ty se staraj´ı o bˇeh cel´eho pˇrehr´avaˇce. • VLC Spustiteln´ y program. Zpracov´av´a parametry pˇr´ıkazov´e ˇr´adky a zav´ad´ı modul LibVLC. Pˇri pouˇzit´ı VLC jako knihovny nem´a tento modul smysl a o zaveden´ı LibVLC se star´ a aplikace kter´ a tuto knihovnu pouˇz´ıv´a. • LibVLC Zapouzdˇren´ı VLC do knihovny. Umoˇzn ˇuje pouˇz´ıt VLC jako knihovnu pro pˇrehr´ av´ an´ı multimedi´ aln´ıho obsahu v ciz´ıch aplikac´ıch. Zav´ad´ı vˇsechny potˇrebn´e moduly j´ adra. Poskytuje rozhran´ı pro ˇr´ızen´ı bˇehu pˇrehr´av´an´ı a pˇr´ıstup k vnitˇrn´ım promˇenn´ ym VLC. • Interface Zav´ ad´ı moduly uˇzivatelsk´eho rozhran´ı. • Playlist Zav´ ad´ı modul Input. Je ovl´ad´an pˇr´ıkazy od uˇzivatelsk´ ym rozhran´ım a na jejich z´ akladˇe ˇr´ıd´ı cel´e pˇrehr´av´an´ı. • Input Podle typu pˇrehr´ avan´eho m´edia vyb´ır´a a zav´ad´ı potˇrebn´e vstupn´ı moduly, demultiplexor a dekod´ery. D´ale se star´a o nahr´av´an´ı a ukl´ad´an´ı nahran´eho videa na disk. • Video output Zav´ ad´ı a ˇr´ıd´ı filtry videa a v´ ystupn´ı modul. • Audio output Zav´ ad´ı a ˇr´ıd´ı vˇsechny moduly potˇrebn´e pro koneˇcnou u ´pravu a v´ ystup zvuku. • Stream output Zav´ ad´ı a ˇr´ıd´ı vˇsechny moduly potˇrebn´e pro sestaven´ı streamu a jeho vys´ıl´ an´ı po s´ıti. V pˇr´ıpadˇe potˇreby duplikuje data z dekod´er˚ u pro moduly v´ ystupu videa a zvuku.
3.1.2
Vstupn´ı moduly
Moduly vstupu se staraj´ı o otevˇren´ı m´edia, zjiˇstˇen´ı z´akladn´ıch informac´ı a zprostˇredkov´ an´ı dat v nˇejak´e jednotn´e formˇe d´ ale do pˇrehr´avaˇce. Mezi z´akladn´ı patˇr´ı napˇr´ıklad typ m´edia, ˇcasov´an´ı a moˇznost pˇresouvat se (seek) v obsahu. Tyto informace jsou velmi d˚ uleˇzit´e pro bˇeh cel´eho pˇrehr´ avaˇce. Pokud nen´ı moˇzn´e se v obsahu pˇresouvat, nem´a smysl zobrazovat ukazatel pr˚ ubˇehu a hlavnˇe nelze mˇenit rychlost pˇrehr´av´an´ı. M´ediem bez moˇznosti pˇresouvat se v obsahu je napˇr´ıklad ˇziv´ y pˇrenos z pˇredn´aˇsky.
3.1.3
Demultiplexory
Tyto moduly maj´ı na starost rozdˇelen´ı vstupn´ıho proudu na video, zvuk a titulky. T´emˇeˇr pro kaˇzd´ y typ m´edia je potˇreba jin´ y demultiplexor. V m´ıstˇe demultiplexoru jsou data naposledy v jednom vl´ aknu programu. Proto mus´ı demultiplexor zprostˇredkovat informace o ˇcasov´ an´ı jednotliv´ ych ˇc´ ast´ı.
3.1.4
Dekod´ ery
Dekod´er˚ u jsou tˇri typy. Dekod´ery videa, dekod´ery zvuku a dekod´ery titulk˚ u. Jejich prac´ı je pˇrev´est vstupn´ı data do jednotn´e, nekomprimovan´e (raw) formy. Po dek´odov´an´ı uˇz t´emˇeˇr nez´aleˇz´ı na tom, jak´ y form´ at m´edia je pˇrehr´av´an. Jedinou nemˇenitelnou vlastnost´ı je jiˇz zm´ınˇen´ a moˇznost pˇresouvat se v obsahu. 10
3.1.5
Filtry videa
Mezi tyto moduly patˇr´ı r˚ uzn´e efekty, odstranˇen´ı prokl´ad´an´ı, rozdˇelen´ı videa na v´ıce ˇc´ast´ı a tak´e zakomponov´ an´ı OSD1 informac´ı do obrazu. Mezi tento druh informac´ı patˇr´ı i titulky.
3.1.6
Filtry zvuku
Zpracov´ an´ı zvuku se skl´ ad´ a z nˇekolika krok˚ u. ´ • Uprava rychlosti zvuku za pomoci pˇrevzorkov´an´ı (resampling). Mezi tyto moduly pˇrid´ av´ am v t´eto bakal´ aˇrsk´e pr´aci sv˚ uj vlastn´ı, kter´ y za pomoci metody PSOLA zachov´ av´ a srozumitelnost ˇreˇci pˇri zmˇenˇe rychlosti. ´ • Uprava poˇctu zvukov´ ych kan´al˚ u. Tento krok je d˚ uleˇzit´ y napˇr´ıklad pˇri pˇrehr´av´ an´ı prostorov´eho zvuku na stereo reproduktorech, nebo naopak pˇri pˇrehr´av´an´ı stereo nahr´ avky na dom´ ac´ım kinu. ´ • Uprava zvuku pomoc´ı ekvaliz´eru a dalˇs´ıch filtr˚ u. Ve VLC je implementov´an desetikan´ alov´ y ekvaliz´er s nˇekolika pˇredvolbami a moˇznost´ı dvoupr˚ uchodov´eho zpracov´an´ı. Mezi zvukov´e filtry patˇr´ı napˇr´ıklad normalizace hlasitosti. • Pˇrevod do form´ atu vhodn´eho pro v´ ystup. Zvuk je ve VLC zpracov´av´an pˇrev´aˇznˇe ve form´ atu s plovouc´ı ˇr´ adovou ˇc´arkou. V nˇekter´ ych pˇr´ıpadech je vˇsak tento form´ at odliˇsn´ y.
3.1.7
V´ ystupn´ı moduly
Moduly pro v´ ystup videa a zvuku. Tyto moduly se liˇs´ı v z´avislosti na architektuˇre c´ılov´eho operaˇcn´ıho syst´emu. Ve Windows je v´ ystup realizov´an pomoc´ı rozhran´ı DirectX. V Linuxu jsou to napˇr´ıklad X112 pro video a ALSA3 pro zvuk.
3.2
Rozˇ siˇ ritelnost
D´ıky sv´e modularitˇe je VLC snadno rozˇsiˇriteln´ y. Bohuˇzel, dokumentace je v dobˇe psan´ı t´eto pr´ace nekompletn´ı a dosti obecn´ a. V´ yvoj´aˇri slibuj´ı, ˇze se vˇse v budoucnosti zlepˇs´ı. I pˇres tuto komplikaci je psan´ı modul˚ u pro VLC celkem snadn´e. Moduly je moˇzn´e ps´at bud’ v jazyku C, nebo v jazyku C++. O pˇreloˇzen´ı a prov´az´an´ı vˇsech modul˚ u se star´a sada automatizovan´ ych konfiguraˇcn´ıch a pˇrekladov´ ych skript˚ u. V podstatˇe staˇc´ı pouze napsat modul, pˇridat seznam zdrojov´ ych k´ od˚ u potˇrebn´ ych pro pˇreloˇzen´ı modulu do seznamu zdrojov´ ych k´od˚ u, pˇridat modul do hlavn´ıho konfiguraˇcn´ıho skriptu a pˇreloˇzit. Bˇehem pˇrekladu je modul zakomponov´an do pˇrehr´avaˇce jako dynamick´a knihovna. Je tak´e moˇzn´e modul vytvoˇrit naprosto samostatnˇe a potom jej do VLC pˇridat jako jiˇz zkompilovanou knihovnu. O tuto moˇznost jsem se pˇr´ıliˇs nezaj´ımal. Pˇri psan´ı modulu je kv˚ uli nekompletn´ı dokumentaci vhodn´e vych´azet z jiˇz hotov´eho a funkˇcn´ıho modulu. D˚ uleˇzit´e ˇc´ asti jsou vˇetˇsinou velmi podobn´e a neliˇs´ı se ani v r˚ uzn´ ych kategori´ıch. Vˇetˇsina datov´ ych struktur je popsan´a pouze v hlaviˇckov´ ych souborech. To velmi znesnadˇ nuje pochopen´ı VLC, protoˇze koment´aˇre obˇcas chyb´ı, nebo pˇresnˇe nevystihuj´ı podstatu ˇc´ asti k´ odu. 1
On-Screen Display X Window System 3 Advanced Linux Sound Architecture 2
11
3.2.1
Struktura modulu
Vˇsechny moduly ve VLC maj´ı spoleˇcnou z´akladn´ı strukturu. Obsahuj´ı hlaviˇcku modulu a z´akladn´ı funkce potˇrebn´e pro svou funkci. V hlaviˇcce modulu se definuj´ı vˇsechny potˇrebn´e parametry, napˇr´ıklad o jak´ y modul se jedn´a a jak´e m´a konfiguraˇcn´ı hodnoty (zobrazen´e v nastaven´ı VLC). Je tak´e moˇzn´e dodefinovat submoduly. To je uˇziteˇcn´e zejm´ena u rozs´ahlejˇs´ıch modul˚ u. Pro zaˇc´ atek bych r´ ad upozornil na dvˇe d˚ uleˇzit´a makra. Jsou to N_( string ) a _( string ). Prvn´ı z nich vytvoˇr´ı pˇreloˇziteln´ y (lokalizovateln´ y) ˇretˇezec. Druh´e nav´ıc ˇretˇezec pˇr´ımo pˇrekl´ ad´ a. Pˇri psan´ı modulu doporuˇcuji pouˇz´ıvat prvn´ı z maker. Jeho pouˇzit´ı je naprosto bezpeˇcn´e. Druh´e z maker m˚ uˇze zp˚ usobit oˇskliv´e probl´emy pokud nebude ˇretˇezec spr´avnˇe pˇreloˇzen. Pˇri lokalizaci je samozˇrejmˇe nutn´e pˇrej´ıt na druh´e makro aby se zmˇeny projevily. Hlaviˇ cka modulu Hlaviˇcka modulu se vytv´ aˇr´ı pomoc´ı vkl´ad´an´ı nˇekolika maker. Tato makra jsou definov´ana v hlaviˇckov´em souboru vlc_modules_macros.h. J´a pop´ıˇsi jen ty nejd˚ uleˇzitˇejˇs´ı. • vlc module begin( ) Zaˇc´ atek definice modulu. • vlc module end( ) Konec definice modulu. • add shortcut( shortcut ) Definice vnitˇrn´ıho jm´ena modulu. • set shortname( shortname ) Definice jm´ena modulu, kter´e se zobrazuje napˇr´ıklad v nastaven´ı. • set capability( cap, score ) Definice funkˇcnosti modulu. Poloˇzka cap urˇcuje kategorii modulu. Poloˇzka score urˇcuje jeho prioritu. Tato poloˇzka m´a zˇrejmˇe i jin´ y v´ yznam, kter´ y se mi nepodaˇrilo zcela objasnit. Zd´a se ˇze hodnota nˇejak´ ym zp˚ usobem zpˇresˇ nuje funkci modulu. Napˇr´ıklad u resampler˚ u se hodnota t´eto poloˇzky pohybuje mezi 1 a 99. Hodnota 0 je pˇriˇrazena obecn´ ym filtr˚ um. • set callbacks( activate, deactivate ) Definice konstruktoru a destruktoru, neboli funkc´ı, kter´e se zavolaj´ı pˇri aktivaci a deaktivaci modulu. Dalˇs´ı makra, definovan´ a v hlaviˇckov´em souboru vlc_configuration.h, umoˇzn ˇuj´ı k modulu definovat konfiguraˇcn´ı hodnoty. Tyto hodnoty je po spuˇstˇen´ı moˇzn´e mˇenit v nastaven´ı pˇrehr´avaˇce. Opˇet uvedu pˇr´ıklady tˇech nejd˚ uleˇzitˇejˇs´ıch. • set category( i id ) Definice kategorie. V tomto pˇr´ıpadˇe jde ˇcistˇe o kategorii pod kterou se bude nastaven´ı modulu zobrazovat v menu. • set subcategory( i id ) Definice subkategorie. Plat´ı to sam´e co pro kategorii. • add integer( name, value, p callback, text, longtext, advc ) Definice ˇc´ıseln´e konfiguraˇcn´ı hodnoty. Parametr name urˇcuje vnitˇrn´ı n´azev hodnoty. Parametr value urˇcuje v´ ychoz´ı hodnotu. Parametr p_callback urˇcuje ukazatel na funkci, kter´a se provede po zmˇenˇe hodnoty. Parametr text urˇcuje zobrazovan´ y n´azev poloˇzky. Parametr longtext urˇcuje popis hodnoty. Parametr advc urˇcuje, zda bude hodnota zobrazena v norm´ aln´ım, nebo pouze v pokroˇcil´em nastaven´ı.
12
• add string( name, value, p callback, text, longtext, advc ) Definice textov´e konfiguraˇcn´ı hodnoty. V´ yznam parametr˚ u je stejn´ y jako u makra pro pˇrid´an´ı ˇc´ıseln´e hodnoty. • change string list( list, list text, list update func ) Zmˇena textov´e konfiguraˇcn´ı hodnoty na seznam s v´ ybˇerem. Parametr list urˇcuje seznam vˇsech moˇzn´ ych konfiguraˇcn´ıch hodnot. Parametr list_text urˇcuje n´azvy tˇechto hodnot. Posledn´ı parametr list_update_func nen´ı nikde pouˇzit. Zˇrejmˇe jde o poz˚ ustatek z minulosti, nebo pl´ anovan´e rozˇs´ıˇren´ı do budoucna. Konstruktor a destruktor Tyto funkce maj´ı jedin´ y parametr. T´ım je ukazatel na nˇekter´eho z potomk˚ u struktury vlc_object_t. V podstatˇe je to ukazatel na objekt. Kaˇzd´ y modul m´a ve sv´em objektu atribut p_sys. Do tohoto atributu si modul ukl´ad´a vlastn´ı strukturu s potˇrebn´ ymi daty. ´ Ukolem konstruktoru je tuto strukturu vytvoˇrit a inicializovat. D´ale kontroluje, zda je v˚ ubec moˇzn´e modul pouˇz´ıt. Destruktor se star´a o uvolnˇen´ı alokovan´e pamˇeti, popˇr´ıpadˇe odstranˇen´ı vˇsech dynamicky vytvoˇren´ ych objekt˚ u.
3.2.2
Zvukov´ e filtry
Zvukov´e filtry jsou potomky typu vlc_object_t. Rozˇsiˇruj´ı tento typ o informace o zpracov´avan´em zvukov´em proudu. D´ ale pˇrib´ yv´a ukazatel pf_do_work. Do tohoto ukazatele je pˇri inicializaci modulu potˇreba pˇriˇradit ukazatel na funkci prov´adˇej´ıc´ı vlastn´ı zpracov´ an´ı (v´ ykonnou funkci). Dalˇs´ım nov´ ym atributem je b_in_place. Ten urˇcuje, zda se bude alokovat nov´ y v´ ystupn´ı buffer, nebo zda postaˇc´ı buffer vstupn´ı, kter´ y se pˇrep´ıˇse. V´ ykonn´ a funkce V´ ykonn´ a funkce m´ a ˇctyˇri parametry. Prvn´ım parametrem je ukazatel na instanci cel´eho vl´akna zvukov´eho v´ ystupu. Je to vlastnˇe ukazatel na modul Audio output z j´adra VLC. Dalˇs´ım parametrem je ukazatel na instanci modulu. Pro tento parametr budu v n´asleduj´ıc´ım popisu pouˇz´ıvat oznaˇcen´ı p_filter. Posledn´ı dva parametry obsahuj´ı ukazatele na vstupn´ı a v´ ystupn´ı buffery. Buffery jsou implementov´ any jako struktury obsahuj´ıc´ı pole s daty a dalˇs´ı potˇrebn´e informace. • p buffer Pole s daty. Podle hlaviˇckov´eho souboru je typu uint8_t *, ale vˇetˇsinou obsahuje poloˇzky typu float. • i alloc type Urˇcuje typ alokace: 0 - ˇz´adn´a, 1 - alokace na z´asobn´ıku (stack), 2 alokace na haldˇe (heap). aln´ a velikost bufferu. Pouˇz´ıv´a se pouze k lad´ıc´ım u ´ˇcel˚ um. • i size Re´ • i nb bytes Skuteˇcn´ y poˇcet vyuˇzit´ ych byt˚ u v bufferu. • i nb samples Poˇcet vzork˚ u v bufferu. Tato hodnota urˇcuje poˇcet vzork˚ u v jednom kan´ alu. V bufferu je uloˇzen celkov´ y poˇcet vzork˚ u rovnaj´ıc´ı se t´eto hodnotˇe kr´at poˇcet kan´ al˚ u. ˇ • start date Casov´ a znaˇcka urˇcuj´ıc´ı zaˇc´atek pˇrehr´av´an´ı t´eto ˇc´asti zvukov´eho proudu. 13
ˇ • end date Casov´ a znaˇcka urˇcuj´ıc´ı konec pˇrehr´av´an´ı t´eto ˇc´asti zvukov´eho proudu. • b discontinuity U proud˚ u, kter´e nevyuˇz´ıvaj´ı PCM4 , oznaˇcuje nespojitost. • p next Ukazatel na n´ asleduj´ıc´ı buffer. • p sys Tato poloˇzka se jiˇz nepouˇz´ıv´a a bude odstranˇena. • pf release D´ıky tomuto ukazateli je moˇzn´e dodefinovat vlastn´ı funkci, kter´a bude buffer uvolˇ novat. Typ dat uloˇzen´ ych v bufferu se d´a zjistit z atributu p_filter->input.i_format. Pokud se tato hodnota rovn´ a v´ ystupu makra VLC_FOURCC(’f’,’l’,’3’,’2’), jde o typ float. Pokud se rovn´ a VLC_FOURCC(’f’,’i’,’3’,’2’), jde o typ unsigned int. J´a jsem se osobnˇe setkal pouze s prvn´ı moˇznost´ı a vˇetˇsina novˇejˇs´ıch filtr˚ u s touto moˇznost´ı poˇc´ıt´a. Poˇcet kan´ al˚ u je moˇzn´e z´ıskat pomoc´ı funkce aout_FormatNbChannels( &p_filter->input ). Vzorky z jednotliv´ ych kan´ al˚ u jsou v bufferu uloˇzeny po skupin´ach. Po vzorc´ıch ˇc´ıslo 1 ze vˇsech kan´ al˚ u n´ asleduj´ı vzorky ˇc´ıslo 2 a tak d´ale.
4
Pulse-Code Modulation
14
Kapitola 4
Metoda PSOLA a fon´ emov´ y rozpozn´ avaˇ c Ve sv´e bakal´ aˇrsk´e pr´ aci pouˇz´ıv´ am zdrojov´e k´ody pro v´ ypoˇcet metody PSOLA z diplomov´e pr´ace Ing. Kov´ aˇr´ıka. M´ ym u ´kolem je pouˇz´ıt tyto zdrojov´e k´ody v pˇrehr´avaˇci VLC. Text t´eto kapitoly je zjednoduˇsen´ ym v´ ytahem z diplomov´e pr´ace Ing. Kov´aˇr´ıka [7], do kter´eho nepˇrid´ av´ am ˇz´ adn´e nov´e myˇslenky. Pouˇzit´e obr´azky rovnˇeˇz poch´az´ı z uveden´e diplomov´e pr´ace. Metoda PSOLA (Pitch Synchronous OverLap Add) byla vyvinuta spoleˇcnost´ı France Telecom (CNET). Slouˇz´ı pro snadnou u ´pravu d´elky a z´akladn´ıho t´onu sign´alu. Syntetiz´ery pouˇz´ıvaj´ıc´ı tuto metodu se vyznaˇcuj´ı vysokou kvalitou v´ ystupu a n´ızkou v´ ypoˇcetn´ı n´aroˇcnost´ı. Pitch synchronous znamen´a, ˇze segmenty hlasov´e nahr´avky jsou napojov´any tak, aby se pˇrekryly periody z´ akladn´ıho t´onu. T´ım je zamezeno vzniku nepˇr´ıjemn´ ych zvukov´ ych artefakt˚ u. PSOLA m´ a nˇekolik variant. Varianta, kterou Ing. Kov´aˇr´ık pouˇz´ıv´a ve sv´e diplomov´e pr´aci pracuje v ˇcasov´e oblasti. Proto je naz´ yv´ana TD-PSOLA1 (Time Domain PSOLA). Ta je velmi jednoduch´ a a v´ ypoˇcetnˇe nen´aroˇcn´a. Dalˇs´ımi variantami jsou FD-PSOLA (Frequency Domain) pracuj´ıc´ı ve frekvenˇcn´ı oblasti, LP-PSOLA (Linear Prediction) pracuj´ıc´ı s line´arn´ı predikc´ı a WD-PSOLA (Wawelet Domain) pracuj´ıc´ı s vlnkovou transformac´ı. Algoritmus PSOLA pracuje n´ asleduj´ıc´ım zp˚ usobem: V hlasov´em sign´alu se urˇc´ı z´akladn´ı t´on. Pˇresn´e urˇcen´ı period z´ akladn´ıho t´onu je kl´ıˇcem ke kvalitn´ımu v´ ysledku. Zaˇc´atky period se oznaˇc´ı Pitch Marky (Pitch Marks). Spojov´an´ı segment˚ u metodou pˇrekryj a seˇcti (OverLap Add) prob´ıh´ a na u ´rovni period z´akladn´ıho t´onu. Aby byl pˇrechod mezi periodami co nejhladˇs´ı, je nutn´e tyto periody (“vyseknout) ” ˇ pomoc´ı ok´enkovac´ı funkce. Casto pouˇz´ıvanou ok´enkovac´ı funkc´ı je Hammingova funkce. Ok´enkovac´ı funkce se aplikuje v rozsahu dvou aˇz ˇctyˇr period z´akladn´ıho t´onu v okol´ı pitch marku na jehoˇz pozici je ok´enkovac´ı funkce vystˇredˇena. N´asleduje v´ ypoˇcet nov´ ych pozic pitch mark˚ u na nˇeˇz jsou namapov´ana z´ıskan´a ok´enka. Ta jsou potom pomoc´ı metody OLA seˇctena a je z´ısk´an syntetizovan´ y v´ ystupn´ı sign´al. Pomoc´ı manipulace s polohou pitch mark˚ u lze doc´ılit zmˇeny z´akladn´ıho t´onu. Pomoc´ı zdvojov´an´ı nebo vynech´ av´ an´ı pitch mark˚ u lze doc´ılit zmˇeny d´elky syntetizovan´eho sign´alu. Na obr´azku 4.1 je zn´ azornˇena metoda PSOLA pˇr sniˇzov´an´ı z´akladn´ıho t´onu. Ve sv´e diplomov´e pr´ aci Ing. Kovaˇr´ık mˇen´ı rychlost ˇreˇci pr´avˇe d´ıky manipulaci s pitch marky. Pˇri klasick´e zmˇenˇe rychlosti je koeficient zmˇeny β konstantn´ı. Pˇri zapojen´ı fon´emov´eho 1
R PSOLA/TD je registrovanou obchodn´ı znaˇckou spoleˇcnosti France Telecom.
15
Obr´ azek 4.1: Funkce metody PSOLA pˇri sn´ıˇzen´ı z´akladn´ıho t´onu
rozpozn´ avaˇce se vˇsak tento koeficient v mˇen´ı v ˇcase podle flexibility zjiˇstˇen´ ych fon´em˚ u. T´ım je dosaˇzeno vˇetˇs´ı srozumitelnosti syntetizovan´eho sign´alu.
4.1
Detekce z´ akladn´ıho t´ onu
Detekce z´ akladn´ıho t´ onu a spr´ avn´e um´ıstˇen´ı pitch mark˚ u m´a ohromn´ y v´ yznam na kvalitu syntetizovan´eho sign´ alu. Pˇri potˇrebˇe co nejpˇresnˇejˇs´ı detekce je tento u ´kol svˇeˇren lidem, kteˇr´ı ruˇcnˇe zad´ avaj´ı pozice pitch mark˚ u. To je vˇsak zdlouhav´e. Proto se tento postup pouˇz´ıv´ a napˇr´ıklad pˇri tvorbˇe fon´emov´e datab´aze pro tvorbu ˇreˇci. Bˇehem pˇrehr´av´an´ı videa se mus´ıme spokojit se strojovou detekc´ı z´ akladn´ıho t´onu. V n´ asleduj´ıc´ı ˇc´ asti pr´ ace uvedu struˇcn´ y popis nˇekter´ ych metod strojov´e detekce z´akladn´ıho t´onu. Vˇsechny uveden´e metody pracuj´ı s r´amci. To znamen´a ˇze nezpracov´avaj´ı cel´ y sign´ al najednou, ale pouze jeho jednotliv´e ˇc´asti. To je velmi d˚ uleˇzit´a vlastnost pro pouˇzit´ı tˇechto metod pˇri u ´pravˇe rychlosti za bˇehu, kdy nen´ı moˇzn´e prozkoumat pˇredem cel´ y sign´al.
4.1.1
Autokorelaˇ cn´ı funkce
Nejjednoduˇsˇs´ım zp˚ usobem z´ısk´ an´ı z´akladn´ıho t´onu je CCF (Cross-Correlation Function). Tato funkce pracuje v ˇcasov´e oblasti. Princip t´eto funkce spoˇc´ıv´a v posouv´an´ı sign´alu v˚ uˇci sobˇe samotn´emu a hled´ an´ı co nejvˇetˇs´ı shody. Podobnost se urˇcuje vyn´asoben´ım posunut´ ych vzork˚ u a n´ asledn´ ym seˇcten´ım tˇechto n´asobk˚ u. Posunut´ı s nejvyˇsˇs´ım v´ ysledkem autokorelaˇcn´ı funkce odpov´ıd´ a periodˇe z´ akladn´ıho t´onu. Podobnou funkc´ı je AMDF (Average Magnitude Difference Function). Ta je m´enˇe v´ ypoˇcetnˇe n´ aroˇcn´ a, protoˇze m´ısto souˇcinu pouˇz´ıv´a rozd´ıl a m´ısto maxima hled´a minimum.
16
4.1.2
Harmonic Product Spectrum (HPS)
Harmonic Product Spectrum pracuje ve frekvenˇcn´ı oblasti. Vych´az´ı z pˇredpokladu ˇze ˇreˇcov´ y ˇ sign´al je v´ ysledkem filtrov´ an´ı z´ akladn´ıho t´onu v artikulaˇcn´ım u ´stroj´ı. Reˇcov´ y sign´al se tedy skl´ad´a ze z´ akladn´ıho t´ onu a jeho celoˇc´ıseln´ ych n´asobk˚ u (harmonick´ ych sloˇzek). Algoritmus tedy pˇrevede ˇreˇcov´ y sign´ al pomoc´ı rychl´e Fourierovy transformace (FFT) do frekvenˇcn´ı oblasti. N´ aslednˇe tento pˇreveden´ y sign´al (spektrum) nˇekolikr´at podvzorkuje. V´ ysledkem se souˇcin spektra sign´ alu a jeho podvzorkovan´ ych podob. V m´ıstˇe maxima tohoto souˇcinu se nach´az´ı z´ akladn´ı t´ on. Princip algoritmu HPS je zn´azornˇen na obr´azku 4.2
Obr´ azek 4.2: Harmonic Product Spectrum
4.1.3
Harmonic and Noise Model (HNM)
Trasovaˇc spojit´eho z´ akladn´ıho t´ onu na z´akladˇe modelu harmonick´ ych a ˇsumu myl vyvinut na naˇs´ı fakultˇe. Jde o velmi sofistikovan´ y a pˇresn´ y algoritmus. Na rozd´ıl od pˇredchoz´ıch metod dok´ aˇze tento algoritmus doplnit pitch marky i v neznˇel´ ych ˇc´astech ˇreˇcov´eho sign´alu. Principem tohoto algoritmu je, ˇze se snaˇz´ı vyrobit sign´al co nejpodobnˇejˇs´ı zkouman´emu ˇreˇcov´emu sign´ alu. Podobnˇe jako HPS vych´az´ı z pˇredpokladu, ˇze ˇreˇcov´ y sign´al je sloˇzen pˇrev´aˇznˇe ze z´ akladn´ıho t´ onu a harmonick´ ych sloˇzek. Pro z´ısk´an´ı modul˚ u a f´az´ı frekvenc´ı, ze kter´ ych se ˇreˇcov´ y sign´ al skl´ ad´ a je pouˇzita rychl´a Fourierova transformace. Na z´akladˇe tˇechto informac´ı jsou potom pro urˇcit´ y rozsah frekvenc´ı z´akladn´ıho t´onu generov´any sign´aly a je zkoum´ ana jejich podobnost se sign´alem ˇreˇcov´ ym. Podobnost se urˇcuje na z´akladˇe v´ ypoˇctu chyb. Tyto chyby se ukl´ adaj´ı do chybov´e matice. Pomoc´ı metody hled´ an´ı cesty s nejmenˇs´ı cenou (chybou) je v chybov´e matici nalezena z´akladn´ı frekvence pro kaˇzdou znˇelou ˇc´ast sign´alu. Pro urˇcen´ı znˇelosti a neznˇelosti je pouˇzita metoda prahov´ an´ı. Ve znˇel´ ych ˇc´ astech se pitch marky um´ıst’uj´ı do m´ıst pˇredpokl´adan´eho vrcholu excitace periody z´ akladn´ıho sign´alu. V neznˇel´e ˇc´asti se pitch mark um´ıst´ı na m´ısto souˇctu pozice pˇredchoz´ıho pitch marku a periody z´akladn´ı frekvence. 17
4.2
Ok´ enkovac´ı funkce
Volba spr´ avn´e ok´enkovac´ı funkce m´a vliv na celkovou kvalitu syntetizovan´eho sign´alu. Pˇri volbˇe ˇspatn´e funkce se v sign´ alu mohou vyskytovat nechtˇen´e artefakty. Nejˇcastˇeji se pouˇz´ıv´ a Hanningova nebo Hammingova funkce. Ing. Kov´aˇr´ık ve sv´e pr´aci vysvˇetluje, ˇze tyto funkce pˇri pouˇzit´ı metody OLA nepˇr´ıznivˇe ovlivˇ nuj´ı v´ ystupn´ı sign´al. Kromˇe ˇz´adan´e zmˇeny rychlosti vstupn´ıho sign´ alu tak´e zvyˇsuj´ı jeho energii, protoˇze souˇcet sousedn´ıch segment˚ u tˇechto ok´enkovac´ıch funkc´ı je vˇetˇs´ı neˇz 1. Jako nejl´epe pouˇziteln´ a funkce se jev´ı sin2 . D´ıky tomu, ˇze funkce sin pˇri posunu o ˇctvrt peroidy odpov´ıd´ a funkci cos, doch´az´ı pˇri ok´enkov´an´ı pˇres dvˇe periody z´akladn´ıho t´onu k pˇrekryt´ı funkce sin2 a cos2 . Souˇcet tˇechto 2 funkc´ı je 1. Tato ok´enkovac´ı funkce tak´e preferuje ˇc´ ast kolem stˇredu pitch marku a zm´ırˇ nuje tak moˇzn´e interference mezi sousedn´ımi segmenty. Vlastnost souˇctu rovn´eho 1 m´a i line´arn´ı funkce. Ta vˇsak zp˚ usobuje vˇetˇs´ı prom´ısen´ı sousen´ıch segment˚ u. Z´ akladn´ı ok´enkovac´ı funkce jsou zn´azornˇeny na obr´azku 4.3.
Obr´azek 4.3: Ok´enkovac´ı funkce
4.3
V´ ybˇ er period z´ akladn´ıho t´ onu
V´ ybˇer period z´ akladn´ıho t´ onu urˇcuje, zda bude mˇenˇena rychlost cel´eho sign´alu nebobude mˇenˇen jeho z´ akladn´ı t´ on. Moˇzn´ a je samozˇrejmˇe i kombinace. Z´aleˇz´ı na tom, zda se bude mˇenit vzd´ alenost mezi pitch marky, nebo budou nˇekter´e z nich zdvojeny popˇr´ıpadˇe vynech´any. Pˇri u ´pravˇe vzd´ alenosti mezi pitch marky doch´az´ı ke zmˇenˇe z´akladn´ıho t´onu. Pro sn´ıˇzen´ı z´akladn´ıho t´ onu se tato vzd´ alenost zvˇetˇsuje, naopak pro zv´ yˇsen´ı z´akladn´ıho t´onu se zmenˇsuje. 18
Pro zachov´ an´ı d´elky sign´ alu je nutn´e nˇekter´e pitch marky vynechat, nebo naopak zdvojit. Pˇri zmˇenˇe rychlosti sign´ alu je nutn´e urˇcit, kter´e periody z´akladn´ıho t´onu se pouˇzij´ı a kter´e ne. Nov´e pitch marky se naz´ yvaj´ı syntetizovan´e. Jejich v´ ybˇer se prov´ad´ı pomoc´ı integrace funkce koeficientu zmˇeny rychlosti β. Pˇri bˇeˇzn´e zmˇenˇe rychlosti je tato funkce line´arn´ı a integrace je konstantn´ı. Na obr´azku 4.4 je zn´azornˇen v´ ybˇer period z´akladn´ıho t´onu pro koeficient zmˇeny 0, 5. Na zaˇc´ atku v´ ybˇeru se prvn´ı pitch mark ze zdrojov´eho sign´alu oznaˇc´ı jako syntetizovan´ y. V dalˇs´ıch iterac´ıch se pokraˇcuje podle n´asleduj´ıc´ıho algoritmu: 1. Na grafu integr´ alu se vyhled´a hodnota syntetizovan´eho pitch marku. 2. Vzorek z osy x, kter´ y tuto hodnotu nesl spad´a do nˇejak´e periody. Tento vzorek je oznaˇcen jako virtu´ aln´ı pitch mark. 3. D´elka t´eto periody se pˇriˇcte k syntetizovan´emu pitch marku a t´ım je nalezen nov´ y. Kroky 1 - 3 se opakuj´ı aˇz do dosaˇzen´ı konce vstupn´ıho sign´alu. Virtu´ aln´ı pitch marky urˇcuj´ı, kter´e periody z´akladn´ıho t´onu se pouˇzij´ı pˇri synt´eze nov´eho sign´alu. Nov´e segmenty se na konec syntetizovan´eho sign´alu pˇripojuj´ı tak, ˇze jejich lev´ y okraj je zarovn´ an na stˇred pˇredchoz´ıho segmentu.
Obr´ azek 4.4: Urˇcen´ı syntetizovan´ ych pitch mark˚ u
4.4
Rozˇ s´ıˇ ren´ı o fon´ emov´ y rozpozn´ avaˇ c
Aby byl v´ ystup metody PSOLA co moˇzn´a nejsrozumitelnˇejˇs´ı, je potˇreba zohlednit flexibilitu jednotliv´ ych fon´em˚ u. Fon´emy jsou nejmenˇs´ı souˇc´asti zvukov´e str´anky ˇreˇci, kter´e maj´ı rozliˇsovac´ı funkci. Z´ amˇena fon´emu m´a schopnost zmˇenit v´ yznam slova [8]. Kaˇzd´ y fon´em se od ostatn´ıch liˇs´ı alespoˇ n jednou fonologickou distinktivn´ı vlastnost´ı. Jednou z tˇechto vlastnost´ı je napˇr´ıklad kvantita — d´elka trv´an´ı fon´emu. 19
Spisovn´ a ˇceˇstina obsahuje 36 fon´em˚ u. Okolo tohoto poˇctu a seznamu vˇsech fon´em˚ u se vedou debaty a pˇre. Ing. Kov´ aˇr´ık pouˇz´ıv´a ve sv´e diplomov´e pr´aci ˇceskou fon´emovou sadu z knihovny BSAPI vyv´ıjen´e na naˇs´ı fakultˇe. Tato fon´emov´a sada obsahuje celkem 46 fon´em˚ u vˇcetnˇe nˇekter´ ych, kter´e zastupuj´ı r˚ uzn´e chyby sign´alu a ruchy v pozad´ı.
4.4.1
Fon´ emov´ y rozpozn´ avaˇ c
Fon´emov´ y rozpozn´ avaˇc detekuje fon´emy v ˇreˇcov´em sign´alu. Ve zm´ınˇen´e knihovnˇe BSAPI je jako jeden z modul˚ u implementov´an fon´emov´ y rozpozn´avaˇc zaloˇzen´ y na hierarchick´ ych neuronov´ ych s´ıt´ıch. Vstupem tohoto rozpozn´avaˇce je ˇreˇcov´ y sign´al a v´ ystupem sekvence fon´em˚ u.
4.4.2
Rozˇ s´ıˇ ren´ı PSOLY
Pro kaˇzd´ y fon´em byla urˇcena jeho flexibilita γ. Ta ˇr´ık´a, do jak´e m´ıry je moˇzn´e zmˇenit d´elku fon´emu se zachov´ an´ım jeho srozumitelnosti. Flexibilitou jednotliv´ ych fon´em˚ u je n´asledovnˇe modifikov´ ana funkce β. Vzhledem k tomu, ˇze v bˇeˇzn´e ˇreˇci je dosti velk´e zastoupen´ı m´enˇe flexibiln´ıch fon´em˚ u, je v´ ysledn´ a zmˇena rychlosti menˇs´ı, neˇz jak´a byla poˇzadov´ana.
20
Kapitola 5
Implementace Metotu PSOLA jsem do pˇrehr´ avaˇce VLC zaˇclenil jako zvukov´ y filtr. Jak jsem jiˇz popsal v kapitole Pˇrehr´ avaˇc VLC (3), existuje v´ıce druh˚ u zvukov´ ych filtr˚ u. Z vlastnost´ı metody PSOLA vypl´ yv´ a, ˇze mˇen´ı poˇcet vzork˚ u a t´ım upravuje d´elku (rychlost) sign´alu. Prov´ ad´ı vlastnˇe pˇrevzorkov´ an´ı (resampling). Zvukov´ ych filtr˚ u typu resampler je ve VLC implementov´ano nˇekolik. Liˇs´ı se v´ ypoˇcetn´ımi n´aroky a hlavnˇe kvalitou. J´ a jsem pˇri zaˇclenˇen´ı metody PSOLA pouˇzil jako z´aklad resampler s oznaˇcen´ım trivial.
5.1
Hlaviˇ cka modulu
V hlaviˇcce modulu bylo nutn´e dodefinovat konfiguraˇcn´ı hodnoty. Textov´a hodnota psola_method urˇcuje algoritmus pouˇzit´ y pro detekci z´akladn´ıho t´onu. V diplomov´e pr´aci Ing. Kov´aˇr´ıka jsou pro tento u ´ˇcel implementov´ any tˇri r˚ uzn´e algoritmy. • Fixed Pitch Tracker Tento algoritmus neprov´ad´ı ˇz´adnou anal´ yzu. Pitch marky rozm´ıst´ı v urˇcen´ ych rozestupech. Degraduje metodu PSOLA na obdobu metody OLA. • Harmonic Product Spectrum Jde o implementaci algoritmu HPS. Ing. Kov´aˇr´ık tuto metodu rozˇs´ıˇril o pˇreklenut´ı neznˇel´ ych ˇc´ast´ı sign´alu pomoc´ı dynamick´eho programov´ an´ı a interpolace. Tento postup je podobn´ y jako u algoritmu HNM. • Harmonic and Noise Model Tento vysoce pˇresn´ y a tak´e v´ ypoˇcetnˇe n´aroˇcn´ y algoritmus vyuˇz´ıv´ a postupy detekce popsan´e v sekci 4.1.3. Pro zjednoduˇsen´ı v´ ybˇeru algoritmu jsem se rozhodl pouˇz´ıt seznam s v´ ybˇerem tˇechto tˇr´ı algoritm˚ u. Dalˇs´ı konfiguraˇcn´ı hodnotou je zapnut´ı fon´emov´eho detektoru. Tuto moˇznost jsem bohuˇzel musel zneplatnit z d˚ uvod˚ u popsan´ ych d´ale. Toto zaˇskrt´avac´ı pol´ıˇcko tedy uˇz nem´a smysl, ale rozhodl jsem se ho ponechat pro moˇzn´e budouc´ı zprovoznˇen´ı. N´asleduje nˇekolik ˇc´ıseln´ ych hodnot pro urˇcen´ı parametr˚ u filtru. Prvn´ı z nich je d´elka jedn´e d´ avky sign´ alu v milisekund´ ach. Urˇcuje jak velk´e ˇcasov´e u ´seky sign´alu se budou zpracov´avat najednou. Dalˇs´ı z konfiguraˇcn´ıch hodnot jsou minim´aln´ı a maxim´aln´ı frekvence hledan´eho z´ akladn´ıho t´ onu. Posledn´ı hodnotou je frekvence z´akladn´ıho t´onu pro Fixed Pitch Tracker. Na obr´ azku 5.1 je zobrazeno dialogov´e okno s nastaven´ım modulu PSOLA.
21
Obr´ azek 5.1: Nastaven´ı modulu PSOLA
D´ale jsem musel upravit definici schopnost´ı modulu. Kategorie modulu z˚ ustala podle vzorov´eho modulu nastavena na audio filter, prioritu jsem upravil na 50. Modul PSOLA se proto vˇzdy pouˇzije jako v´ ychoz´ı.
5.2
Konstruktor a destruktor
Pro zaveden´ı modulu slouˇz´ı funkce Open( vlc_object_t *p_this ). Na zaˇc´atku zkontroluje, zda jsou splnˇeny vˇsechny podm´ınky pro zaveden´ı. Vstupn´ı poˇcet vzork˚ u se mus´ı odliˇsovat od v´ ystupn´ıho, mus´ı b´ yt shodn´ y poˇcet vstupn´ıch a v´ ystupn´ıch kan´al˚ u a form´ at vzork˚ u mus´ı odpov´ıdat form´ atu VLC_FOURCC(’f’,’l’,’3’,’2’) coˇz je 32 bitov´e desetinn´e ˇc´ıslo s plovouc´ı ˇr´ adovou ˇc´ arkou (typ float). Pokud nejsou vˇsechny podm´ınky splnˇeny, zav´adˇen´ı modul˚ u konˇc´ı. N´asleduje alokace struktury pro uloˇzen´ı lok´aln´ıch promˇenn´ ych modulu. Souˇc´asti tˇechto lok´aln´ıch promˇenn´ ych jsou n´ asleduj´ıc´ı: • Vstupn´ı a v´ ystupn´ı buffery metody PSOLA. Velikost tˇechto buffer˚ u jsem zvolil pro uloˇzen´ı pˇeti sekund zvukov´eho sign´alu. Tato velikost je v´ıce neˇz dostaˇcuj´ıc´ı. Vyuˇz´ıv´ a se velikost odpov´ıdaj´ıc´ı d´elce jedn´e d´avky zpracov´avan´eho sign´alu. Poˇcet vstupn´ıch a v´ ystupn´ıch buffer˚ u je z´ avisl´ y na poˇctu zvukov´ ych kan´al˚ u. Pro kaˇzd´ y kan´al je vytvoˇren jeden vstupn´ı a jeden v´ ystupn´ı buffer. • Instance objektu psola z diplomov´e pr´ace Ing. Kov´aˇr´ıka. Tento objekt zprostˇredkov´ av´ a v´ ypoˇcet metody PSOLA.
22
• Identifik´ ator zvolen´e metody detekce z´akladn´ıho t´onu. Tento identifik´ator je implementov´ an jako v´ yˇctov´ y typ. Pˇri zav´adˇen´ı modulu se rozpozn´a konfiguraˇcn´ı hodnota se zvolenou metodou a nastav´ı se patˇriˇcn´a hodnota. • Minim´ aln´ı frekvence z´ akladn´ıho t´onu. • Maxim´ aln´ı frekvence z´ akladn´ıho t´onu. • Frekvence z´ akladn´ıho t´ onu metody OLA. ˇ • Casov´ a znaˇcka zaˇc´ atku dat uloˇzen´ ych na vstupn´ım bufferu metody PSOLA. Posledn´ı ˇc´ ast´ı zav´ adˇen´ı modulu je nastaven´ı ukazatele na v´ ykonnou funkci a nastaven´ı hodnoty p_filter->b_in_place. Tuto hodnotu jsem nastavil na true. Toto nastaven´ı zamezuje alokaci v´ ystupn´ıho bufferu modulu. Vstupn´ı i v´ ystupn´ı buffer je potom jednotn´ y. Ve sv´em modulu vˇsechna vstupn´ı okamˇzitˇe kop´ıruji do vstupn´ıho bufferu metody PSOLA. Proto je moˇzn´e je n´ asladnˇe pˇrepsat daty v´ ystupn´ımi. Funkce Close( vlc_object_t *p_this ) se star´a o uvolnˇen´ı vˇsech alokovan´ ych prostˇredk˚ u a zruˇsen´ı instance objektu psola.
5.3
V´ ykonn´ a funkce
Na zaˇc´ atku je vypoˇcten koeficient zmˇeny rychlosti. Pokud se tento koeficient rovn´a jedn´e, nen´ı potˇreba mˇenit rychlost. Pˇr´ıznak konzistence vstupn´ıch dat je nastaven na hodnotu false a prov´ adˇen´ı funkce je ukonˇceno. V opaˇcn´em pˇr´ıpadˇe je provedena kontrola pˇr´ıznaku konzistence. Pokud je zaznamen´ana nekonzistence, jsou smaz´ any vstupn´ı i v´ ystupn´ı buffery metody PSOLA. Tato moˇznost nastane napˇr´ıklad pokud uˇzivatel zmˇen´ı poˇzadovanou rychlost pˇrehr´av´an´ı, nebo se pˇresune na jin´e m´ısto v pˇrehr´ avan´em m´ediu. N´aslednˇe jsou vstupn´ı data pˇrevedena do form´atu, kde jsou jednotliv´e zvukov´e kan´ aly oddˇeleny a tato data jsou uloˇzena do vstupn´ıch buffer˚ u metody PSOLA. Pokud jsou pˇred vloˇzen´ım tyto vstupn´ı buffery pr´azdn´e, je ˇcasov´a znaˇcka zaˇc´atku vstupn´ıch dat uloˇzena. Tato informace je pozdˇeji pouˇzita pro synchronizaci. Pokud je na vstupn´ıch bufferech dostaˇcuj´ıc´ı poˇcet dat ke spuˇstˇen´ı d´avky, dojde k v´ ypoˇctu metody PSOLA pro vˇsechny kan´ aly. Postup v´ ypoˇctu je n´asleduj´ıc´ı: • Poˇzadovan´ y poˇcet dat je vyjmut ze vstupn´ıho bufferu a pˇred´an instanci objektu psola. • Na tomto m´ıstˇe by mˇelo n´ asledovat vol´an´ı detektoru fon´em˚ u. • V z´ avislosti na identifik´ atoru zvolen´eho algoritmu pro detekci z´akladn´ıho t´onu je zavol´ ana metoda analyzeSignal, kter´e je jako parametr pˇred´ana reference na pˇr´ısluˇsnou instanci detektoru z´ akladn´ıho t´onu. • N´ asleduje vol´ an´ı metody synthesizeSignal, kter´a provede vlastn´ı v´ ypoˇcet metody PSOLA. • Pomoc´ı metody get_syntSigLength je z´ısk´an poˇcet v´ ystupn´ıch vzork˚ u. • V´ ystupn´ı data jsou uloˇzena pˇrid´ana do v´ ystupn´ıho bufferu.
23
Po proveden´ı v´ ypoˇctu metody PSOLA je podle poˇctu v´ ystupn´ıch vzork˚ u vypoˇcten skuteˇcn´ y koeficient zmˇeny rychlosti. Z tohoto koeficientu je vypoˇctena vzorkovac´ı frekvence v´ ystupn´ıho sign´ alu. Vypoˇcten´ a frakvence je pouˇzita k inicializaci vnitˇrn´ı synchronizaˇcn´ı funkce VLC. D´ ale je podle koeficientu zmˇeny rychlosti vypoˇcten poˇcet v´ ystupn´ıch vzork˚ u modulu. Pokud je na v´ ystupn´ıch bufferech dostateˇcn´ y poˇcet dat pro v´ ystup, jsou v´ ystupn´ı data pˇrevedena do spr´ avn´eho form´ atu a uloˇzena na v´ ystupn´ı buffer. Synchronizaˇcn´ı funkce poskytne potˇrebn´e ˇcasov´e znaˇcky pro spr´avn´e urˇcen´ı zaˇc´atku a konce v´ ystupu. V opaˇcn´em pˇr´ıpadˇe je v´ ystupn´ı buffer modulu zneplatnˇen t´ım, ˇze se jeho velikost nastav´ı na nulu.
5.4
Fon´ emov´ y detektor
Pˇri pokusu o zaˇclenˇen´ı fon´emov´eho detektoru do VLC jsem narazil na chybu, kter´a znemoˇzn ˇovala jeho pouˇzit´ı. Z nezn´ am´ ych d˚ uvod˚ u fon´emov´ y detektor pˇri inicializaci hl´as´ı chybu poruˇsen´eho souboru s v´ ahov´ ymi koeficienty. Tento soubor je ovˇsem naprosto v poˇr´adku a pˇri pouˇzit´ı fon´emov´eho detektoru mimo VLC je naˇcten korektnˇe. R˚ uzn´ ymi pokusy o odhalen´ı a opravu chyby jsem se zab´ yval pomˇernˇe dlouhou dobu, bohuˇzel bez jak´ehokoliv v´ ysledku. V praxi by detekce fon´em˚ u pro kaˇzd´e pˇrehr´an´ı pˇredn´aˇsky nepˇripadala v u ´vahu, protoˇze je to velmi zdlouhav´ a metoda. Detekce fon´em˚ u by se provedla pouze jednou a v´ ystup t´eto detekce by se uloˇzil. Studenti by si potom se z´aznamem pˇredn´aˇsek st´ahli i soubor obsahuj´ıc´ı detekoven´e fon´emy. Tento soubor by se spoleˇcnˇe se z´aznamam pˇredn´aˇsky naˇcetl do pˇrehr´avaˇce. Podobnou metodu jsem pouˇzil pˇri testov´an´ı. Pomoc´ı doprovodn´eho programu k diplomov´e pr´ aci Ing. Kov´ aˇr´ıka jsem z´ıskal posloupnost fon´em˚ u. Tuto posloupnost jsem posl´eze zadal metodˇe PSOLA.
5.5
Uˇ zivatelsk´ e rozhran´ı
Ve sv´em z´ akladu umoˇzn ˇuje VLC mˇenit rychlost po pomˇernˇe velk´ ych kroc´ıch. Proto jsem do uˇzivatelsk´eho rozhran´ı wxWidgets pˇridal moˇznost mˇenit rychlost po mnohem menˇs´ıch kroc´ıch. Tato moˇznost je souˇc´ ast´ı rozˇs´ıˇren´eho rozhran´ı, kter´e je tˇreba povolit v menu Settings->Extended GUI. Na obr´azku 5.2 je toto rozhran´ı zn´azornˇeno.
24
Obr´ azek 5.2: Rozˇs´ıˇren´e rozhran´ı s moˇznost´ı zmˇeny rychlosti pˇrehr´av´an´ı
25
Kapitola 6
Testy K testov´ an´ı v´ ysledn´e aplikace jsem pˇrizval nˇekolik zn´am´ ych. Zkouˇseli jsme pˇrehr´avat r˚ uzn´e filmy, zvukov´e soubory a streamy. Zkoumali jsme kvalitu v´ ystupu, pˇresnost synchronizace a vyt´ıˇzen´ı syst´emu.
6.1
Kvalita v´ ystupu
Pˇri pouˇzit´ı Fixed Pitch Trackeru (degradace na metodu OLA) byl v´ ystup pomˇernˇe zkreslen´ y. Zvuk znˇel nepˇrirozenˇe, dalo by se ˇr´ıci ˇze kovovˇe. Srozumitelnost v´ ystupu vˇsak byla mnohem lepˇs´ı, neˇz pˇri pouˇzit´ı klasick´ ych resampler˚ u. Aˇz na mal´e odchylky byl zachov´ an z´akladn´ı t´ on ˇreˇci a proto bylo moˇzn´e jednotliv´e mluvˇc´ı velmi dobˇre rozeznat. Pouˇzit´ı ostatn´ıch dvou metod detekce z´akladn´ıho t´onu je dosti v´ ypoˇcetnˇe n´aroˇcn´e. U metody HPS jsme pˇri pˇrehr´ av´an´ı zvukov´eho souboru s malou vzorkovac´ı frekvenc´ı a jedn´ım zvukov´ ym kan´ alem dos´ ahli t´emˇeˇr plynul´eho v´ ystupu. Museli jsme ale zmenˇsit velikost d´ avek zpracov´ avan´eho sign´alu na desetinu v´ ychoz´ıho nastaven´ı, neboli na 40ms. To mˇelo za n´ asledek obˇcasn´e ruˇsiv´e artefakty ve v´ ystupu. Oz´ yvalo se prask´an´ı a obˇcasn´ y ˇsum na pozad´ı. Kvalita v´ ystupu byla vˇetˇs´ı neˇz u pˇredchoz´ı metody, ale za cenu vysok´ ych n´arok˚ u na syst´em. Metodu HNM nen´ı moˇzn´e pro pˇrehr´av´an´ı pouˇz´ıt v˚ ubec. Pˇri testov´ an´ı jsem tak´e narazil na nepˇr´ıjemn´ y probl´em. Aktu´aln´ı verze VLC ve spojen´ı s m´ ym syst´emem nedok´ aˇze korektnˇe pˇrehr´avat z´aznamy z pˇredn´aˇsek. Obraz je v poˇr´adku, ale zvuk je t´emˇeˇr neposlouchateln´ y. M´ısto v´ ykladu pˇredn´aˇsej´ıc´ıho se oz´ yv´a pouze jak´esi bzuˇcen´ı.
6.2
Pˇ resnost synchronizace
U vˇetˇsiny testovan´ ych film˚ u bylo po zrychlen´ı synchronizov´ano dobˇre. Ke zpoˇzdˇen´ı doch´azelo u vide´ı, jejichˇz zvuk m´ a vzorkovac´ı frekvenci 48kHz. Je to zˇrejmˇe zp˚ usobeno t´ım, ˇze pˇri zrychlen´ı vzorkovac´ı frekvence obˇcas pˇres´ahne hranici 48kHz, kter´a je ve VLC maxim´aln´ı. ˇ sen´ım by bylo podvzorkovat tento VLC potom takov´ y u ´sek zvuku pˇrehraje pomaleji. Reˇ sign´al na niˇzˇs´ı vzorkovac´ı frekvenci.
6.3
Vyt´ıˇ zen´ı syst´ emu
V tabulce 6.1 uv´ ad´ım pr˚ umˇern´e vyt´ıˇzen´ı procesoru pˇri pˇrehr´av´an´ı r˚ uzn´ ych druh˚ u m´edi´ı. Pˇri pokusech s videem byl obraz vˇzdy plynul´ y. Jedinou v´ yjimkou byl form´at WMV u kter´eho 26
obraz vˇri vyˇsˇs´ım vyt´ıˇzen´ı procesoru zamrzal. VLC kv˚ uli synchronizaci vynech´av´a zpoˇzdˇen´e zvukov´e r´ amce a proto pˇri pouˇzit´ı sloˇzitˇejˇs´ıch metod detekce z´akladn´ıho t´onu pˇrestal zvuk fungovat. Druh m´ edia MP3 MP3 MP3 MP3 WMV WMV WMV WMV DivX DivX DivX DivX XviD XviD XviD XviD
Metoda detekce z´ akladn´ıho t´ onu ˇ Z´adn´a OLA HPS HNM ˇ adn´a Z´ OLA HPS HNM ˇ adn´a Z´ OLA HPS HNM ˇ adn´a Z´ OLA HPS HNM
Pr˚ umˇ ern´ a z´ atˇ eˇ z 3% 8% 87% 90% 19% 33% 60% 89% 11% 16% 73% 87% 9% 17% 78% 82%
Tabulka 6.1: Vyt´ıˇzen´ı procesoru pˇri pˇrehr´av´an´ı
27
Kapitola 7
Z´ avˇ er V t´eto bakal´ aˇrsk´e pr´ aci jsem nav´ azal na diplomovou pr´aci Ing. Kov´aˇr´ıka nazvanou Zmˇena rychlosti ˇreˇci [7]. Pouˇzil jsem j´ım vytvoˇren´ y uk´azkov´ y program jako knihovnu pro zmˇenu rychlosti pˇrehr´ av´ an´ı v pˇrehr´ avaˇci VLC. Toho jsem dos´ahl vytvoˇren´ım nov´eho modulu kategorie resampler. M´e ˇreˇsen´ı pracuje celkem spolehlivˇe. Z d˚ uvodu vysok´ ych v´ ypoˇcetn´ıch n´arok˚ u vˇsak sloˇzitˇejˇs´ı metody detekce z´akladn´ıho t´onu (HPS a HNM) zp˚ usobuj´ı zpoˇzdˇen´ı zvuku. Zpoˇzdˇen´ y zvuk nen´ı kv˚ uli synchronizaci pˇrehr´avaˇcem obˇcas pˇrehr´an. Proto se vyskytuj´ı ˇcast´e mezery, nebo zvuk nefunguje v˚ ubec. Pouˇzit´ı metody psola jako resampleru zˇrejmˇe nen´ı nejide´alnˇejˇs´ı ˇreˇsen´ı. Ide´aln´ı by zˇrejmˇe bylo zapojit tuto metodu jako souˇc´ast dekod´eru zvuku. To by ovˇsem znamenalo upravit vˇsechny dekod´ery pro pouˇzit´ı t´eto metody. V´ yhodou zakomponov´an´ı metody PSOLA pˇr´ımo do dekod´er˚ u by byla moˇznost pouˇzit´ı kvalitnˇejˇs´ıch metod detekce z´akladn´ıho t´onu bez vlivu na koneˇcnou plynulost pˇrehr´ av´ an´ı. Veˇsker´a potˇrebn´a anal´ yza by se provedla na zaˇc´atku pˇrehr´av´ an´ı. To by sice znamenalo prodlevu pˇred zaˇc´atkem pˇrehr´av´an´ı, ale dos´ahlo by se kvalitnˇejˇs´ıho v´ ystupu. Jako dalˇs´ı rozˇs´ıˇren´ı VLC by bylo moˇzn´e implementovat zpˇetnou vazbu mezi moduly pro zpracov´ an´ı zvuku a moduly pro zpracov´an´ı obrazu. D´ıky detekci zmˇen ve videu by bylo moˇzn´e urˇcit u ´seky ve kter´ ych se nic nedˇeje. Pokud by v t´e chv´ıli nebyl detekov´an ani ˇz´adn´ y zvuk, dal by se cel´ yu ´sek zrychlit nebo pˇreskoˇcit.
28
Literatura [1] VLC diagram. [online]. URL http://clement.stenac.org/projects/videolan/vlc.png [2] Documentation:Hacker’s Guide. [online], 2008. URL http://wiki.videolan.org/Documentation:Hacker%27s_Guide [3] GNU General Public License. [online], 2008. URL http://www.gnu.org/licenses/gpl.html [4] Miro - free, open source internet tv and video player. [online], 2008. URL http://www.getmiro.com/ [5] VLC media player. [online], 2008. URL http://www.videolan.org/vlc/ [6] Dutoid, T.: An Introduction to Text-to-Speech Synthesis. Kluwer academic Publishers, 1997, ISBN 0-7923-4498-7. [7] Kov´ aˇr´ık, A.: Zmˇena rychlosti ˇreˇci. Diplomov´a pr´ace, FIT VUT v Brnˇe, Brno, 2007. [8] Wikipedie: Fon´em. [online]. URL http://cs.wikipedia.org/wiki/Fon%C3%A9m
29
Dodatek A
Obsah CD Na kompaktn´ım disku pˇriloˇzen´em k pr´aci jsou k dispozici vˇsechny mnou upraven´e zdrojov´e k´ody pˇrehr´ avaˇce VLC.
30
Dodatek B
Pˇ reklad VLC Seznam vˇsech potˇrebn´ ych knihoven je uveden na adrese http://wiki.videolan.org/ Contrib_Status. Pro pˇreklad staˇc´ı pouze spustit pˇr´ıkazy ./configure a ./compile. Mnou pouˇz´ıvan´ a konfigurace je n´asleduj´ıc´ı: --prefix=/usr/local --enable-libtool --enable-dvdread --enable-vcdx --enable-faad --enable-real --enable-flac --enable-realrtsp --enable-snapshot --enable-live555 --enable-dv --enable-theora --enable-esd --enable-wxwidgets
31