# &arts;-moduler

## Indledning

Dette kapitel beskriver alle standardmodulerne i &arts;. En af de mest kraftfulde funktioner i &arts; er at moduler kan sammenkobles til strukturer som implementerer nye funktioner såsom lydeffekter og instrumenter.

Moduler opdeles i to kategorier. Syntesemoduler bruges til at implementere rørlægningen som manipulerer multimedie-datastrømme for at lave nye effekter, instrumenter, miksere og programmer. Visuelle moduler tillader dig at oprette en grafisk grænseflade til at styre lydstrukturerne som opbygges med syntesemodulerne.

## Reference til syntesemoduler

### Aritmetik + miksning

#### Synth_ADD

Synth_ADD

Denne adderer to signaler.

#### Synth_MUL

Synth_MUL

Denne multiplicerer signalet med en faktor. Du kan bruge dette til at skalere signaler ned (0 < faktor < 1) eller op (faktor > 1) eller invertere signaler (faktor < 0). Bemærk at faktoren kan være et signal og ikke behøver at være konstant (f.eks. envelopper eller rigtige signaler).

#### Synth_DIV

Synth_DIV

Dette dividerer et signal med en faktor. Du kan bruge dette til at dividere et signal med et andet. Eller sætte indværdi11 til 1 så du derved får den reciprokke værdi af indværdi2 som udværdi. Pas på med at indværdi2 aldrig nærmer sig 0 ellers vil du få problemer med divisioner med nul.

#### Synth_MULTI_ADD

Synth_MULTI_ADD

Denne adderer et vilkårligt antal signaler. Hvis du har brug for at opsummere bølgeformer som slaves af fire forskellige oscillatorer, kan du for eksempel tilslutte alle deres udgange til et Synth_MULTI_ADD-modul. Dette er effektivere end at bruge tre Synth_ADD-moduler.

#### Synth_XFADE

Synth_XFADE

Denne overtoner to signaler. Hvis procentindgangen er -1, høres kun signalet til venstre, hvis den er 1, høres kun det til højre. Hvis den er 0, høres begge signalerne med samme lydstyrke.

Denne gør at du kan sørge for at signalerne bliver indenfor et veldefineret område. Hvis du har to signaler som er mellem -1 og 1 inden overtoningen, forbliver de i samme område bagefter.

#### Synth_AUTOPANNER

Det modsatte af overtoning. Denne tager et monosignal og deler det op til et stereosignal. Den bruges til automatisk at panorere inddata-signalet mellem venstre og højre udgang. Dette gør miksningen mere levende. En standardanvendelse kunne være en guitar- eller sololyd.

Forbind en LFO, for eksempel en sinus eller savtakbølge til inlfo, og vælg en frekvens mellem 0,1 og 5 Hz for at få en traditionel effekt eller endnu mere for specialeffekter (FX).

### Busser

#### Synth_BUS_UPLINK

Synth_BUS_UPLINK

Et oplink til en bus. Angiv signaler til venstre og højre, og navnet på bussen som data skal sendes til på bus-porten. Det kombinerede signal fra alle oplink med dette navn havner på hvert nedlink på denne bus.

#### Synth_BUS_DOWNLINK

Synth_BUS_DOWNLINK

Henter (summen af) alle data som sendes på en vis bus (med navnet du angiver på bus-porten).

### Forsinkelser

#### Synth_DELAY

Denne forsinker inddata-signalet en vis tid. Tidsangivelsen skal være mellem 0 og maxdelay for en forsinkelse mellem 0 og maxdelay sekunder.

Denne slags forsinkelse kan ikke bruges i tilbagemeldingsstrukturer. Dette skyldes at det er en varierbar forsinkelse. Det går an at ændre længden mens den kører, og endog sætte den til nul. Men eftersom de egne uddata behøves for at beregne næste sampling i en tilbagemeldingsstruktur, kan en forsinkelse med en værdi som kan gå ned til nul under syntese føre til en låsningssituation.

Brug CDELAY'er i sådanne situationer, eller kombinér en kort konstant forsinkelse (på 0,001 sekunder) med en variabel forsinkelse.

Man kan også kombinere en CDELAY og en DELAY for at opnå en forsinkelse med variabel længde i en tilbagekobling. Sørg blot for at du har med en CDELAY at gøre.

