ffteq
Filip Kastl, II. ročník
zimní semestr 2021/22
Programování v jazyce C# NPRG035
Při upravování zvukových souborů se často hodí pracovat s frekvencemi. Je užitečné z nahrávky odstranit hluboký šum nebo vysoké pískání. K tomu se používají takzvané filtry. Filtry mohou být také užitečné při práci s hudbou pro umělecký efekt. To je důvod, proč toto téma zajímá mě.
Program slouží k upravování 8bit 44,1kHz pcm mono zvukových souborů formátu Wave (.wav). Umí aplikovat low-pass filter (filtruje vysoké frekvence), high-pass filter (filtruje nízké frekvence) a upravit hlasitost souboru. Uživatel si na příkazové řádce navolí, které efekty a v jakém pořadí na soubor aplikovat.
Účelem programu není poměřovat se s již existujícími filtry. Ty jsou vesměs mocnější a uživatelsky přívětivější než tento. Účel programu je vzdělávací. Já si vyzkoušel jednoduché zpracovávání zvuku a snad program bude i v budoucnu užitečný někomu, kdo se bude chtít dozvědět, jak napsat frekvenční filtr.
Program lze spustit na Windows a Linux x86_64 strojích.
Připravte si 8bit 44,1kHz mono Wave soubor. Stáhněte si win-64 release. Otevřete v kořenové složce terminál. Zadejte následující příkaz (pozor! pokud výstupní soubor už existuje, program ho přepíše).
ffteq <vstupní soubor>.wav <výstupní soubor>.wav gain 0
Tímto jste překopírovali vstupní soubor do výstupního.
Postup je stejný jako pro Windows. Jen chcete linux-64 release.
./ffteq <vstupní soubor>.wav <výstupní soubor>.wav gain 0
První dva terminálové argumenty jsou vždy cesta ke vstupnímu souboru a cesta k výstupnímu souboru. Následuje seznam options oddělených mezerami. Každá option odpovídá aplikaci jednoho efektu. Options se mohou v seznamu opakovat. Jsou aplikovány v tom pořadí, v jakém jsou zadány v terminálu.
Každá option má formu <název-option> <parametr1> <parametr2> ...
.
filterlo <hz-from> <hz-to>
<hz-from> a <hz-to> jsou desetinná čísla. Zcela odfiltruje frekvence vyšší než <hz-to>. Aby úprava nebyla tak agresivní, začíná filtrovat už na frekvenci <hz-from> a se zvyšující se frekvencí lineárně snižuje koeficient, kterým násobí vstupní frekvence, až se dostane na nulu v <hz-to>.
ffteq <vstupní soubor>.wav <výstupní soubor>.wav filterlo 2000 2500
Začne filtrovat na 2000hz. Výstupní soubor nebude obsahovat žádné frekvence vyšší než 2500hz.
filterhi <hz-from> <hz-to>
Podobný jako low-pass filter. Zcela odfiltruje frekvence nižší než <hz-from>.
ffteq <vstupní soubor>.wav <výstupní soubor>.wav filterhi 3000 3500
Výstupní soubor nebude obsahovat žádné frekvence nižší než 3000hz. Filter také ovlivní frekvence do 3500hz. Od 3500hz zůstanou frekvence jako ve vstupním souboru.
gain <db>
Zvýší nebo sníží (v případě záporné hodnoty) hlasitost celého souboru o <db> decibelů.
ffteq <vstupní soubor>.wav <výstupní soubor>.wav gain -5 filterlo 2000 2500
Před aplikováním low-pass filtru je snížena hlasitost o 5 decibelů.
Jedním způsobem je použít free open source software Audacity.
- Opatřete si zvukový soubor
- Otevřete ho pomocí Audacity
- Pokud je to stereo soubor, použijte možnost Split Stereo to Mono
- Vyexportujte soubor jako WAV -> Other uncopressed files
- Header: WAV (Microsoft)
- Encoding: Unsigned 8-bit PCM
Další možností je použít některý z předpřipravených souborů ve složce
testfiles
.
Viz soubor docs/programmer.pdf
.
Ve složce testfiles
jsou připravené zvukové soubory, na kterých program může
být ozkoušen. Soubory pocházejí původně z
https://soundbible.com. Jsou zkonvertované na 8bit
mono pcm. Ty s příponami '-lowpass', '-highpass' a '-loud' jsou upravené pomocí
ffteq.