<!-- <?xml version="1.0" ?>
<!DOCTYPE chapter PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd">
To validate or process this file as a standalone document, uncomment
this prolog. Be sure to comment it out again when you are done -->

<chapter id="midi">
<title
>&MIDI;</title>

<sect1 id="midi-overview">
<title
>Översikt</title>

<!-- what-to-say-here: aRts has three roles
  * moving midi events around between applications
  * abstracting the hardware
  * synthesizer -->

<para
>&MIDI;-stödet i &arts; kan göra ett antal olika saker. För det första, tillåter det <emphasis
>kommunikation</emphasis
> mellan olika delar av programvaran som producerar eller konsumerar &MIDI;-händelser. Om du till exempel har en sequencer och en samplingsenhet som båda använder &arts;, kan &arts; skicka &MIDI;-händelser från sequencern till samplingsenheten. </para>

<para
>För det andra, kan &arts; också hjälpa program att <emphasis
>växelverka med hårdvaran</emphasis
>. Om en programvarudel (till exempel samplingen) fungerar tillsammans med &arts;, kan den dessutom ta emot &MIDI;-händelser från ett externt &MIDI;-keyboard. </para>

<para
>Till slut, så utgör &arts; en utmärkt <emphasis
>modulär synthesizer</emphasis
>. Den är konstruerat att göra just detta. Man kan alltså bygga instrument av små moduler med aRts-byggaren, och sedan använda instrumenten för att komponera eller spela musik. Syntes betyder inte nödvändigtvis bara ren syntes, utan det finns moduler som kan användas för att spela upp samplingar. På så sätt kan &arts; vara både en samplingsenhet eller synt, och eftersom den är fullständigt modulär, är den mycket lätt att utöka, mycket lätt att experimentera med, kraftfull och flexibel. </para>
</sect1>

<sect1 id="midi-manager">
<title
>&MIDI;-hanteraren</title>
<!-- what-to-say-here:
  * how to use artscontrol - view midimanager
  * what does autorestore do? (not yet implemented - so not yet documented) -->

<para
>Den centrala komponenten i &arts; som håller reda på vilka program som är anslutna och hur midi-händelser ska skickas mellan dem är midi-hanteraren. För att se eller påverka vad den gör, starta artscontrol. Välj sedan <menuchoice
><guilabel
>Visa</guilabel
><guilabel
>Visa midihanterare</guilabel
> </menuchoice
> i menyn. </para>

<para
>Till vänster ser man <guilabel
>Midi-inmatning</guilabel
>. Där listas alla objekt som skapar &MIDI;-händelser, som en extern &MIDI;-port som skickar data från ett anslutet &MIDI;-keyboard, en sequencer som spelar en sång och så vidare. Till höger ser man <guilabel
>Midi-utmatning</guilabel
>. Där listas allting som konsumerar &MIDI;-händelser, som en simulerad samplingsenhet (programvara), eller den externa &MIDI;-porten som en hårdvarusamplingsenhet är ansluten till utanför din dator. Nya program, som en sequencer eller liknande, registrerar sig själva, så att listan ändras med tiden. </para>

<para
>Du kan ansluta ingångar och utgångar om du markerar en ingång i listan till vänster och en utgång till höger, och väljer <guilabel
>Anslut</guilabel
> med knappen nedanför. <guilabel
>Koppla från</guilabel
> fungerar på samma sätt. Du ser vad som är anslutet som små linjer mellan ingångar och utgångar, mitt i fönstret. Observera att du kan ansluta en ingång till mer än en utgång (och tvärtom). </para>

<para
>Program (som sequencern Brahms) läggs till av sig själv när de startas och tas bort från listan när de avslutas. Men du kan också lägga till nya enheter med menyn <guilabel
>Lägg till</guilabel
>. </para>

<variablelist>
<varlistentry>
<term
><guimenuitem
>System midi port (OSS)</guimenuitem
></term>
<listitem>
<para
>Det här skapar ett nytt  &arts;-objekt som kommunicerar med en extern midi-port. </para>

<para
>Eftersom externa midi-portar både kan skicka och ta emot data, så läggs både en ingång och utgång till med det här valet. Med &Linux;, ska du antingen ha en <acronym
>OSS</acronym
>-drivrutin (eller <acronym
>OSS</acronym
>/Free, som följer med &Linux;-kärnan) eller en <acronym
>ALSA</acronym
>-drivrutin installerad för ditt ljudkort, för att det här ska fungera. Du blir tillfrågad om enhetens namn. Det här är oftast <filename class="devicefile"
>/dev/midi</filename
> eller <filename class="devicefile"
>/dev/midi00</filename
>. </para>