#### Synth_CDELAY

Synth_CDELAY

Denne forlænger inddatasignalet en vis tid. Tidsangivelsen skal være større end 0 for en forsinkelse af på sekunder eller mere. Forsinkelsen er konstant under beregningen, hvilket betyder at den ikke kan ændres.

Dette sparer beregningstid eftersom ingen interpolation gøres, og er nyttigt til rekursive strukturer. Se beskrivelsen ovenfor (Synth_DELAY).

### Enveloper

#### Synth_ENVELOPE_ADSR

Synth_ENVELOPE_ADSR

Dette er en klassisk ADSR-envelop, som betyder at du angiver:

active

- Hvis brugeren holder tasten nede lige nu.

invalue

- Inddatasignalet.

attack

- Tiden som skal gå fra brugerens tryk på tasten og til signalet når sin maksimale amplitude (i sekunder).

decay

- Tiden som skal gå fra signalet har nået sin maksimale amplitude til signalet går tilbage til et konstant niveau (i sekunder).

sustain

- Det konstante niveau som holdes for signalet bagefter, til brugeren slipper tasten.

release

- Tiden som skal gå fra brugeren har sluppet tasten til signalet går ned til nul (i sekunder).

Du får det behandlede signal som uddata-værdi. Når ASDR-envelopen er klar, sætter den done til 1. Du kan bruge dette til at sørge for uddata done for et instrument (som gør at instrumentstrukturen fjernes fra &MIDI;-relæobjektet når lyden er hørt op).

#### Synth_PSCALE

Synth_PSCALE

Modulet Synth_PSCALE vil skalere lydstrømmen som sendes gennem den fra lydstyrke 0 (tavs) til 1 (oprindelig lydstyrke) tilbage til 0 (tavs), ifølge positionen (hent positionen fra en Synth_SEQUENCE). Positionen hvor toppen skal være kan angives som pos.

Eksempel: sæt top til 0,1 betyder at efter at 10 % af tonen er afspillet, har lydstyrken nået sin maksimale værdi, og begynder derefter at aftage.

### Effekter

#### Synth_FREEVERB

Synth_FREEVERB

Dette er en efterklangseffekt. I den nuværende implementering er det tænkt at sende en stereosignal gennem modulet, og det vil så -tilføje- efterklangseffekten til signalet.

Dette betyder at den også kan bruges inde i en StereoEffectStack.

Inddata-signalet skal forbindes til (inleft, inright), og uddata-signalet bliver (outleft, outright).

Parametrene som du kan indstille er:

roomsize

- Størrelsen af rummet som efterklangseffekten simulerer (område: 0 .. 1, hvor 1 er det største mulige rum).

damp

- Dette angiver et filter som gør at det simulerede rum absorberer høje frekvenser (område 0 .. 1, hvor 1 betyder absorbere høje frekvenser i stor udstrækning).

wet

- Størrelsen af efterklangsignalet (dvs. den del af signalet som skal ændres af filtret, og forårsage en vådt lyd, dvs. en efterklangslyd).

dry

- Størrelsen af rent signal som sendes gennem, som forårsager et ekko (eller kombineret forsinkelse) i stedet for en efterklangseffekt (område: 0 .. 1).

width

- Størrelsen af udvidet stereoeffekt som efterklangsalgoritmen tilføjer til efterklangseffekten, for at gøre efterklangslyden bredere i stereolydbilledet (område 0 .. 1).

mode

- [HUSK: Jeg tror at hvis mode er 1, beholder efterklangen det nuværende lydbillede for lyden, mens 0 er normal behandling]

#### Synth_TREMOLO

Synth_TREMOLO

Tremolomodulet modulerer amplituden ifølge en LFO-bølgeform. Traditionelt bruger man en sinusbølge, men hvorfor begrænse sig? Hvad man får er en meget intensiv effekt som skærer gennem de fleste arrangementer på grund af sit store dynamiske omfang. Tremoloeffekten er stadigvæk en favoriteffekt bland guitarister, selvom den ikke er så populær som i tresserne.

