Semestrální práce z předmětu Syntéza audio signálů Téma: Syntéza orchestrálních nástojů ve skladbě Vltava od Bedřicha Smetany a syntéza zvuku mouchy Dominik Šmíd zimní semestr 2016/17
Obsah: 1. Úvod 2. Syntéza jednotlivých nástrojů 3. Syntéza zvuku mouchy 4. Reference 5. Přílohy
1. Úvod: Semestrální práce se zabývá syntézou orchestrálních hudebních nástrojů a metodami syntéz, které se snaží přiblížit reálnému zvuku nástrojů z nahrávky Vltavy zahrané orchestrem. V zadání práce je vytvořit nástroje a poté je pomocí MIDI knihovny použít. Druhý úkol je jednoduchá syntéza stupnice, kde budou všechny nástroje použity. Poslední úkol se nemusí týkat syntézy hudebního nástroje. Experimentoval jsem s FM/PM syntézou a vznikl z toho zvuk mouchy, který mě zaujal. Tato práce používá jako základ mojí předchozí semestrální práci z minulého roku v podobné předmětu [5]. Bylo třeba ještě mnoho nástrojů přidat a některé staré nástroje jsem mírně poupravil nebo vylepšil kód. Přejaté funkce pro syntézu tónu nástrojů jsou u příčná flétna, housle a harfa (struna). Jednotlivé metody použité pro syntézu jsou popsány v druhé kapitole. Je to aditivní syntéza pro tympány, hoboj, fagot (bassoon) a triangl, filtrační syntéza pro housle, tubu, trubku a klarinet, syntéza pomocí fázového vokodéru pro flétnu a fyzikální modelování struny pro harfu a houslové pizzicato. Jako poslední kapitola je popsán algoritmus speciální PM syntézy pro zvuk mouchy.
2. Syntéza jednotlivých nástrojů Každý nástroj je realizován vlastní funkcí (v samostatném souboru), která vždy 3 základní parametry frekvenci (výšku), délku a vzorkovací frekvenci tónu. Některé nástroje obsahují i více nepovinných parametrů pro přesnější nastavení nástroje. Občas bylo třeba upravit amplitudu nástroje obecně vynásobením konstantou, jinak jsou všechny nástroje úrovňově normalizovány uvnitř jejich funkcí k A=1. 2a. Struna (Houslové pizzicato midi46 a Harfa midi47) Pro harfu jsem použil syntézu pomocí fyzikálního modelu struny také převážně založena na kódu ze cvičení. [3] Harfu jsem vytvořil ze 3 strun hraných občas i současně, aby vznikly akordy. Jediná nevýhoda je, že při vyšších frekvencích můžou být tóny dost rozladěny. Způsobuje to zaokrouhlení počtu nul v číslicovém FIR filtru. Zkoušel experimentovat s vytvořením zvuků struny s mnohem větší vzorkovací frekvencí a tak zmenšit možné rozladění tónů a pak snížit vzorkovací frekvenci převzorkováním (funkce resample()), ale to snížilo kvalitu zvuku generovaných strun, tak jsem od toho upustil a jen snížil o 1 oktávu notový zápis pak už jsem rozladění tónů již neslyšel. 2b. Tympány (midi48) Tympány jsou syntetizovány pomocí jednoduché aditivní syntézy s neharmonickými složkami. Na základě analýzy reálného zvuku tympánů je z amplitudového spektra získáno koeficientů důležitých frekvencí. Tyto koeficienty jsou převzaty ze cvičení předmětu SMS a jsou použity pro zpětnou rekonstrukci zvuku a změny výšky tónu. Koeficienty frekvencí jsou vynásobeny základní frekvencí požadovaného tónu. Na konci je signál vynásoben ADSR obálkou i exponenciální obálkou. 2c. Housle (Smyčcový sbor 1&2 midi49&midi50) Pro housle jsem použil filtrační syntézu pomocí banky filtrů [4]. Funkce je převzata z mojí předchozí semestrální práce. [5] Přepsal jsem kód aby byl použitelný jako funkce s třemi parametry (tón, doba a vzorkovací frekvence). Syntéza houslí navíc obsahuje vibráto s obálkou postupného náběhu, tedy frekvence generované pily (aditivní syntéza pily) je rozmítána. Nakonci po aplikování banky filtrů je přidána ADSR obálka.
Ve skladbě jsou použity samostatné housle místo smyčcového sboru 1 a dvoje housle o 70ms posunuty oproti sobě (triviální efekt chorus) jako smyčcový sbor 2. 2d. Tuba (midi59) Pro tubu byla použita filtrační syntéza pomocí banky 4 filtrů. Je téměř shodná jako syntéza trubky (viz níže), jen jsem změnil rezonanční frekvence filtrů, aby zvuk zněl více jako tuba. 2e. Lesní roh [french horn] (midi61) Syntéza lesního rohu byla nahrazena podobným zvukem trubky (viz následující nástroj). Syntéza navíc obsahuje vibráto s obálkou korigovaného postupného náběhu, tedy frekvence generované pily (aditivní syntéza pily) je rozmítána. 2f. Trubka (Žesťový sbor midi62) Pro zjednušenou imitaci žesťového souboru nástrojů bylo použito trubky s primitivním efektem chorusu (k signálu přidán tentýž o 70ms opožděný signál). Aby nedocházelo k rušivým rázům, bylo třeba pro účely žesťového souboru vypnout vibráto trubky nepovinným paramtrem 0 u funkce pro syntézu. Pro trubku jsem použil filtrační syntézu pomocí banky filtrů [4]. Algoritmus jsem použil ze cvičení předmětu SMS. Filtrační syntéza postupně protlačuje trojúhelníkový signál několika filtry pásmové propusti. Nakonci po aplikování banky filtrů je přidána ADSR obálka. 2g. Hoboj (midi69) Hoboj je syntetizován pomocí jednoduché aditivní syntézy s vyššími harmonickými složkami. Na základě analýzy reálného zvuku hoboje je z amplitudového spektra získáno koeficientů 8 nejsilnějších frekvencí. Tyto koeficienty jsou použity pro zpětnou rekonstrukci zvuku a změnu výšky tónu. Koeficienty frekvencí jsou vynásobeny základní frekvencí požadovaného tónu. Na konci je signál vynásoben ADSR obálkou (dvě verze pro různě dlouhé tóny). 2h. Fagot [bassoon] (midi71) Fagot je syntetizován pomocí jednoduché aditivní syntézy s vyššími harmonickými složkami. Na základě analýzy reálného zvuku fagotu je z amplitudového spektra získáno koeficientů 22 nejsilnějších frekvencí. Tyto koeficienty jsou použity pro zpětnou rekonstrukci zvuku a změnu výšky tónu.
Koeficienty frekvencí jsou vynásobeny základní frekvencí požadovaného tónu. Na konci je signál vynásoben ADSR obálkou (dvě verze pro různě dlouhé tóny). 2i. Klarinet (midi72) Pro trubku jsem použil filtrační syntézu jedním filtrem. Algoritmus jsem použil ze cvičení předmětu SMS. Filtrační syntéza je jednoduché tvarování spektra obdélníkového signálu. Syntéza klarinetu navíc obsahuje malé vibráto s obálkou postupného náběhu. Nakonci po aplikování banky filtrů je přidána ADSR obálka. 2j. Příčná flétna (midi74) Pro flétnu byla použita syntéza pomocí fázového vokodéru, který mění výšku tónu vzorku flétny načteného z flute_e4_48khz_sample.mat aniž by měnil dobu trvání. Funkce pro generování je převzata z mé předchozí semestrální práce [5]. Algoritmus obsahuje rozložení do bloků, každý se převede do frekvenční oblasti a pak se interpoluje nebo decimuje počet těchto bloků, následně se převedou zpět do časové oblasti a složí za sebe. S fází je třeba pracovat odděleně. Výsledný tón má stejnou výšku, ale je prodloužen nebo zkrácen, změnu délky transformuje na změnu výšky převzorkováním na původní počet vzorků. [2] Na konci stejně jako u ostatních nástrojů je normalizace hlasitosti nástroje k úrovni 1 najdu správného dělitele max(abs(out)), kde out je výstupní tón nástroje. Článek soundonsound.com/sos/oct03/articles/synthsecrets.htm se zabírá syntézou flétny do hloubky. Také další článek m.reddit.com/r/synthrecipes/comments/36f8mt/flute_synthesis mluví obecně jak na syntézu flétny a jak ji vylepšovat. Článek ze kterého jsem hlavně čerpal teorii pro analýzu nástroje je uveden v referencích [1]. 2k. Tringl (Crash Cymbal 1 ch10- midi49) V General MIDI sice kanál 10, číslo 49 znamená činel na bicí soupravě, v podání živého orchestru jsem však usoudil, že to má být triangl. Triangl je tedy syntetizován pomocí jednoduché aditivní syntézy s neharmonickými složkami. Na základě analýzy reálného zvuku trianglu je z amplitudového spektra získáno koeficientů důležitých frekvencí. Tyto koeficienty jsou použity pro zpětnou rekonstrukci zvuku. U tohoto nástroje se
nemění výška tónu. Na konci je signál vynásoben ADSR obálkou i exponenciální obálkou. 3. Syntéza zvuku mouchy Algoritmus je naprogramován ve skriptu SYN_projekt3_smiddomi2.m. Je zde speciální PM syntéza (fázová modulace) modulovaný trojúhelníkový signál (pila s maximem v desetině periody - 10%) je fázově modulován speciálním náhodným signálem. Modulační signál se skládá z dvou náhodně generovaných hladkých průběhů. Oba hladké náhodné signály vznikají generováním náhodných vzorků a následně jejich interpolace vznikne náhodně zvlněný signál. Tyto náhodně zvlněné signály mají různou pseudo- periodu vlnění (podle poměru interpolace se vlní různě rychle). Toto je znázorněno pomocí grafu vykreslených ke konci sktriptu. Fázově modulovaný signál je poté ještě filtrován pásmovou propustí 2-18kHz, aby více připomínal reálný zvuk mouchy.
4. Reference [1] SOS Gordon Reid: Synth Secrets, Part 24: Synthesizing Wind Instruments [online] 2001 [cit. 2015-12- 27]. Dostupné z: http://www.soundonsound.com/sos/apr01/articles/synthsecrets.asp [2] ČMEJLA Roman, přednáška SMS č.4 Fázový vokoder [3] ČMEJLA Roman, přednáška SMS č.12 Fyzikální modelování [4] ČMEJLA Roman, přednáška SMS č.6 Filtrační syntéza (pomocí banky filtrů) [5] ŠMÍD Dominik, Semestrální práce z předmětu Syntéza multimediálních signálů 2015
5. Přílohy main.m hlavní kód pro (bod 1) syntézu skladby (volá MIDI knihovnu, aby syntetizovala tóny skladby) a syntézu stupnice (bod 2) synth.m funkce, kde se vybírá, který nástroj bude hrát a volá jednotlivé funkce MIDI toolbox externí knihovna (ke stažení pro účely soutěže) fletna.m, housle.m, struna.m, bassoon.m, trubka.m, hoboj.m, klarinet.m, triangl.m, timpani.m, tuba.m funkce pro syntézu jednotlivých nástrojů ktof.m funkce, která převede výšku tónu (v půltónech) na odpovídající frekvenci (pro generování stupnice) adsr.m funkce zajišťující některé ADSR obálky pro funkce nástrojů SYN_projekt3_smiddomi2.m - skript pro spuštění syntézy mouchy (3. úkol zadání) Vltava.mid použitý vstupní soubor MIDI pro 1. bod zadání Vltava.wav Výsledný zvuk 1. bod zadání 2_stupnice.wav Výsledný zvuk 2. bod zadání 3_fly_sound.wav Výsledný zvuk 3. bod zadání flute_e4_48khz_sample.mat krátký úsek nahrávky příčné flétny hrající tón E4 (fs = 48 khz) pro funkci fletna()