# &arts; moduler

## Inledning

Det här kapitlet beskriver alla standardmodulerna i &arts;. En av de mest kraftfulla funktionerna i &arts; är att moduler kan kopplas ihop till strukturer som implementerar nya funktioner som ljudeffekter och instrument.

Moduler delas upp i två kategorier. Syntesmoduler används för att implementera rörmokeriet som manipulerar multimediadataflöden för att skapa nya effekter, instrument, mixrar och program. Visuella moduler låter dig skapa ett grafiskt gränssnitt för att styra ljudstrukturer som byggs upp med syntesmodulerna.

## Referens till syntesmoduler

### Aritmetik + mixning

#### Synth_ADD

Synth_ADD

Den här adderar två signaler.

#### Synth_MUL

Synth_MUL

Den här multiplicerar signalen med en faktor. Du kan använda det här för att skala ner (0 < faktor < 1) eller upp (faktor > 1) signaler eller invertera signaler (faktor < 0). Observera att faktorn kan vara en signal och behöver inte vara konstant (t.ex. envelopper eller flyttalssignaler).

#### Synth_MULTI_ADD

Synth_MULTI_ADD

Den här adderar ett godtyckligt antal signaler. Om du behöver summera vågformer som skapas av fyra olika oscillatorer, kan du till exempel ansluta alla deras utgångar till en Synth_MULTI_ADD-modul. Det här är effektivare än att använda tre Synth_ADD-moduler.

#### Synth_XFADE

Synth_XFADE

Den här övertonar två signaler. Om procentingången är -1, hörs bara vänstra signalen, om den är 1, hörs bara den högra. Om den är 0, hörs båda signalerna med samma volym.

Den här gör att du kan försäkra dig om att signalen stannar inom ett väldefinierat område. Om du har två signaler som är mellan -1 och 1 innan övertoningen, kommer de att vara i samma område efteråt.

#### Synth_AUTOPANNER

Motsatsen till övertoning. Den här tar en monosignal och delar den till en stereosignal. Den används för att automatiskt panorera insignalen mellan vänster och höger utgång. Det här gör mixningen mer levande. En standardtillämpning kan vara en gitarr- eller sololjud.

Anslut en LFO, till exempel en sinus eller sågtandsvåg till inlfo, och välj en frekvens mellan 0,1 och 5 Hz för att få en traditionell effekt eller ännu mer för specialeffekter (FX).

### Bussar

#### Synth_BUS_UPLINK

Synth_BUS_UPLINK

En upplänk till en buss. Ange signaler till vänster och höger, och namnet på bussen som data ska skickas till på buss porten. Den kombinerade signalen från alla upplänkar med det här namnet hamnar på varje nerlänk på den bussen.

#### Synth_BUS_DOWNLINK

Synth_BUS_DOWNLINK

Hämtar (summan av) all data som skickas på en viss buss (med namnet du anger på buss porten).

### Fördröjningar

#### Synth_DELAY

Den här fördröjer insignalen en viss tid. Tidsangivelsen måste vara mellan 0 och maxdelay för en fördröjning mellan 0 och maxdelay sekunder.

Den här sortens fördröjning kan inte användas i återmatningsstrukturer. Det här beror på att det är en varierbar fördröjning. Det går att ändra längden medan den kör, och även sätta den till noll. Men eftersom den egna utgången behövs för att beräkna nästa sampling i en återmatningsstruktur, kan en fördröjning med ett värde som kan gå ner till noll under syntes leda till en låsningssituation.

Använd CDELAY:er i sådana situationer, eller kombinera en kort konstant fördröjning (av 0,001 sekunder) med en variabel fördröjning.

Man kan också kombinera en CDELAY och en DELAY för att åstadkomma en fördröjning med variabel längd i en återkoppling. Försäkra dig bara om att du har med en CDELAY.

#### Synth_CDELAY

Synth_CDELAY

Den här fördröjer insignalen en viss tid. Tidsangivelsen måste vara större än 0 för en fördröjning av 0 sekunder eller mer. Fördröjningen är konstant under beräkningen, vilket betyder att den inte kan ändras.