[HUSK: for øjeblikket implementeres dette som invalue + abs(inlfo) - måske ville det være bedre at implementere det som invalue * (1+inlfo*depth), hvor depth ville være en parameter mellem 0 .. 1 - dette afgøres efter &kde;2.1. Hvis du har en kommentar, så skriv til &arts;' e-mail-liste ;). ]

#### Synth_FX_CFLANGER

Synth_FX_CFLANGER

En flanger er en tidsvariabel forsinkelseseffekt. For at gøre udvikling af komplekse flangereffekter enklere, leveres dette modul som indeholder kernen af en enkanals flangerenhed.

Den har følgende porte:

invalue

- Signalet som du vil behandle.

lfo

- Helst en sinusbølge som modulerer forsinkelsestiden inde i flangeren (-1 .. 1).

mintime

- Den minimale værdi for tiden inde i flangeren i millisekunder. Foreslåede værdier: forsøg med noget i retning af 1 ms. Brug helst værdier < 1000 ms.

maxtime

- Den maksimale værdi for tiden inde i flangeren i millisekunder. Foreslåede værdier: forsøg med noget i retning af 5 ms. Brug helst værdier < 1000 ms.

outvalue

- Uddatasignalet. Det er vigtigt at du blander dette med originalsignalet (uden flanger) for at få den ønskede effekt.

Du kan bruge dette som en basis for koreffekter.

### Filtre

#### Synth_PITCH_SHIFT

Synth_PITCH_SHIFT

Denne tonehøjdeforandrende effekt ændrer frekvensen på inddatasignalet uden at påvirke hastigheden. En anvendelse af dette er for eksempel at ændre tonehøjden på din stemme mens du indspiller (og afspiller) den i realtid.

Parameteren speed er den relative hastighed som signalet afspilles med. Så med en hastighed på to bliver lyden dobbelt så høj (dvs. en inddatafrekvens på 440 Hz giver en uddatafrekvens på 880 Hz).

Parameteren frequency bruges internt til at ændre mellem forskellige korn i signalet. Den er indstillelig, og afhængig af valget kommer tonehøjdens ændring til at lyde mere eller mindre realistisk i dit brugstilfælde. En god værdi at begynde med er noget i stil med 5 eller 10.

#### Synth_SHELVE_CUTOFF

Synth_SHELVE_CUTOFF

Filtrerer alle frekvenser væk over afskæringsfrekvensen.

#### Synth_BRICKWALL_LIMITER

Synth_BRICKWALL_LIMITER

Dette modul klipper et signal så det passer i området [-1;1]. Det gør ingenting for at begrænse den forvridning som opstår når et stærk signal klippes af. Man kan bruge dette som en lydeffekt (for eksempel til at oprette en noget afklippet sinusbølge). Det er dog oftest en god idé at lade signalet gå gennem et lowpass-filter bagefter hvis du gør dette, for at gøre lyden mindre skærende.

#### Synth_STD_EQUALIZER

Synth_STD_EQUALIZER

Dette er en god byggeblok for en parametriserbar tonekontrol. Dens parametre er:

Indværdi, udværdi

- Signalet som filtreres af tonekontrollen.

low

- Hvordan lave frekvenser skal ændres. Værdien angives i dB, mens 0 betyder at lave frekvenser ikke skal ændres, ville -6 betyde at de dæmpes med 6 dB, og +6 betyder at de øges med 6 dB.

mid

- Hvordan middelfrekvenser skal ændres af tonekontrollen i dB (se low).

high

- Hvordan høje frekvenser skal ændres af tonekontrollen i dB (se low).

frekvens

- Dette er midtfrekvensen for tonekontrollen i Hz, midtfrekvensen befinder sig omkring dette spektrum, med de lave og høje frekvenser nedenfor og ovenfor. Bemærk at frekvensen ikke kan være højere end en halvdel af samplingsfrekvensen, oftest er den 22050 Hz, og ikke lavere end 1 Hz.

q

- Dette påvirker hvor bredt midterspektret er. Det skal være et positivt tal > 0. En værdi på et er rimelig, højere værdier af q betyder et smallere spektrum af midterfrekvenser. Lavere værdier end et betyder et bredere spektrum.

#### Synth_RC

Synth_RC

Et dæmpet resonansfilter som filtrerer alle frekvenser omkring en højeste værdi. Der er ingen nyttig måde at angive en midterfrekvens (som ikke skal klippes ), eftersom inddata er to underlige konstanter f og b. Koden er meget gammel, fra synthesizerns tidligste dage, og vil formodentlig blive skiftet ud mod et nyt filter som har en frekvens og en resonansværdi som parametre.

Forsøg med noget som ligner b=5, f=5 or b=10, f=10 or b=15, f=15 i alle tilfælde.

#### Synth_MOOG_VCF

Synth_MOOG_VCF

Filtrerer alle frekvenser væk over afskæringsfrekvensen (det er et 24 dB firepols filter, som filtrerer 24 dB pr oktav over afskæringsfrekvensen), men sørger for en yderligere parameter til at indstille filtrets resonans, hvor 0 betyder ingen resonans og 4 betyder selvsving.

### Midi + sekvensering

#### Synth_MIDI_TEST

Synth_MIDI_TEST

Dette modul indlæser en instrumentstruktur fra en fil, og registrerer sig som en midi-udgang med &arts; &MIDI;-håndtering. Toner som sendes til denne udgang gør at instrumentstemmer laves.

Du kan indstille noget sådant her på en behageligere måde i &artscontrol; i stedet for manuelt i &arts-builder;.

#### Synth_SEQUENCE

Afspiller en sekvens af toner om og om igen. Tonerne angives i spornotation, og adskilles af semikolon. Et eksempel er `A-3;C-4;E-4;C-4;`. Hastigheden angives som sekunder pr tone, så hvis du vil angive 120 slag pr minut, angiver du formodentlig 0,5 sekunder/tone, idet 60 sekunder/0,5 sekunder pr tone = 120 slag pr minut.

Du kan give hver tone en længde i forhold til hastigheden ved at bruge et kolon efter tonen fulgt af længden. `A-3:2;C-4:0.5;D-4:0.5;E-4;` viser dette. Som du kan se, tenderer midi-tonesætningsprogrammer til at tilbyde større bekvemmelighed ;)

