Ukážeme si, jak složit v R jednoduchou relaxační píseň. Nejprve si načteme potřebné knihovny. Pokud nejsou nainstalované, nainstalujeme je pomocí příkazů install.packages(“seewave”) a install.packages(“tuneR”)

library(seewave)
library(tuneR)

Zavedene proměnnou I, která je číselnou reprezentací intervalu jednoho půltónu mezi dvěma oktávami.

I <- 2^(1/12) 

Následně vytvoříme řadu proměnných, které poslouží pro přepočítání “základní” frekvence (kterou určíme dále) na frekvence sousedních půltónů.

STminus14 <- -14
STminus12 <- -12
STminus4 <- -4
STminus3 <- -3
STminus2 <- -2
STminus1 <- -1
ST1 <- 1
ST2 <- 2
ST3 <- 3
ST4 <- 4
ST5 <- 5
ST6 <- 6
ST7 <- 7
ST8 <- 8
ST9 <- 9
ST10 <- 10
ST11 <- 11
ST12 <- 12
ST13 <- 13
ST14 <- 14
ST15 <- 15
ST16 <- 16
ST17 <- 17
ST18 <- 18
ST19 <- 19
ST20 <- 20
ST21 <- 21
ST22 <- 22
ST26 <- 26

Zavedeme proměnnou f, která poslouží jako “základní” frekvence, od které se budou následně přepočítávat sousední tóny (tip: změnou této frekvence můžete celou skladbu snadno transponovat, tj. zvýšit nebo snížit výšku celé skladby).

f <- 110

Zavedeme řadu proměnných, do nichž přepočítáme frekvence požadovaných půtónů. Výpočet provedeme pomocí proměnné f vynásobené proměnnou I, která je umocněna proměnnou reprezentující daný půltón. Nakonec zavedeme proměnnou TKP, která poslouží pro vytvoření zvuku “kopáku”.

Tminus14 <- f*I^STminus14
Tminus12 <- f*I^STminus12
Tminus4 <- f*I^STminus4
Tminus3 <- f*I^STminus3
Tminus2 <- f*I^STminus2
Tminus1 <- f*I^STminus1
T1 <- f
T2 <- f*I^ST1
T3 <- f*I^ST2
T4 <- f*I^ST3
T5 <- f*I^ST4
T6 <- f*I^ST5
T7 <- f*I^ST6
T8 <- f*I^ST7
T9 <- f*I^ST8
T10 <- f*I^ST9
T11 <- f*I^ST10
T12 <- f*I^ST11
T13 <- f*I^ST12
T14 <- f*I^ST13
T15 <- f*I^ST14
T16 <- f*I^ST15
T17 <- f*I^ST16
T18 <- f*I^ST17
T19 <- f*I^ST18
T20 <- f*I^ST19
T21 <- f*I^ST21
T23 <- f*I^ST22
T27 <- f*I^ST26
TKP <- 3000

Poté zavedeme proměnnou fs, která reprezentuje vzorkovací frekvenci výsledného zvuku. Dále proměnnou trvani, která poslouží pro určení délky vytvářených tónů, a proměnnou amplituda, která bude určovat zesílení vytvořeného zvuku. Také můžeme zavést proměnnou faze, která určuje posun vytvořené sinusovky, ovšem v tomto příkladu je posun nulový.

fs <- 44100
trvani <- 0.5
amplituda <- 0.8
faze <- 0

Pomocí funkce seq vytvoříme číselné řady, která dále použijeme pro určení trvání vytvářených zvuků (proměnné t, t2, t3). Nejprve je ovšem třeba určit jeden časový krok. Ten získáme tak, že vydělíme jednu vteřinu vzorkovací frekvencí a výsledek zapíšeme do proměnné Ts.

Ts <- 1 / fs
t <- seq(0, trvani - Ts, by = Ts)
t2 <- seq(0, trvani*2 - Ts, by = Ts)
t3 <- seq(0, 0.5 - Ts, by = Ts)