Det här sparar beräkningstid eftersom ingen interpolation görs, och är användbart för rekursiva strukturer. Se beskrivningen ovan (Synth_DELAY).

### Envelopper

#### Synth_ENVELOPE_ADSR

Synth_ENVELOPE_ADSR

Den här är ett klassiskt ADSR-envelopp, som betyder att du anger:

active

- Om användaren håller nere tangenten just nu.

invalue

- Insignalen.

attack

- Tiden som ska förflyta mellan användaren trycker på tangenten och signalen når sin maximala amplitud (i sekunder).

decay

- Tiden som ska förflyta mellan signalen nått sin maximala amplitud och signalen går tillbaka till någon konstant nivå (i sekunder).

sustain

- Den konstanta nivån som hålls för signalen efteråt, till användaren släpper tangenten.

release

- Tiden som ska förflyta efter användaren har släppt tangenten till signalen går ner till noll (i sekunder).

Du får den behandlade signalen som utvärde. När ASDR-enveloppen är klar, sätter den done till 1. Du kan använda det här för att tillhandahålla utgången done för ett instrument (som gör att instrumentstrukturen tas bort av &MIDI;-reläobjektet när ljudet väl har upphört).

#### Synth_PSCALE

Synth_PSCALE

Modulen Synth_PSCALE anpassar ljudflödet som skickas genom den från volymen 0 (tyst) till 1 (ursprunglig volym) tillbaka till 0 (tyst), enligt positionen (hämta positionen från en Synth_SEQUENCE). Positionen där toppen ska vara kan anges som top.

Att till exempel sätta top till 0,1 betyder att efter 10 % av tonen har spelats, har volymen nått maximalt värde, och börjar sedan avta.

### Effekter

#### Synth_FREEVERB

Synth_FREEVERB

Det här är en efterklangseffekt. I den nuvarande implementeringen är det tänkt att skicka en stereosignal genom modulen, och den lägger till efterklangseffekten i signalen.

Det här betyder att den också kan användas inne i en StereoEffectStack.

Insignalen ska anslutas till (inleft, inright), och utsignalen blir (outleft, outright).

Parametrarna som du kan ställa in är:

roomsize

- Storleken på rummet som efterklangseffekten simulerar (område: 0 .. 1, där 1 är det största möjliga rummet).

damp

- Det här anger ett filter som gör att det simulerade rummet absorberar höga frekvenser (område 0 .. 1, där 1 betyder absorbera höga frekvenser i stor utsträckning).

wet

- Storleken på efterklangsignalen (dvs. den del av signalen som ska ändras av filtret, och orsaka ett vått ljud, dvs. ett efterklangsljud).

dry

- Storleken på ren signal som skickas igenom, som orsakar ett eko (eller kombinerad fördröjning) istället för en efterklangseffekt (område: 0 .. 1).

width

- Storleken på utökad stereoeffekt som efterklangsalgoritmen lägger till i efterklangseffekten, för att göra efterklangsljudet bredare i stereoljudbilden (område 0 .. 1).

mode

- [ATT GÖRA: Jag tror att om mode är 1, behåller efterklangen den nuvarande ljudbilden för ljudet, medan 0 är normal behandling]

#### Synth_TREMOLO

Synth_TREMOLO

Tremolomodulen modulerar amplituden enligt en LFO-vågform. Traditionellt använder man en sinusvåg, men varför begränsa sig? Vad man får är en mycket intensiv effekt som skär igenom de flesta arrangemang på grund av sitt stora dynamiska omfång. Tremoloeffekten är fortfarande en favoriteffekt bland gitarrister, även om den inte är så populär som på 1960-talet.

[ATT GÖRA: för närvarande implementeras detta som invalue + abs(inlfo) - kanske skulle det vara vettigare att implementera det som invalue * (1+inlfo*depth), där depth skulle vara en parameter mellan 0 .. 1 - det här bestäms efter &kde;2.1. Om du har en kommentar, skicka e-post till &arts; e-postlista ;). ]