Synth_SEQUENCE giver yderligere information om positionen for tonen som afspilles lige nu, hvor 0 betyder lige påbegyndt og 1 betyder afsluttet. Denne information kan man bruge med Synth_PSCALE (se nedenfor).

#### Synth_SEQUENCE_FREQ

Dette modul virker præcis som Synth_SEQUENCE, med den eneste forskel at du ikke indskriver nodenavne men frekvenser.

### Samplinger

#### Synth_PLAY_WAV

Synth_PLAY_WAV

Dette afspiller en `wav`-fil. Den er kun tilstede hvis du har libaudiofile på computeren. Bølgeformsfilen afspilles så snart modulet laves.

Den stopper så snart den er klar, og done sættes til 1. Hastighedsparameteren kan bruges til at afspille filen hurtigere eller langsommere, hvor 1.0 er den normale (indspillede) hastighed.

### Lyd-I/O

#### Synth_PLAY

Synth_PLAY

Normalt behøver man ikke dette modul, hvis man ikke skriver selvstændige programmer. Inde i &artsd;, er der allerede et Synth_PLAY modul, og at oprette et til virker ikke.

Modulet Synth_PLAY giver lydsignalet som uddata til lydkortet. Venstre og højre kanal skal indeholde normaliseret inddata for kanalerne. Hvis inddata ikke er mellem -1 og 1, får man klipning.

Som allerede nævnt, må der kun være et Synth_PLAY modul, eftersom det har direkte adgang til lydkortet. Brug busser til at blande mere end en lydstrøm sammen inden afspilning. Brug modulet Synth_AMAN_PLAY for at få noget som ligner uddata inde i &artsd;.

Bemærk at Synth_PLAY også kontrollerer tiden for hele strukturen. Dette betyder: ingen Synth_PLAY = ingen kilde for tid = ingen lyd. Så der behøves (nøjagtigt) et Synth_PLAY objekt.

#### Synth_RECORD

Synth_RECORD

Normalt behøver man ikke dette modul, hvis man ikke skriver selvstændige programmer. Inde i artsd, er der normalt allerede et Synth_RECORD modul, og at oprette et til virker ikke.