Připravíme si tzv. okno, které poslouží k vyhlazení krajních částí amplitudy. Bez tohoto vyhlazení by u postupně se zesilujících zvuků zůstalo nepříjemné lupnutí způsobené náhlým skokem zvukové vlny z vysoké amplitudy na nulu.

delkaOkenko <- 400
okenko <- ftwindow(delkaOkenko)
okno1 <- c(okenko[1:(delkaOkenko/2)], rep(1, length(t)-delkaOkenko), okenko[(delkaOkenko/2+1) : delkaOkenko])

Pomocí exponenciální funkce vytvoříme několik proměnných, které budou složit k modulaci amplitudy vytvářených zvuků. E, E2 a E3 poslouží k modulaci amplitudy tónů (exponenciála se záporným členem umožní postupné zeslabování, s kladným členem naopak postupné zesilování. EVB a EHH poslouží k modulaci amplitudy zvuků “bících nástrojů”. Exponenciála pod proměnnou EKP poslouží k vytvoření zvuku kopáku.

E <- exp (-5*t2)
E2 <- exp (-5*t)
E3 <- exp (2*t2*okno1-2)
EVB <- exp (-7*t2)
EKP <- exp (-100*t2)
EHH <- exp (-100*t3)

Vytvoříme trojice sinusovek, které vždy reprezentují základní tón (s označením H1 na konci názvu proměnné) spolu s dvěma vyššími harmonickými frekvencemi (s označením H2 a H3). Následující trojice sinusek jsou si velmi podobné - měníme pouze člen určující frekvenci sinusovky a v jednom případě změníme člen, který násobí amplitudu a určuje jak rychle bude docházet k jejímu poklesu. Změnou členu E na E2 docílíme toho, že amplituda klesne na nulu v půlce zvuku v jeho trvání v čase, načež se tento kratší zvuk vytvoří ještě jednou - tímto získáme namísto primárního čtvrtinového tónu tón osminový. Vynásobení amplitudy proměnnou E3 docílíme postupného zesilování daného zvuku.

Tong2_H1 <- E*1*amplituda * sin(2*pi*Tminus14*t + faze)
Tong2_H2 <- E*0.5*amplituda * sin(2*pi*Tminus14*2*t + faze)
Tong2_H3 <- E*0.5*amplituda * sin(2*pi*Tminus14*3*t + faze)
Tona_H1 <- E*1*amplituda * sin(2*pi*Tminus12*t + faze)
Tona_H2 <- E*0.5*amplituda * sin(2*pi*Tminus12*2*t + faze)
Tona_H3 <- E*0.5*amplituda * sin(2*pi*Tminus12*3*t + faze)
Tonf_H1 <- E*1*amplituda * sin(2*pi*Tminus4*t + faze)
Tonf_H2 <- E*0.5*amplituda * sin(2*pi*Tminus4*2*t + faze)
Tonf_H3 <- E*0.5*amplituda * sin(2*pi*Tminus4*3*t + faze)
Tonfis_H1 <- E*1*amplituda * sin(2*pi*Tminus3*t + faze)
Tonfis_H2 <- E*0.5*amplituda * sin(2*pi*Tminus3*2*t + faze)
Tonfis_H3 <- E*0.5*amplituda * sin(2*pi*Tminus3*3*t + faze)
Tong_H1 <- E*1*amplituda * sin(2*pi*Tminus2*t + faze)
Tong_H2 <- E*0.5*amplituda * sin(2*pi*Tminus2*2*t + faze)
Tong_H3 <- E*0.5*amplituda * sin(2*pi*Tminus2*3*t + faze)
Tongis_H1 <- E*1*amplituda * sin(2*pi*Tminus1*t + faze)
Tongis_H2 <- E*0.5*amplituda * sin(2*pi*Tminus1*2*t + faze)
Tongis_H3 <- E*0.5*amplituda * sin(2*pi*Tminus1*3*t + faze)
TonA_H1 <- E*1*amplituda * sin(2*pi*T1*t + faze)
TonA_H2 <- E*0.5*amplituda * sin(2*pi*T1*2*t + faze)
TonA_H3 <- E*0.5*amplituda * sin(2*pi*T1*3*t + faze)
TonA_H1_E3 <- E3*1*amplituda * sin(2*pi*T1*t + faze)
TonA_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T1*2*t + faze)
TonA_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T1*3*t + faze)
TonB_H1 <- E*1*amplituda * sin(2*pi*T2*t + faze)
TonB_H2 <- E*0.5*amplituda * sin(2*pi*T2*2*t + faze)
TonB_H3 <- E*0.5*amplituda * sin(2*pi*T2*3*t + faze)
TonH_H1 <- E*1*amplituda * sin(2*pi*T3*t + faze)
TonH_H2 <- E*0.5*amplituda * sin(2*pi*T3*2*t + faze)
TonH_H3 <- E*0.5*amplituda * sin(2*pi*T3*3*t + faze)
TonC_H1 <- E*1*amplituda * sin(2*pi*T4*t + faze)
TonC_H2 <- E*0.5*amplituda * sin(2*pi*T4*2*t + faze)
TonC_H3 <- E*0.5*amplituda * sin(2*pi*T4*3*t + faze)
TonCis_H1 <- E*1*amplituda * sin(2*pi*T5*t + faze)
TonCis_H2 <- E*0.5*amplituda * sin(2*pi*T5*2*t + faze)
TonCis_H3 <- E*0.5*amplituda * sin(2*pi*T5*3*t + faze)
TonD_H1 <- E*1*amplituda * sin(2*pi*T6*t + faze)
TonD_H2 <- E*0.5*amplituda * sin(2*pi*T6*2*t + faze)
TonD_H3 <- E*0.5*amplituda * sin(2*pi*T6*3*t + faze)
TonDis_H1 <- E*1*amplituda * sin(2*pi*T7*t + faze)
TonDis_H2 <- E*0.5*amplituda * sin(2*pi*T7*2*t + faze)
TonDis_H3 <- E*0.5*amplituda * sin(2*pi*T7*3*t + faze)
TonE_H1 <- E*1*amplituda * sin(2*pi*T8*t + faze)
TonE_H2 <- E*0.5*amplituda * sin(2*pi*T8*2*t + faze)
TonE_H3 <- E*0.5*amplituda * sin(2*pi*T8*3*t + faze)
TonF_H1 <- E*1*amplituda * sin(2*pi*T9*t + faze)
TonF_H2 <- E*0.5*amplituda * sin(2*pi*T9*2*t + faze)
TonF_H3 <- E*0.5*amplituda * sin(2*pi*T9*3*t + faze)
TonFis_H1 <- E*1*amplituda * sin(2*pi*T10*t + faze)
TonFis_H2 <- E*0.5*amplituda * sin(2*pi*T10*2*t + faze)
TonFis_H3 <- E*0.5*amplituda * sin(2*pi*T10*3*t + faze)
TonG_H1 <- E*1*amplituda * sin(2*pi*T11*t + faze)
TonG_H2 <- E*0.5*amplituda * sin(2*pi*T11*2*t + faze)
TonG_H3 <- E*0.5*amplituda * sin(2*pi*T11*3*t + faze)
TonGis_H1 <- E*1*amplituda * sin(2*pi*T12*t + faze)
TonGis_H2 <- E*0.5*amplituda * sin(2*pi*T12*2*t + faze)
TonGis_H3 <- E*0.5*amplituda * sin(2*pi*T12*3*t + faze)
TonA2_H1 <- E2*1*amplituda * sin(2*pi*T13*t + faze)
TonA2_H2 <- E2*0.5*amplituda * sin(2*pi*T13*2*t + faze)
TonA2_H3 <- E2*0.5*amplituda * sin(2*pi*T13*3*t + faze)
TonA2_H1_E3 <- E3*1*amplituda * sin(2*pi*T13*t + faze)
TonA2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T13*2*t + faze)
TonA2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T13*3*t + faze)
TonB2_H1 <- E*1*amplituda * sin(2*pi*T14*t + faze)
TonB2_H2 <- E*0.5*amplituda * sin(2*pi*T14*2*t + faze)
TonB2_H3 <- E*0.5*amplituda * sin(2*pi*T14*3*t + faze)
TonH2_H1 <- E*1*amplituda * sin(2*pi*T15*t + faze)
TonH2_H2 <- E*0.5*amplituda * sin(2*pi*T15*2*t + faze)
TonH2_H3 <- E*0.5*amplituda * sin(2*pi*T15*3*t + faze)
TonH2_H1_E3 <- E3*1*amplituda * sin(2*pi*T15*t + faze)
TonH2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T15*2*t + faze)
TonH2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T15*3*t + faze)
TonC2_H1 <- E*1*amplituda * sin(2*pi*T16*t + faze)
TonC2_H2 <- E*0.5*amplituda * sin(2*pi*T16*2*t + faze)
TonC2_H3 <- E*0.5*amplituda * sin(2*pi*T16*3*t + faze)
TonC2_H1_E3 <- E3*1*amplituda * sin(2*pi*T16*t + faze)
TonC2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T16*2*t + faze)
TonC2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T16*3*t + faze)
TonCis2_H1 <- E*1*amplituda * sin(2*pi*T17*t + faze)
TonCis2_H2 <- E*0.5*amplituda * sin(2*pi*T17*2*t + faze)
TonCis2_H3 <- E*0.5*amplituda * sin(2*pi*T17*3*t + faze)
TonD2_H1 <- E*1*amplituda * sin(2*pi*T18*t + faze)
TonD2_H2 <- E*0.5*amplituda * sin(2*pi*T18*2*t + faze)
TonD2_H3 <- E*0.5*amplituda * sin(2*pi*T18*3*t + faze)
TonD2_H1_E3 <- E3*1*amplituda * sin(2*pi*T18*t + faze)
TonD2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T18*2*t + faze)
TonD2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T18*3*t + faze)
TonDis2_H1 <- E*1*amplituda * sin(2*pi*T19*t + faze)
TonDis2_H2 <- E*0.5*amplituda * sin(2*pi*T19*2*t + faze)
TonDis2_H3 <- E*0.5*amplituda * sin(2*pi*T19*3*t + faze)
TonE2_H1 <- E*1*amplituda * sin(2*pi*T20*t + faze)
TonE2_H2 <- E*0.5*amplituda * sin(2*pi*T20*2*t + faze)
TonE2_H3 <- E*0.5*amplituda * sin(2*pi*T20*3*t + faze)
TonE2_H1_E3 <- E3*1*amplituda * sin(2*pi*T20*t + faze)
TonE2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T20*2*t + faze)
TonE2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T20*3*t + faze)
TonF2_H1_E3 <- E3*1*amplituda * sin(2*pi*T21*t + faze)
TonF2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T21*2*t + faze)
TonF2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T21*3*t + faze)
TonF2_H1 <- E*1*amplituda * sin(2*pi*T21*t + faze)
TonF2_H2 <- E*0.5*amplituda * sin(2*pi*T21*2*t + faze)
TonF2_H3 <- E*0.5*amplituda * sin(2*pi*T21*3*t + faze)
TonG2_H1 <- E*1*amplituda * sin(2*pi*T21*t + faze)
TonG2_H2 <- E*0.5*amplituda * sin(2*pi*T21*2*t + faze)
TonG2_H3 <- E*0.5*amplituda * sin(2*pi*T21*3*t + faze)
TonG2_H1_E3 <- E3*1*amplituda * sin(2*pi*T21*t + faze)
TonG2_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T21*2*t + faze)
TonG2_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T21*3*t + faze)
TonA3_H1 <- E*1*amplituda * sin(2*pi*T23*t + faze)
TonA3_H2 <- E*0.5*amplituda * sin(2*pi*T23*2*t + faze)
TonA3_H3 <- E*0.5*amplituda * sin(2*pi*T23*3*t + faze)
TonA3_H1_E3 <- E3*1*amplituda * sin(2*pi*T23*t + faze)
TonA3_H2_E3 <- E3*0.5*amplituda * sin(2*pi*T23*2*t + faze)
TonA3_H3_E3 <- E3*0.5*amplituda * sin(2*pi*T23*3*t + faze)
TonH3_H1 <- E*1*amplituda * sin(2*pi*T27*t + faze)
TonH3_H2 <- E*0.5*amplituda * sin(2*pi*T27*2*t + faze)
TonH3_H3 <- E*0.5*amplituda * sin(2*pi*T27*3*t + faze)