#### Synth_FX_CFLANGER

Synth_FX_CFLANGER

En fläns är en tidsvariabel fördröjningseffekt. För att göra utveckling av komplexa flänseffekter enklare, tillhandahålls den här modulen som innehåller kärnan av en enkanals flänsenhet.

Den har följande portar:

invalue

- Signalen som du vill behandla.

lfo

- Helst en sinusvåg som modulerar fördröjningstiden inne i flänsen (-1 .. 1).

mintime

- Minimala värdet för tiden inne i flänsen i millisekunder. Föreslagna värden: försök med något nära 1 ms. Använd helst värden < 1000 ms.

maxtime

- Maximala värdet för tiden inne i flänsen i millisekunder. Föreslagna värden: försök med något nära 5 ms. Använd helst värden < 1000 ms.

outvalue

- Utsignalen. Det är viktigt att du blandar den här med originalsignalen (innan flänsen) för att få den önskade effekten.

Du kan använda den här som en grund för köreffekter.

### Filter

#### Synth_PITCH_SHIFT

Synth_PITCH_SHIFT

Den här tonhöjdsförändrande effekten ändrar frekvensen på insignalen utan att påverka hastigheten. En tillämpning av detta är att till exempel ändra tonhöjden på din röst medan du spelar in (och spelar upp) den i realtid.

Parametern speed är den relativa hastigheten som signalen spelas upp med. Så att med hastigheten två blir ljudet dubbelt så högt (dvs. en infrekvens på 440 Hz ger en utfrekvens på 880 Hz).

Parametern frequency används internt för att ändra mellan olika kornighet i signalen. Den är anpassningsbar, och beroende på valet kommer tonhöjdsförändringen låta mer eller mindre realistisk vid en viss användning. Ett bra värde att börja med är någonting i stil med 5 eller 10.

#### Synth_SHELVE_CUTOFF

Synth_SHELVE_CUTOFF

Filtrerar bort alla frekvenser över klippningsfrekvensen.

#### Synth_BRICKWALL_LIMITER

Synth_BRICKWALL_LIMITER

Den här modulen klipper en signal så att den passar i området [-1;1]. Den gör ingenting för att begränsa distorsionen som uppstår när en stark signal klipps av. Man kan använda det här som en ljudeffekt (till exempel för att skapa en något avklippt sinusvåg). Det är dock oftast en god idé att låta signalen gå genom ett lågpassfilter efteråt om du gör detta, för att få ljudet att låta mindre skärande.

#### Synth_STD_EQUALIZER

Synth_STD_EQUALIZER

Den här är ett trevligt byggblock för en parametriserbar tonkontroll. Dess parametrar är:

Invärde, utvärde

- Signalen som filtreras av tonkontrollen.

low

- Hur låga frekvenser ska ändras. Värdet anges i dB, medan 0 betyder att låga frekvenser inte ska ändras, skulle -6 betyda att de dämpas med 6 dB, och +6 betyder öka dem med 6 dB.

mid

- Hur mittfrekvenser ska ändras av tonkontrollen i dB (se low).

high

- Hur höga frekvenser ska ändras av tonkontrollen i dB (se low).

frekvens

- Det här är mittfrekvensen för tonkontrollen i Hz, mittfrekvensen befinner sig omkring detta spektrum, med de låga och höga frekvenserna nedanför och ovanför. Observera att frekvensen inte kan vara högre än halva samplingsfrekvensen, oftast är den 22050 Hz, och inte lägre än 1 Hz.

q

- Det här påverkar hur brett mittspektrat är. Det måste vara ett positivt tal > 0. Värdet ett är rimligt, högre värden på q betyder ett smalare spektrum av mittfrekvenser. Lägre värden än ett betyder ett bredare spektrum.

#### Synth_RC

Synth_RC