Modulet Synth_RECORD indspiller et signal fra lydkortet. Venstre og højre kanal indeholder inddata for kanalerne (mellem -1 og 1).

Som allerede nævnt, må der kun findes et Synth_RECORD modul, eftersom det har direkte adgang til lydkortet. Brug busser for at bruge den indspillede lydstrøm på mere end et sted. Brug modulet Synth_AMAN_RECORD for at få noget som ligner en indgang inde i artsd. For at dette skal virke skal &artsd; køre med full dupleks aktiveret.

#### Synth_AMAN_PLAY

Synth_AMAN_PLAY

Modulet Synth_AMAN_PLAY giver lydsignalet som uddata. Det er godt (men ikke nødvendigt) at uddata er et normaliserer signal (mellem -1 og 1).

Dette modul bruger lydhåndteringen til at angive hvor signalet bliver spillet. Lydhåndteringen kan styres gennem &artscontrol;. For at gøre det mere intuitivt at bruge, er det godt at navngive signalet som afspilles. Det kan opnås ved at angive title. En anden funktion i lydhåndteringen er at kunne huske hvor et signal sidst blev afspillet. For at kunne gøre dette skal den kunne skelne mellem signaler. Derfor skal man også angive en entydig værdi for autoRestoreID.

#### Synth_AMAN_RECORD

Synth_AMAN_RECORD

Modulet Synth_AMAN_RECORD optager et lydsignal fra en ekstern kilde (dvs. linje ind/mikrofon) inde i &artsd;. Uddata vil være et normaliseret signal (mellem -1 og 1).

Dette modul bruger lydhåndteringen til at angive hvor signalet afspilles. Lydhåndteringen kan styres med artscontrol. For at gøre det mere intuitivt at bruge, er det godt at navngive signalet som afspilles. Det kan opnås ved at angive title. En anden funktion i lydhåndtereringen er at kunne huske hvor et signal afspilledes sidst. For at kunne gøre dette skal den kunne skelne mellem signaler. Derfor skal man også angive en entydig værdi for autoRestoreID.

#### Synth_CAPTURE

Synth_CAPTURE

Modulet Synth_CAPTURE skriver et lydsignal til en bølgeformsfil på harddisken. Filen hedder altid `/tmp/mcop-`brugernavn`/capture.wav`

### Tester

#### Synth_NIL

Synth_NIL

Dette gør ingenting. Det er meget nyttigt i testsituationer.

#### Synth_DEBUG

Synth_DEBUG

Man kan bruge dette til fejlsøgning. Det udskriver værdien for signalet ved invalue i regelmæssige intervaller (cirka 1 sekund), sammen med kommentaren som du har angivet. På denne måde kan man finde ud af om visse signaler forbliver indenfor visse områder, eller om de findes i det hele taget.

#### Synth_MIDI_DEBUG

Synth_MIDI_DEBUG

Man kan bruge dette til at fejlsøge hvordan &MIDI;-begivenheder virkelig kommer ind i &arts;.

Når en MIDI_DEBUG kører, udskriver &artsserver; linjer såsom:

    201 100753.837585 on 0 42 127

    202 101323.128355 off 0 42

Den første linje fortæller at 100753 ms (dvs. 100 sekunder) efter MIDI_DEBUG startede, kom en &MIDI;-begivenhed "on" på kanal 0. Denne midi-begivenhed havde hastighed (lydstyrke) 127, den højest mulige. Næste linje viser midi-begivenhed da tasten blev sluppet. [HUSK: dette virker ikke for øjeblikket, få det til at virke, og gør det via &MIDI;-håndteringen].

#### Synth_DATA

Synth_DATA

Dette laver et signal med en konstant værdi.

### Oscillation & Modulation

#### Synth_FREQUENCY

Synth_FREQUENCY

Oscillatorer i &arts; kræver ikke en frekvens som inddata, men i stedet en position i bølgen. Positionen skal være mellem 0 og 1, som i et standardobjekt Synth_WAVE_SIN oversættes til området 0 .. 2*Pi. For at oprette oscillerende værdier fra en frekvens, bruges et Synth_FREQUENCY modul.

#### Synth_FM_SOURCE

Synth_FM_SOURCE