Pro rytmickou sekci vytvoříme tři zvuky “bicích nástrojů” - kopák, virbl a hajtku. Kopák vytvoříme pomocí sinusovky o frekvenci 3000 Hz, která následně rychle klesne. Virbl a hajtku vytvoříme pomocí bílého šumu. Pro generaci bílého šumu poslouží funkce rnorm, která náhodně generuje určitý počet čísel ve zvoleném rozpětí. Je třeba říct funkci rnorm, aby počet generovaných čísel odpovídal naší vzorkovací frekvenci (také je možné použít nižší oktávy této frekvence, vyšší oktávy by způsobily změnu v trvání všech složek skladby, kde by byl zvuk hajtky nebo virblu součástí). Pokud bychom toto neudělali, R by hlásilo, že spojované proměnné se neshodují délkou (nicméně i přes upozornění R lze takto docílit zajímavých “swingových” variací - sami se můžete přesvědčit, pokud u proměnné HH zadáte n = 40000). Vygenerované bílé šumy jsou následně vynásobené exponenciálami, čímž docílíme různě rychlého zatlumení - zvuk virblu je zatlumen pomaleji, zvuk hajtky je zatlumen rychleji. V případě kopáku je exponenciála (proměnná EKP) využita k rychlému snížení frekvence sinusovky.