<para
>Om du har mer än en &MIDI;-enhet eller en &MIDI;-återkopplingsenhet installerad, kan det dock finnas fler alternativ. För att visa information om midi-portar, starta inställningscentralen, och välj <menuchoice
><guilabel
>Information</guilabel
> <guilabel
>Ljud</guilabel
></menuchoice
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><guimenuitem
>aRts syntes midi utmatning</guimenuitem
></term>
<listitem>
<para
>Det här lägger till en ny &MIDI;-utgång med ett &arts; syntinstrument. Om du väljer menyalternativet, dyker en dialogruta upp som låter dig ange ett instrument. Du kan skapa nya instrument med aRts-byggaren. Alla <literal role="extension"
>.arts</literal
>-filer med ett namn som börjar med <filename
>instrument_</filename
> visas här. </para>
</listitem>
</varlistentry>
</variablelist>

</sect1>

<sect1 id="brahms">
<title
>Att använda &arts; &amp; Brahms</title>

<para
>I själva verket är det riktigt lätt att komma igång. Du behöver en version av Brahms som fungerar med &kde; 2.1, som finns i <literal
>kmusic</literal
> <acronym
>CVS</acronym
>-modulen. Det finns också information om hur man skaffar &brahms; på <ulink url="http://www.arts-project.org/"
>aRts hemsida</ulink
> i avsnittet om nerladdning. </para>

<para
>När du har startat programmet, syns det i &MIDI;-hanteraren. Om du vill använda syntes, lägg helt enkelt till ett &MIDI;-instrument med <menuchoice
><guilabel
>Lägg till</guilabel
><guilabel
>aRts syntes midi utmatning</guilabel
></menuchoice
>. </para>

<para
>Välj ett instrument (till exempel <guilabel
>organ2</guilabel
>). Anslut instrumentet med knappen <guilabel
>Anslut</guilabel
>. Därefter kan du börja komponera i &brahms;, och resultatet syntetiseras med &arts;. </para>

<para
>Det är oftast en god ide att ha &artscontrol;-fönstret öppet, och se till att volymen inte är för hög (ljudkvaliteten blir sämre när staplarna når den övre gränsen). Nu kan du börja skriva en ny &arts; demo, och när du är klar kan du få den publicerad på aRts-project.org ;-). </para>

<!-- TODO: how to do more than one instrument in Brahms (hm, not implemented
     yet, not documented yet), how to use samples, mapping and so on. These
  	 things need to be implemented, too. -->

</sect1>

<sect1 id="midisend">
<title
>midisend</title>

<para
><command
>midisend</command
>  är ett litet program som låter dig skicka &MIDI;-händelser från skalet. Det registreras som en klient precis som alla andra program. Det enklaste sättet att använda det är att skriva <screen
><prompt
>&percnt;</prompt
> <userinput
><command
>midisend</command
> <option
>-f</option
> <parameter
><replaceable
>/dev/midi00</replaceable
></parameter
></userinput
> </screen
> som gör ungefär samma sak som att lägga till en  &MIDI;-port i &artscontrol;. (Inte riktigt, därför att <command
>midisend</command
> skickar bara händelser). Skillnaden är att det är till exempel lätt att starta <command
>midisend</command
> på olika datorer (och på det sättet använda nätverkstransparens). </para>

<para
>Det är också möjligt att låta <command
>midisend</command
> skicka data från <filename class="devicefile"
>stdin</filename
>, vilket du kan använda för att skicka data från program som inte stöder &arts;, så här: <screen
><prompt
>&percnt;</prompt
> <userinput
><command
><replaceable
>program_som_skickar_MIDI_händelser_på_standardutmatning</replaceable
></command
> | <command
>midisend</command
> <option
>-f</option
> <option
><replaceable
>-</replaceable
></option
></userinput
></screen>
<!-- TODO: document all options -->
</para>

</sect1>

<sect1 id="midi-creating-instruments">
<title
>Att skapa instrument</title>
 
<para
>Sättet som &arts; utför midi-syntes är följande: Det finns strukturer som har ett antal ingångar, där de hämtar frekvensen, anslagsstyrkan (volymen) och en parameter som anger om tangenten fortfarande är nertryckt. Strukturen ska nu syntetisera exakt den tonen med den volymen, och reagera på parametern pressed (där pressed = 1 betyder att användaren håller nere tangenten och pressed = 0 betyder att användaren har släppt tangenten). </para>

<para
>När &MIDI;-händelser anländer, skapar &arts; nya strukturer för tonerna efter behov, anger parametrarna, och rensar bort dem när de är klara. </para>