Dette bruges til frekvensmodulering. Angiv frekvensen med indgangen frequency og put et andet signal til moduleringsindgangen. Indstil derefter modlevel til et eller andet, f.eks. 0,3. Frekvensen moduleres derefter med moduleringen. Prøv det. Virker godt hvis man tilføjer en tilbagekobling, hvilket betyder at man tager en kombination af det forsinkede uddatasignal fra Synth_FM_SOURCE (man skal sende det til en oscillator eftersom det kun virker som Synth_FREQUENCY) og et andet signal for at få et godt resultat.

Virker godt sammen med Synth_WAVE_SIN oscillatorer.

### Bølgeformer

#### Synth_WAVE_SIN

Synth_WAVE_SIN

Sinusoscillator. Angiv et pos signal fra Synth_FREQUENCY eller Synth_FM_SOURCE som indsignal, og få en sinusbølge som udsignal. Signalet pos angiver positionen i bølgeformen, området 0 .. 1 afbildes til 0 .. 2*Pi internt.

#### Synth_WAVE_TRI

Synth_WAVE_TRI

Triangelbølgeoscillator. Angiv et pos signal fra Synth_FREQUENCY eller Synth_FM_SOURCE som indsignal, og få en triangelbølge som udsignal. Signalet pos angiver positionen i bølgeformen, området 0 .. 1 afbildes til 0 .. 2*Pi internt. Vær forsigtig. Indsignalet skal være i området 0 .. 1 for at udsignalet kan give et godt resultat.

#### Synth_NOISE

Synth_NOISE

Støjgenerator. Denne laver et tilfældigt signal mellem -1 og 1.

#### Synth_WAVE_SQUARE

Synth_WAVE_SQUARE

Firkantbølgeoscillator. Angiv et pos signal fra Synth_FREQUENCY eller Synth_FM_SOURCE som indsignal, og få en firkantbølge som udsignal. Signalet pos angiver positionen i bølgeformen, området 0 .. 1 afbildes til 0 .. 2*Pi internt. Vær forsigtig. Indsignalet skal være i området 0 .. 1 for at udsignalet kan give et godt resultat.

#### Synth_WAVE_SOFTSAW

Synth_WAVE_SOFTSAW

Blød savtandsbølge, som ligner Synth_WAVE_TRI oscillatoren i udseende. Angiv et pos signal fra Synth_FREQUENCY eller Synth_FM_SOURCE som indsignal, og få en blød savtandsbølge som udsignal. Signalet pos angiver positionen i bølgeformen, området 0 .. 1 afbildes til 0 .. 2*Pi internt. Vær forsigtig. Indsignalen skal være i området 0 .. 1 for at udsignalet kan give et godt resultat.

#### Synth_WAVE_PULSE

Synth_WAVE_PULSE

Pulsoscillator. Dette modul ligner den rektangulære oscillator (Synth_WAVE_RECT), men det sørger for et indstilleligt op/ned-forhold, ved parameteren dutycycle. Angiv et pos signal fra Synth_FREQUENCY eller Synth_FM_SOURCE som indsignal, og få en pulsbølge som udsignal. Signalet pos angiver positionen i bølgeformen, området 0 .. 1 afbildes til 0 .. 2*Pi internt. Vær forsigtig. Indsignalet skal være i området 0 .. 1 for at udsignalet kan give et godt resultat.

### Diverse

#### Synth_COMPRESSOR

Dette modul reducerer det dynamiske omfang af et signal. Reduktion er for eksempel nyttigt for at kompensere for de store variationer i lydstyrke når nogen taler i en mikrofon.

Så snart inddataniveauet overstiger et vist niveau (tærskelen) så reduceres signalet. Den multiplicerer helt enkelt alt over tærskelen med en ratio, som skal være en værdi mellem 0 og 1. Tilsidst multipliceres hele signalet med uddatafaktoren.

Argumenterne attack og release forsinker starten og slutningen af reduktionen. Brug dette hvis du for eksempel stadigvæk vil høre den stærke begyndelse af en bastromme. Argumenterne angives i millisekunder, og en attack eller release på 0 ms er mulig, men kan resultere i en let støj.

## Reference til visuelle moduler

HUSK når visuelle moduler er "færdige".