KP <- E*1*amplituda * sin(2*pi*EKP*TKP*t + faze)
VB <- rnorm(n = 44100, sd = 0.3)*EVB
HH <- rnorm(n = 44100, sd = 0.3)*EHH

A nyní k samotné skladbě. Pomocí příkazu c (jako concatenate) můžeme zvuky vrstvit na sebe a řadit za sebe. Pomocí znaménka plus docílíme navrstvení více zvuků na sebe, pomocí čárky oddělíme jednu část od další části v čase. V následující skladbě odděluje čárka rytmický úsek jedné doby. Zároveň jsou složky patřící do jedné doby zarovnány tabulátorem.

sig <- c(TonA_H1 + TonA_H2 + TonA_H3 +  
           Tona_H1 + Tona_H2 + Tona_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           Tong2_H1 + Tong2_H2 + Tong2_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +   
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + KP + 
           Tona_H1 + Tona_H2 + Tona_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB +
           Tong2_H1 + Tong2_H2 + Tong2_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + HH +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +  VB + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + KP +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonE_H1 + TonE_H2 + TonE_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonG_H1 + TonG_H2 + TonG_H3 + HH +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 +  VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 +
           Tona_H1 + Tona_H2 + Tona_H3+ KP + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonH2_H1 + TonH2_H2 + TonH2_H3 + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 +  VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonE_H1 + TonE_H2 + TonE_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonG_H1 + TonG_H2 + TonG_H3 + HH +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonH2_H1 + TonH2_H2 + TonH2_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonE2_H1 + TonE2_H2 + TonE2_H3 + KP + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 +     
           TonC_H1 + TonC_H2 + TonC_H3 + HH + 
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 + VB + HH +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 + HH +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 +
           TonA_H1 + TonA_H2 + TonA_H3 + KP + HH +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 +
           TonA_H1 + TonA_H2 + TonA_H3 + HH + 
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB + HH + TonH2_H1_E3 + TonH2_H2_E3 + TonH2_H3_E3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH + TonD2_H1_E3 + TonD2_H2_E3 + TonD2_H3_E3 +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonE2_H1 + TonE2_H2 + TonE2_H3 + KP + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 +     
           TonC_H1 + TonC_H2 + TonC_H3 + HH +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 + VB + HH +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 + HH +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 +
           TonA_H1 + TonA_H2 + TonA_H3 + KP + HH +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 +
           TonA_H1 + TonA_H2 + TonA_H3 + HH +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB + HH + TonG2_H1_E3 + TonG2_H2_E3 + TonG2_H3_E3 +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH + TonA3_H1_E3 + TonA3_H2_E3 + TonA3_H3_E3 +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + KP + HH + TonH3_H1 + TonH3_H2 + TonH3_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB + HH + TonA3_H1 + TonA3_H2 + TonA3_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + KP + HH+ TonG2_H1 + TonG2_H2 + TonG2_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + HH +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +  VB + HH + TonA3_H1 + TonA3_H2 + TonA3_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + KP + HH + TonH3_H1 + TonH3_H2 + TonH3_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + HH +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB + HH + TonA3_H1 + TonA3_H2 + TonA3_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + HH +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + KP + HH + TonG2_H1 + TonG2_H2 + TonG2_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 + 
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + HH +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +   
           TonH_H1 + TonH_H2 + TonH_H3 + VB + TonE2_H1 + TonE2_H2 + TonE2_H3 + 
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + KP +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonE_H1 + TonE_H2 + TonE_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonG_H1 + TonG_H2 + TonG_H3  +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 +  VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3  +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 + KP + 
           Tona_H1 + Tona_H2 + Tona_H3+ 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + TonH2_H1 + TonH2_H2 + TonH2_H3  +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonA2_H1 + TonA2_H2 + TonA2_H3 +  VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonG_H1 + TonG_H2 + TonG_H3  +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonE_H1 + TonE_H2 + TonE_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + TonG_H1 + TonG_H2 + TonG_H3  +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + TonH2_H1 + TonH2_H2 + TonH2_H3 + VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +  TonG_H1 + TonG_H2 + TonG_H3  +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + KP + TonE_H1 + TonE_H2 + TonE_H3 +
           Tona_H1 + Tona_H2 + Tona_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3  +
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           Tong2_H1 + Tong2_H2 + Tong2_H3 + VB +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + KP +
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB +  
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 +  
           Tona_H1 + Tona_H2 + Tona_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         TonA_H1 + TonA_H2 + TonA_H3 + 
           TonC_H1 + TonC_H2 + TonC_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + VB +
           Tong2_H1 + Tong2_H2 + Tong2_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tonf_H1 + Tonf_H2 + Tonf_H3 + 
           TonA_H1 + TonA_H2 + TonA_H3 +
           TonD_H1 + TonD_H2 + TonD_H3,
         Tong_H1 + Tong_H2 + Tong_H3 +  VB + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         Tong_H1 + Tong_H2 + Tong_H3 + 
           TonH_H1 + TonH_H2 + TonH_H3 +
           TonE_H1 + TonE_H2 + TonE_H3,
         KP + VB)