<para
>För att skapa och använda en sådan struktur, ska du göra följande: </para>

<itemizedlist>
<listitem>
<para
>För att komma igång är det bekvämaste sättet att öppna <filename
>template_Instrument.arts</filename
> i Arts-byggaren. </para>

<para
>Det här kan åstadkommas genom att använda <menuchoice
><guimenu
>Arkiv</guimenu
><guimenuitem
>Öppna exempel...</guimenuitem
></menuchoice
> och välja <guimenuitem
>template_Instrument</guimenuitem
> i fildialogrutan. Det här skapar en tom struktur med de nödvändiga parametrarna, som du bara behöver <quote
>fylla i</quote
>. </para>
</listitem>

<listitem>
<para
>För att hantera parametern "pressed", är det praktiskt att använda Synth&lowbar;ENVELOPE&lowbar;ADSR, eller om en wav-fil med trumma spelas, spela bara upp den ändå och ignorera parametern. </para>
</listitem>

<listitem>
<para
>Strukturen ska indikera när den inte behövs längre med utgången <quote
>done</quote
>. Om done är <returnvalue
>1</returnvalue
>, antar &arts; att strukturen kan tas bort. Praktiskt nog så tillhandahåller ADSR-enveloppen en parameter som anger när den är färdig, så du behöver bara ansluta den till done-utgången för strukturen. </para>
</listitem>

<listitem>
<para
>Du bör döpa om din struktur till något namn som börjar med <filename
>instrument_</filename
>, som <filename
>instrument_piano.arts</filename
> - du bör spara filen med samma namn i katalogen <filename class="directory"
>$<envar
>HOME</envar
>/arts/structures</filename
> (där aRts-byggaren normalt sparar filer). </para>
</listitem>

<listitem>
<para
>Till sist, när du väl har sparat den, kan du använda den med &artscontrol; i &MIDI;-hanteraren.</para>
</listitem>

<listitem>
<para
>Och din struktur ska förstås spela ljuddata som den skapar via vänster och höger utgång för strukturen, som sedan spelas med ljudhanteraren (du kan se det här i &artscontrol;), så att du till slut kan höra ljudet (eller efterbehandla det med ljudeffekter). </para>
</listitem>
</itemizedlist>

<para
>Ett bra sätt att lära sig hur man skapar instrument är att öppna ett befintligt instrument med <menuchoice
><guilabel
>Arkiv</guilabel
><guilabel
>Öppna Exempel</guilabel
> </menuchoice
> och se hur det fungerar ;) </para>
</sect1>

<sect1 id="mapped-instruments">
<title
>Instrumentkartor</title>

<para
>Instrumentkartor är instrument som beter sig olika beroende på tonhöjden, programmet, kanalen eller anslagsstyrkan. Man kan till exempel skapa ett piano med fem oktaver, och använda en sampling för varje oktav (med tonhöjden förskjuten i motsvarande mån). Det här låter mycket bättre än att bara använda en sampling. </para>

<para
>Man kan också bygga en trumkarta, som spelar en särskild trumsampling för varje tangent. </para>

<para
>Till sist är det mycket användbart om man kombinerar helt olika ljud i en instrumentkarta för olika program. På det här sättet kan man använda sin sequencer, externa keyboard eller en annan &MIDI;-källa för att byta mellan ljud utan att behöva manipulera &arts; under arbetets gång. </para>

<para
>Ett bra exempel på det här är <filename
>arts_all</filename
>, som helt enkelt kombinerar alla instrument som levereras med &arts; i en karta. På så sätt behöver man bara ange att detta <quote
>instrument</quote
> ska användas en gång i &artscontrol;, och sedan kan man komponera en hel sång i en sequencer utan att överhuvudtaget bry sig om &arts;. Behövs ett annat ljud? Ändra helt enkelt programmet i sequencern, och &arts; tillhandahåller ett nytt ljud. </para>

<para
>Att skapa sådana kartor är ganska rättframt. Man behöver bara skapa en textfil, och skriva regler som ser ut så här: </para>

<programlisting
>ON <replaceable
>[ villkor ...]</replaceable
> DO structure=<replaceable
>någon_struktur</replaceable
>.arts
</programlisting>

<para
>Villkoren kan vara ett eller flera av följande: </para>

<variablelist>

<varlistentry>
<term
><option
>pitch</option
></term>

