# &MIDI;

## Översikt

&MIDI;-stödet i &arts; kan göra ett antal olika saker. För det första, tillåter det kommunikation 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.

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

Till slut, så utgör &arts; en utmärkt modulär synthesizer. 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.

## &MIDI;-hanteraren

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 Visa Visa midihanterare i menyn.

Till vänster ser man Midi-inmatning. 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 Midi-utmatning. 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.

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 Anslut med knappen nedanför. Koppla från 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).

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 Lägg till.

System midi port (OSS)

- Det här skapar ett nytt &arts;-objekt som kommunicerar med en extern midi-port.

  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 OSS-drivrutin (eller OSS/Free, som följer med &Linux;-kärnan) eller en ALSA-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 `/dev/midi` eller `/dev/midi00`.

  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 Information Ljud.

aRts syntes midi utmatning

- 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 `.arts`-filer med ett namn som börjar med `instrument_` visas här.

## Att använda &arts; & Brahms

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 `kmusic` CVS-modulen. Det finns också information om hur man skaffar &brahms; på aRts hemsida i avsnittet om nerladdning.

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 Lägg till aRts syntes midi utmatning.

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

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 ;-).

## midisend

`midisend` ä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

    % midisend -f /dev/midi00

som gör ungefär samma sak som att lägga till en &MIDI;-port i &artscontrol;. (Inte riktigt, därför att `midisend` skickar bara händelser). Skillnaden är att det är till exempel lätt att starta `midisend` på olika datorer (och på det sättet använda nätverkstransparens).

Det är också möjligt att låta `midisend` skicka data från `stdin`, vilket du kan använda för att skicka data från program som inte stöder &arts;, så här:

    % program_som_skickar_MIDI_händelser_på_standardutmatning | midisend -f -

## Att skapa instrument

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).

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.

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

- För att komma igång är det bekvämaste sättet att öppna `template_Instrument.arts` i Arts-byggaren.

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

- För att hantera parametern "pressed", är det praktiskt att använda Synth_ENVELOPE_ADSR, eller om en wav-fil med trumma spelas, spela bara upp den ändå och ignorera parametern.

- Strukturen ska indikera när den inte behövs längre med utgången done. Om done är 1, 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.

- Du bör döpa om din struktur till något namn som börjar med `instrument_`, som `instrument_piano.arts` - du bör spara filen med samma namn i katalogen `$`HOME`/arts/structures` (där aRts-byggaren normalt sparar filer).

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

- 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).

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

## Instrumentkartor

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.

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

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.

Ett bra exempel på det här är `arts_all`, som helt enkelt kombinerar alla instrument som levereras med &arts; i en karta. På så sätt behöver man bara ange att detta instrument 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.

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:

    ON [ villkor ...] DO structure=någon_struktur.arts

Villkoren kan vara ett eller flera av följande:

`pitch`

- 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 ``pitch`=`62`` eller ett intervall av tonhöjder, som ``pitch`=`60`-`72``. De möjliga tonhöjderna går mellan `0` och `127`.

`program`

- Programmet som är aktivt på kanalen som tonen spelas upp i. Oftast låter sequencern dig välja instrument via programinställningen. Enkla program eller intervall är tillåtna, dvs. ``program`=`3`` eller ``program`=`3`-`6``. Möjliga program går mellan `0` och `127`.

`channel`

- Kanalen som tonen skickas på. Enkla kanaler eller intervall är tillåtna, dvs. ``channel`=`0`` eller ``channel`=`0`-`8``. Möjliga kanaler går mellan `0` och `15`.

`velocity`

- Anslagsstyrkan (volymen) som tonen har. Enkla anslagsstyrkor (vem skulle använda det?) eller intervall är tillåtna, dvs. ``velocity`=`127`` eller ``velocity`=`64`-`127``. Möjliga anslagsstyrkor går mellan `0` och `127`.

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

    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

Som du ser, väljs strukturen beroende på programmet. För program 11, syns en trumkarta (med två poster), som spelar en deepdrum med C-5 (tonhöjd = 60), och en chirpdrum med C#5 (tonhöjd = 61).

För att kartfiler automatiskt ska synas i &artscontrol; som ett alternativ bland instrumenten, måste de heta `instrument_`någonting`.arts-map` och antingen finnas i din hemkatalog i `$`HOME`/arts/structures`, eller i &kde;-katalogen i `$`KDEDIR`/share/apps/artsbuilder/examples`. Strukturer som används av kartan kan antingen anges med en absolut sökväg, eller relativt till katalogen som kartfilen finns i.

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;.