Po poskládání výsledného zvuku ještě provedeme konvoluci, která k celému zvuku “připočítá” dozvuk a vytvoří dojem, že zvuk zní v prostoru. Nejprve potřebujeme do proměnné impWav nahrát nahrávku impulzní odezvy, ze které následně získáme její vzorkovací frekvenci (proměnná fsimp) a číselnou reprezentaci zvuku (proměnná impOd).

Odkaz na zvuk s impulzní odezvou: imp2.wav

impWav <- readWave("imp2.wav")
fsimp <- impWav@samp.rate
impOd <- impWav@left

Dále zajistíme, že jsou oba zvuky (výše složený zvuk a impulzní odezva) stejně dlouhé.

M <- length(sig)
N <- length(impOd)
delka <- M + N - 1
delka <- 2^ceiling(log2(delka))
vstup0 <- c(sig, rep(0, delka - M))
impOd0 <- c(impOd, rep(0, delka - N))

Pomocí příkazu convolve provedeme konvoluci vytvořeného zvuku, tedy samotnou matematickou operaci, jejímž výsledkem je číselná reprezentace výše složené skladby s dozvukem, který odpovídá impulzní odezvě.

vystup <- convolve(vstup0, impOd0, conj = FALSE, type = "circular")
vystup <- vystup[1: (M+N-1)]

A nakonec uložíme zvuk do souboru ve formátu wav.

savewav(vystup, fs, "vystup.wav")

Odkaz na výsledný zvuk: vystup.wav

Skladba je hotova, příjemnou relaxaci!