Ett dämpat resonansfilter som filtrerar alla frekvenser omkring något högsta värde. Det finns inget användbart sätt att ange en mittfrekvens (som inte skulle klippas), eftersom indata är två underliga konstanter f och b. Koden är mycket gammal, från synthesizerns tidigaste dagar, och kommer troligen att bytas ut mot ett nytt filter som har en frekvens och ett resonansvärde som parametrar.

Försök med något som liknar b=5, f=5 or b=10, f=10 or b=15, f=15 i alla fall.

#### Synth_MOOG_VCF

Synth_MOOG_VCF

Filtrerar bort alla frekvenser ovanför klippningsfrekvensen (det är ett 24 dB fyrpoligt filter, som filtrerar 24 dB per oktav ovanför klippningsfrekvensen), men tillhandahåller en ytterligare parameter för att anpassa filtrets resonans, där 0 betyder ingen resonans och 4 betyder självsvängning.

### Midi + sekvensiering

#### Synth_MIDI_TEST

Synth_MIDI_TEST

Den här modulen laddar en instrumentstruktur från en fil, och registrerar sig som en midi-utgång med &arts; &MIDI;-hanterare. Toner som skickas till den här utgången gör att instrumentröster skapas.

Du kan ställa in något sådant här på ett bekvämare sätt i &artscontrol; istället för manuellt i aRts-byggaren.

#### Synth_SEQUENCE

Spelar en sekvens av toner om och om igen. Tonerna anges i spårnotation, och separeras av semikolon. Ett exempel är `A-3;C-4;E-4;C-4;`. Hastigheten anges som sekunder per ton, så om du vill ange 120 slag per minut, anger du troligen 0,5 sekunder/ton, som 60 sekunder/0,5 sekunder per ton = 120 slag per minut.

Du kan ge varje ton en längd i förhållande till hastigheten genom att använda ett kolon efter tonen följt av längden. `A-3:2;C-4:0.5;D-4:0.5;E-4;` visar detta. Som du kan se, tenderar midi-tonsättningsprogram att ge mer bekvämlighet ;)

Synth_SEQUENCE ger ytterligare information om positionen för tonen som spelas just nu, där 0 betyder precis påbörjad och 1 betyder avslutad. Den här informationen kan man använda med Synth_PSCALE (se nedan).

### Samplingar

#### Synth_PLAY_WAV

Synth_PLAY_WAV

Den här spelar en `wav`-fil. Den är bara tillgänglig om du har libaudiofile på datorn. Vågformsfilen spelas så fort modulen skapas.

Den stannar så fort den är klar, och done sätts till 1. Hastighetsparametern kan användas för att spela upp filen snabbare eller långsammare, där 1.0 är den normala (inspelade) hastigheten.

### Ljud-I/O

#### Synth_PLAY

Synth_PLAY

Normalt behöver man inte den här modulen, om man inte skriver självständiga program. Inne i &artsd;, finns det redan en Synth_PLAY modul, och att skapa en till fungerar inte.

Modulen Synth_PLAY-matar ut ljudsignalen till ljudkortet. Vänster och höger kanal ska innehålla normaliserad indata för kanalerna. Om indata inte är mellan -1 och 1, får man klippning.

Som redan har nämnts, får det bara finnas en Synth_PLAY modul, eftersom den direkt kommer åt ljudkortet. Använd bussar för att blanda ihop mer än ett ljudflöde innan uppspelning. Använd modulen Synth_AMAN_PLAY för att få något som liknar en utmatning inne i &artsd;.

Observera att Synth_PLAY också kontrollerar tidbasen för hela strukturen. Det här betyder: ingen Synth_PLAY = ingen källa för tidbas = inget ljud. Så det behövs (exakt) ett Synth_PLAY objekt.

#### Synth_RECORD

Synth_RECORD

Normalt behöver man inte den här modulen, om man inte skriver självständiga program. Inne i artsd, finns det redan en Synth_RECORD modul, och att skapa en till fungerar inte.

Modulen Synth_RECORD spelar in en signal från ljudkortet. Vänster och höger kanal innehåller indata för kanalerna (mellan -1 och 1).