<listitem>
<para
>Tonhöjden som spelas. Man använder det här om man vill dela instrumentet beroende på tonhöjd. I vårt ursprungliga exempel, skulle ett piano som använder olika samplingar för olika oktaver använda det här som villkor. Man kan ange en enkel tonhöjd, som <userinput
><option
>pitch</option
>=<parameter
>62</parameter
></userinput
> eller ett intervall av tonhöjder, som <userinput
><option
>pitch</option
>=<parameter
>60</parameter
>-<parameter
>72</parameter
></userinput
>. De möjliga tonhöjderna går mellan <parameter
>0</parameter
> och <parameter
>127</parameter
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>program</option
></term>
<listitem>
<para
>Programmet som är aktivt på kanalen som tonen spelas upp i. Oftast låter sequencern dig välja <quote
>instrument</quote
> via programinställningen. Enkla program eller intervall är tillåtna, dvs. <userinput
><option
>program</option
>=<parameter
>3</parameter
></userinput
> eller <userinput
><option
>program</option
>=<parameter
>3</parameter
>-<parameter
>6</parameter
></userinput
>. Möjliga program går mellan <parameter
>0</parameter
> och <parameter
>127</parameter
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><option
>channel</option
></term>
<listitem>
<para
>Kanalen som tonen skickas på. Enkla kanaler eller intervall är tillåtna, dvs. <userinput
><option
>channel</option
>=<parameter
>0</parameter
></userinput
> eller <userinput
><option
>channel</option
>=<parameter
>0</parameter
>-<parameter
>8</parameter
></userinput
>. Möjliga kanaler går mellan <parameter
>0</parameter
> och <parameter
>15</parameter
>. </para>
</listitem>

</varlistentry>
<varlistentry>
<term
><option
>velocity</option
></term>
<listitem>
<para
>Anslagsstyrkan (volymen) som tonen har. Enkla anslagsstyrkor (vem skulle använda det?) eller intervall är tillåtna, dvs. <userinput
><option
>velocity</option
>=<parameter
>127</parameter
></userinput
> eller <userinput
><option
>velocity</option
>=<parameter
>64</parameter
>-<parameter
>127</parameter
></userinput
>. Möjliga anslagsstyrkor går mellan <parameter
>0</parameter
> och <parameter
>127</parameter
>. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>Ett fullständigt exempel för en karta kan vara (det här kommer från den nuvarande <filename
>instrument_arts_all.arts-map</filename
>): </para>

<programlisting
>ON program=0 DO structure=instrument_tri.arts
ON program=1 DO structure=instrument_organ2.arts
ON program=2 DO structure=instrument_slide1.arts
ON program=3 DO structure=instrument_square.arts
ON program=4 DO structure=instrument_neworgan.arts
ON program=5 DO structure=instrument_nokind.arts
ON program=6 DO structure=instrument_full_square.arts
ON program=7 DO structure=instrument_simple_sin.arts
ON program=8 DO structure=instrument_simple_square.arts
ON program=9 DO structure=instrument_simple_tri.arts
ON program=10 DO structure=instrument_slide.arts
ON program=11 pitch=60 DO structure=instrument_deepdrum.arts
ON program=11 pitch=61 DO structure=instrument_chirpdrum.arts
</programlisting>

<para
>Som du ser, väljs strukturen beroende på programmet. För program 11, syns en <quote
>trumkarta</quote
> (med två poster), som spelar en <quote
>deepdrum</quote
> med C-5 (tonhöjd = 60), och en <quote
>chirpdrum</quote
> med C#5 (tonhöjd = 61). </para>
 
<para
>För att kartfiler automatiskt ska synas i &artscontrol; som ett alternativ bland instrumenten, måste de heta <filename
>instrument_<replaceable
>någonting</replaceable
>.arts-map</filename
> och antingen finnas i din hemkatalog i <filename class="directory"
>$<envar
>HOME</envar
>/arts/structures</filename
>, eller i &kde;-katalogen i <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/artsbuilder/examples</filename
>. Strukturer som används av kartan kan antingen anges med en absolut sökväg, eller relativt till katalogen som kartfilen finns i. </para>

<para
>Att utöka arts_all map eller till och med göra en fullständigt generell &MIDI;-karta för &arts; är en bra idé för att göra &arts; lättare att använda direkt som det är. Fundera gärna på att bidra med intressanta instrument som du skapar, så att de kan inkluderas i framtida versioner av &arts;. </para>
</sect1>

<!-- TODO: Maybe helpful
 * using an external keyboard
 * loopback midi device

<sect1 id="quick-start">
<title
>Quick Start</title>
 
</sect1>
<sect1 id="internal-details">
<title
>More Internal Details</title>
 
</sect1>

<sect1 id="other-considerations">
<title
>Other Considerations</title>
 
</sect1>
-->

</chapter>
