3.3 Strækning af samples

# Strækning af samples

Nu hvor vi kan afspille en række synths og samples for at skabe musik, er det tid til at lære hvordan vi kan styre både synths og samples for at gøre musikken endnu mere unik og interessant. Lad os først udforske muligheden for at *strække* og *skrumpe* samples.

## Intern repræsentation af en sample

Alle samples er forud-optagede lyde der gemmes som tal. Tallene bestemmer hvor meget membranen i højttaleren bevæger sig for at gengive lyden. Membranen kan bevæge sig ind og ud, så tallene skal kun bestemme hvor meget ind og ud membranen skal være på et givet tidspunkt. For at kunne give en troværdig gengivelse af lyden skal en sample typisk indeholde mange tusind tal per sekund! Sonic Pi tager disse tal og sender dem af sted med den rigtige hastighed for at flytte din computers højttaler ind og ud på den rigtige måde for at gengive lyden. Men det er også sjovt at ændre på den hastighed som tallene bliver sendt til højttaleren med. På den måde kan man ændre lyden.

## Ændring af hastigheden

Lad os lege med en af ambient-lydene: `:ambi_choir`. For at afspille den med standard-hastigheden kan du give en `rate:`-parameter med til `sample`:

```
sample :ambi_choir, rate: 1
```

Det afspiller den ved den normale hastighed (1), så indtil videre sker der ikke noget specielt. Du kan dog ændre tallet til noget andet. Hvad med `0.5`:

```
sample :ambi_choir, rate: 0.5
```

Hov! Hvad sker der her? Faktisk to ting. For det første tager samplen dobbelt så lang tid om at blive færdig, og for det andet er lyden en oktav lavere. Lad os udforske det lidt mere detaljeret.

## Lad os strække ud

En sample der er sjov at strække og krympe, er Amen Break. Ved den normale hastighed kan vi overveje at smide den i et stykke *drum'n'bass*-musik:

```
sample :loop_amen
```

Men ved at ændre hastigheden kan vi skifte genren. Prøv halv hastighed for noget *old-school hip-hop*:

```
sample :loop_amen, rate: 0.5
```

Hvis vi skruer op for hastigheden, bliver det *jungle*-agtigt:

```
sample :loop_amen, rate: 1.5
```

Nu til vores sidste gang løjer - lad os se hvad der sker hvis vi bruger en negativ hastighed:

```
sample :loop_amen, rate: -1
```

Hovsa! Lyden bliver afspillet *baglæns*! Prøv nu at lege med en masse forskellige samples med forskellige hastigheder. Prøv meget høje hastigheder. Enormt lave hastigheder. Se hvilke interessante lyde du kan få ud af det.

## En simpel forklaring af sample-hastighed

Man kan sammenligne en sample med en fjeder. At ændre på afspilnings-hastigheden, eller raten, svarer til at presse fjedren sammen eller strække den ud. Hvis du afspiller samplen med rate 2 (dvs. dobbelt hastighed), så *klemmer du fjedren* til halvdelen af dens oprindelige længde. Derfor tager samplen den halve tid at blive afspillet, da den er kortere. Hvis du afspiller samplen med rate 0.5 (dvs. halv hastighed), så *strækker du fjedren ud* til dobbelt længde. Samplen tager derfor den dobbelte tid at blive afspillet, da den er længere. Jo mere du presser den sammen (højere rate/hastighed), jo kortere bliver den, og jo mere du strækker den den ud (lavere rate/hastighed), jo længere bliver den.

Når man presser en fjeder sammen, øger man dens tæthed (antal spoler pr. cm) - det svarer til at samplen får en *højere tone*. Når man strækker fjedren ud, mindsker man dens tæthed, og det svarer til at samplen får en *lavere tone*.


## Matematikken bag sample-hastighed

(Dette afsnit er henvendt til dem der er interesseret i detaljerne. Du kan springe over det hvis du vil...)

Som vi så ovenfor, består en sample af en lang liste af tal som repræsenterer hvor højttaler-membranen skal stå over tid. Vi kan tage disse tal og tegne en graf med dem. Det kan se sådan ud:

![sample-graf](../../../etc/doc/images/tutorial/sample.png)

Måske du har set grafer som denne før. Det kaldes *bølgeformen* af en sample. Det er bare en graf over tal. En bølgeform som denne vil typisk have 44100 datapunkter pr. sekund - det skyldes Nyquist-Shannon-samplings-teoremet. Det betyder at hvis en sample varer 2 sekunder, vil bølgeformen bestå af 88200 tal som vi kan sende til højttaleren med en hastighed på 44100 tal pr. sekund. Vi kan naturligvis også sende det med dobbelt hastighed, hvilket vil give 88200 tal pr. sekund. Så vil det kun tage 1 sekund at afspille samplen. Vi kan også afspille med halv hastighed, hvilket vil svare til 22050 tal pr. sekund. Det vil gøre at samplen tager 4 sekunder om at blive afspillet.

Varigheden af en sample afhænger af afspilningshastigheden:

* Den dobbelte afspilningshastighed halverer afspilningstiden,
* Den halve afspilningshastighed fordobler afspilningstiden,
* En afspilningshastighed på en fjerdedel vil firdoble afspilningstiden,
* En afspilningshastighed på en tiendedel vil tidoble afspilningstiden.

Det kan udtrykkes med denne formel hvor rate svarer til hastigheden:

```
ny_samplevarighed = (1 / rate) * oprindelig_samplevarighed 
```

Ændring af afspilningshastigheden ændrer også tonen på samplen. Frekvensen, eller tonen, på en bølgeform er bestemt af hvor hurtigt den bevæger sig op og ned. Vores hjerner opfatter på en eller anden måde hurtige bevægelser i højttaleren som høje toner og langsomme bevægelser i højttaleren som lave toner. Det er derfor du nogle gange kan se en stor bashøjttaler bevæge sig når den pumper en superlav bas ud - den bevæger sig meget langsommere ind og ud end en højttaler der spiller højere toner.

Hvis du tager en bølgeform og krypmer den, vil den flytte sig op og ned flere gange pr. sekund. Det vil give den en højere tone. Når man fordobler antallet af bevægelser op og ned (oscillationer/svingninger) pr. sekund, fordobler man frekvensen. Så *afspiller du din sample med dobbelt hastighed, fordobler du frekvensen*. På samme måde vil du *halvere frekvensen ved at halvere hastigheden*. Andre ændringer i hastigheden vil på tilsvarende vis ændre frekvensen.