Som redan har nämnts, får det bara finnas en Synth_RECORD modul, eftersom den direkt kommer åt ljudkortet. Använd bussar för att använda det inspelade ljudflödet på mer än ett ställe. Använd modulen Synth_AMAN_RECORD för att få något som liknar en ingång inne i artsd. För att det här ska fungera måste &artsd; köra med full duplex aktiverad.

#### Synth_AMAN_PLAY

Synth_AMAN_PLAY

Modulen Synth_AMAN_PLAY-matar ut ljudsignalen. Det är bra (men inte nödvändigt) att utdata är en normaliserad signal (mellan -1 och 1).

Den här modulen använder ljudhanteraren för att ange var signalen spelas upp. Ljudhanteraren kan styras genom &artscontrol;. För att göra det mer intuitivt att använda, är det bra att namnge signalen som spelas upp. Det kan åstadkommas genom att ange title. En annan funktion i ljudhanteraren är att kunna komma ihåg var en signal spelades upp sist. För att kunna göra det här måste den kunna skilja på signaler. Därför ska man ange något unikt värde för autoRestoreID också.

#### Synth_AMAN_RECORD

Synth_AMAN_RECORD

Modulen Synth_AMAN_RECORD-spelar in en ljudsignal från en extern källa (dvs linje in/mikrofon) inne i &artsd;. Utdata kommer att vara en normaliserad signal (mellan -1 och 1).

Den här modulen använder ljudhanteraren för att ange var signalen spelas upp. Ljudhanteraren kan styras genom artscontrol. För att göra det mer intuitivt att använda, är det bra att namnge signalen som spelas upp. Det kan åstadkommas genom att ange title. En annan funktion i ljudhanteraren är att kunna komma ihåg var en signal spelades in sist. För att kunna göra det här måste den kunna skilja på signaler. Därför ska man ange något unikt värde för autoRestoreID också.

#### Synth_CAPTURE

Synth_CAPTURE

Modulen Synth_CAPTURE skriver en ljudsignal till en vågformsfil på hårddisken. Filen heter alltid `/tmp/mcop-`användarnamn`/capture.wav`

### Tester

#### Synth_NIL

Synth_NIL

Den här gör ingenting. Den är mycket användbar i testsituationer.

#### Synth_DEBUG

Synth_DEBUG

Man kan använda den här för avlusning. Den skriver ut värdet för signalen invalue med regelbundna intervall (cirka 1 sekund), tillsammans med kommentaren som angivits. På det här sättet kan man ta reda på om vissa signaler förblir inom vissa områden, eller om de finns överhuvudtaget.

#### Synth_MIDI_DEBUG

Synth_MIDI_DEBUG

Man kan använda den här för att avlusa hur &MIDI;-händelser verkligen kommer in i &arts;.

När en MIDI_DEBUG kör, skriver &artsserver; ut rader som:

    201 100753.837585 on 0 42 127

    202 101323.128355 off 0 42

Den första raden talar om att 100753 ms (dvs. 100 sekunder) efter MIDI_DEBUG startade, kom en &MIDI;-händelse "on" på kanal 0. Den här midi-händelsen hade anslagsstyrkan (volymen) 127, den högsta möjliga. Nästa rad visar midi-händelsen när tangenten släpps. [ATT GÖRA: det här fungerar inte för närvarande, få det att fungera, och gör det via &MIDI;-hanteraren].

#### Synth_DATA

Synth_DATA

Det här skapar en signal med ett konstant värde.

### Oscillation & Modulation

#### Synth_FREQUENCY

Synth_FREQUENCY

Oscillatorer i &arts; kräver inte en frekvens som indata, utan istället en position i vågformen. Positionen ska vara mellan 0 och 1, som i ett standardobjekt Synth_WAVE_SIN översätts till området 0 .. 2*Pi. För att skapa oscillerande värden från en frekvens, används en Synth_FREQUENCY modul.

#### Synth_FM_SOURCE

Synth_FM_SOURCE

