<para>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. </para>
<para>Moduler delas upp i två kategorier. Syntesmoduler används för att implementera <quote>rörmokeriet</quote> 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. </para>
<para>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). </para>
<para>Den här dividerar signalen med en faktor. Du kan använda det här för att dividera en signal med en annan, eller ange invärde1 som 1, så får du inversen av invärde2 som utvärde. Försäkra dig om att invärde2 aldrig når 0, annars får du problem med division med noll. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>Anslut en <acronym>LFO</acronym>, 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 (<acronym>FX</acronym>). </para>
<para>En upplänk till en buss. Ange signaler till vänster och höger, och namnet på bussen som data ska skickas till på <quote>buss</quote> porten. Den kombinerade signalen från alla upplänkar med det här namnet hamnar på varje nerlänk på den <quote>bussen</quote>. </para>
<para>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. </para>
<para>Den här sortens fördröjning <emphasis>kan inte användas</emphasis> 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. </para>
<para>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. </para>
<para>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. </para>
<para>Det här sparar beräkningstid eftersom ingen interpolation görs, och är användbart för rekursiva strukturer. Se beskrivningen ovan (Synth_DELAY). </para>
<para>Du får den behandlade signalen som utvärde. När <acronym>ASDR</acronym>-enveloppen är klar, sätter den done till 1. Du kan använda det här för att tillhandahålla utgången <quote>done</quote> för ett instrument (som gör att instrumentstrukturen tas bort av &MIDI;-reläobjektet när ljudet väl har upphört). </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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). </para>
<para>Storleken på efterklangsignalen (dvs. den del av signalen som ska ändras av filtret, och orsaka ett <quote>vått</quote> ljud, dvs. ett <quote>efterklangsljud</quote>). </para>
<para>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). </para>
<para>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). </para>
<para>Tremolomodulen modulerar amplituden enligt en <acronym>LFO</acronym>-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. </para>
<para>[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 ;). ] </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>Parametern <emphasis>speed</emphasis> ä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). </para>
<para>Parametern <emphasis>frequency</emphasis> 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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>Spelar en sekvens av toner om och om igen. Tonerna anges i spårnotation, och separeras av semikolon. Ett exempel är <literal>A-3;C-4;E-4;C-4;</literal>. 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. </para>
<para>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. <literal>A-3:2;C-4:0.5;D-4:0.5;E-4;</literal> visar detta. Som du kan se, tenderar midi-tonsättningsprogram att ge mer bekvämlighet ;) </para>
<para>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). </para>
<para>Den här spelar en <literal role="extension">wav</literal>-fil. Den är bara tillgänglig om du har libaudiofile på datorn. Vågformsfilen spelas så fort modulen skapas. </para>
<para>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. </para>
<para>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. </para>
<para>Modulen Synth_PLAY-matar ut ljudsignalen till ljudkortet. Vänster och höger kanal ska innehålla <emphasis>normaliserad</emphasis> indata för kanalerna. Om indata inte är mellan -1 och 1, får man klippning. </para>
<para>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;. </para>
<para>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. </para>
<para>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. </para>
<para>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). </para>
<para>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 <emphasis>med full duplex aktiverad</emphasis>. </para>
<para>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). </para>
<para>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 <emphasis>title</emphasis>. 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 <emphasis>autoRestoreID</emphasis> också. </para>
<para>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). </para>
<para>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 <emphasis>title</emphasis>. 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 <emphasis>autoRestoreID</emphasis> också. </para>
<para>Modulen Synth_CAPTURE skriver en ljudsignal till en vågformsfil på hårddisken. Filen heter alltid <filename>/tmp/mcop-<replaceable>användarnamn</replaceable>/capture.wav</filename> </para>
<para>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. </para>
<para>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]. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>
<para>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 <emphasis>måste</emphasis> vara i området 0 .. 1 för att utsignalen ska ge bra resultat. </para>
<para>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 <emphasis>måste</emphasis> vara i området 0 .. 1 för att utsignalen ska ge bra resultat. </para>
<para>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 <emphasis>måste</emphasis> vara i området 0 .. 1 för att utsignalen ska ge bra resultat. </para>
<para>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 <emphasis>dutycycle</emphasis>. 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 <emphasis>måste</emphasis> vara i området 0 .. 1 för att utsignalen ska ge bra resultat. </para>
<para>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. </para>
<para>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. </para>
<para>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. </para>