Den här används för frekvensmodulering. Ange frekvensen med ingången frequency och anslut en annan signal till moduleringsingången. Ställ därefter in modlevel till någonting, säg 0,3. Frekvensen moduleras sedan med moduleringen. Prova det. Fungerar bra om man lägger till en återkoppling, vilket betyder att man tar en kombination av den fördröjda utsignalen från Synth_FM_SOURCE (man måste skicka det till en oscillator eftersom den bara fungerar som Synth_FREQUENCY) och någon annan signal för att få bra resultat.

Fungerar bra tillsammans med Synth_WAVE_SIN oscillatorer.

### Vågformer

#### Synth_WAVE_SIN

Synth_WAVE_SIN

Sinusoscillator. Ange en pos signal från Synth_FREQUENCY eller Synth_FM_SOURCE som insignal, och få en sinusvåg som utsignal. Signalen pos anger positionen i vågformen, området 0 .. 1 omvandlas till 0 .. 2*Pi internt.

#### Synth_WAVE_TRI

Synth_WAVE_TRI

Triangelvågsoscillator. Ange en pos signal från Synth_FREQUENCY eller Synth_FM_SOURCE som insignal, och få en triangelvåg som utsignal. Signalen pos anger positionen i vågformen, området 0 .. 1 omvandlas till 0 .. 2*Pi internt. Var försiktig. Insignalen måste vara i området 0 .. 1 för att utsignalen ska ge bra resultat.

#### Synth_NOISE

Synth_NOISE

Brusgenerator. Den här skapar en slumpmässig signal mellan -1 och 1.

#### Synth_WAVE_SQUARE

Synth_WAVE_SQUARE

Fyrkantvågsoscillator. Ange en pos signal från Synth_FREQUENCY eller Synth_FM_SOURCE som insignal, och få en fyrkantvåg som utsignal. Signalen pos anger positionen i vågformen, området 0 .. 1 omvandlas till 0 .. 2*Pi internt. Var försiktig. Insignalen måste vara i området 0 .. 1 för att utsignalen ska ge bra resultat.

#### Synth_WAVE_SOFTSAW

Synth_WAVE_SOFTSAW

Mjuk sågtandsvåg, som liknar Synth_WAVE_TRI oscillatorn till utseende. Ange en pos signal från Synth_FREQUENCY eller Synth_FM_SOURCE som insignal, och få en mjuk sågtandsvåg som utsignal. Signalen pos anger positionen i vågformen, området 0 .. 1 omvandlas till 0 .. 2*Pi internt. Var försiktig. Insignalen måste vara i området 0 .. 1 för att utsignalen ska ge bra resultat.

#### Synth_WAVE_PULSE

Synth_WAVE_PULSE

Pulsoscillator. Andemeningen med den här modulens liknar den rektangulära oscillatorn (Synth_WAVE_RECT), men den tillhandahåller ett anpassningsbart upp/ner-förhållande, genom parametern dutycycle. Ange en pos signal från Synth_FREQUENCY eller Synth_FM_SOURCE som insignal, och få en pulsvåg som utsignal. Signalen pos anger positionen i vågformen, området 0 .. 1 omvandlas till 0 .. 2*Pi internt. Var försiktig. Insignalen måste vara i området 0 .. 1 för att utsignalen ska ge bra resultat.

### Diverse

#### Synth_COMPRESSOR

Den här modulen reducerar det dynamiska omfånget hos en signal. Reduktion är till exempel användbart för att kompensera för de stora variationer i ljudstyrka när någon pratar i en mikrofon.

Så fort indatanivån överstiger en viss nivå (tröskeln) så reduceras signalen. Den multiplicerar helt enkelt allt ovanför tröskeln med ratio, som ska vara ett värde mellan 0 och 1. Till sist multipliceras hela signalen med utdatafaktorn.

Argumenten attack och release fördröjer starten och slutet på reduktionen. Använd det här om du till exempel fortfarande vill höra den starka början av en bastrumma. Argumenten anges i millisekunder, och en attack eller release på 0 ms är möjlig, men kan resultera i ett visst brus.

## Referens till visuella moduler

ATT GÖRA när visuella moduler är "färdigare".