# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2001-02-09 01:25+0100\n"
"PO-Revision-Date: 2002-03-16 17:05CET\n"
"Last-Translator: Stefan Asserhäll <stefan.asserhall@telia.com>\n"
"Language-Team: Svenska <sv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 0.9.6\n"

#: index.docbook:7
#, no-c-format
msgid "&arts; in Detail"
msgstr "&arts; i detalj"

#: index.docbook:10
#, no-c-format
msgid "Architecture"
msgstr "Arkitektur"

#: index.docbook:12
#, no-c-format
msgid "The &arts; structure."
msgstr "&arts; strukturer."

#: index.docbook:21
#, no-c-format
msgid "Modules &amp; Ports"
msgstr "Moduler &amp; portar"

#: index.docbook:23
#, no-c-format
msgid ""
"The idea of &arts; is, that synthesis can be done using small modules, which "
"only do one thing, and then recombine them in complex structures. The small "
"modules normally have inputs, where they can get some signals or parameters, "
"and outputs, where they produce some signals."
msgstr ""
"Idén med &arts; är att syntes kan göras med små moduler, som bara gör "
"en enda sak, och sedan kombinera dem i komplexa strukturer. De små "
"modulerna har normalt ingångar, där de kan ta emot några signaler eller "
"parametrar, och utgångar där de producerar några signaler."

#: index.docbook:31
#, no-c-format
msgid ""
"One module (Synth&lowbar;ADD) for instance just takes the two signals at "
"it's input and adds them together. The result is available as output signal. "
"The places where modules provide their input/output signals are called ports."
msgstr ""
"En modul (Synth&lowbar;ADD) tar till exempel bara de två signalerna på "
"sina ingångar och adderar dem. Resultatet är tillgängligt som en "
"utsignal. De ställen där moduler tillhandahåller sina in- eller "
"utsignaler kallas portar."

#: index.docbook:41
#, no-c-format
msgid "Structures"
msgstr "Strukturer"

#: index.docbook:43
#, no-c-format
msgid ""
"A structure is a combination of connected modules, some of which may have "
"parameters coded directly to their input ports, others which may be "
"connected, and others, which are not connected at all."
msgstr ""
"En struktur är en kombination av ihopkopplade moduler, där några kan ha "
"parametrar som är direktkodade på deras inportar, andra kan vara "
"ihopkopplade, och en del kan vara helt oanslutna."

#: index.docbook:49
#, no-c-format
msgid ""
"What you can do with &artsbuilder; is describing structures. You describe, "
"which modules you want to be connected with which other modules. When you "
"are done, you can save that structure description to a file, or tell &arts; "
"to create such a structure you described (Execute)."
msgstr ""
"Vad du kan göra med aRts-byggaren är att beskriva strukturer. Du beskriver "
"vilka moduler du vill ska kopplas ihop med vilka andra moduler. När du är "
"klar, kan du spara strukturbeskrivningen i en fil, eller be &arts; att skapa "
"(köra) den strukturen som du beskrivit."

#: index.docbook:56
#, no-c-format
msgid "Then you'll probably hear some sound, if you did everything the right way."
msgstr ""
"Därefter hör du förmodligen något ljud, om du har gjort allt på rätt "
"sätt."

#: index.docbook:73
#, no-c-format
msgid "Latency"
msgstr "Latenstid"

#: index.docbook:76
#, no-c-format
msgid "What Is Latency?"
msgstr "Vad är latenstid?"

#: index.docbook:78
#, no-c-format
msgid ""
"Suppose you have an application called <quote>mousepling</quote>"
"(that should make a <quote>pling</quote>"
" sound if you click on a button. The latency is the time between your finger "
"clicking the mouse button and you hearing the pling. The latency in this "
"setup composes itself out of certain latencies, that have different causes."
msgstr ""
"Anta att du har ett program som heter <quote>muspling</quote> (som ska avge "
"ett <quote>pling</quote> ljud om du klickar på en musknapp). Latenstiden "
"är tiden mellan ditt finger trycker på musknappen och du hör plinget. "
"Latenstiden för det här scenariot består av flera olika latenstider, som "
"har olika orsaker."

#: index.docbook:89
#, no-c-format
msgid "Latency in Simple Applications"
msgstr "Latenstid i enkla program"

#: index.docbook:91
#, no-c-format
msgid "In this simple application, latency occurs at these places:"
msgstr "För det här enkla programmet uppstår latenstiden på följande ställen:"

#: index.docbook:95
#, no-c-format
msgid ""
"The time until the kernel has notified the X11 server that a mouse button "
"was pressed."
msgstr "Tiden till kärnan har meddelat X11-servern att musknappen har tryckts ner."

#: index.docbook:95
#, no-c-format
msgid ""
"The time until the X11 server has notified your application that a mouse "
"button was pressed."
msgstr ""
"Tiden till X11-servern har meddelat ditt program att musknappen har tryckts "
"ner."

#: index.docbook:95
#, no-c-format
msgid ""
"The time until the mousepling application has decided that this button is "
"worth playing a pling."
msgstr ""
"Tiden till muspling-programmet har bestämt att den här knappen var värd "
"att få ett pling spelat."

#: index.docbook:95
#, no-c-format
msgid ""
"The time it takes the mousepling application to tell the soundserver that it "
"should play a pling."
msgstr ""
"Tiden det tar för muspling-programmet att tala om för ljudservern att den "
"ska spela ett pling."

#: index.docbook:95
#, no-c-format
msgid ""
"The time it takes for the pling (which the soundserver starts mixing to the "
"other output at once) to go through the buffered data, until it really "
"reaches the position where the soundcard plays."
msgstr ""
"Tiden det tar för plinget (som ljudservern börjar mixa med övrig "
"utmatning omedelbart) att ta sig igenom buffrad data, till det verkligen "
"når stället där ljudkortet spelar."

#: index.docbook:95
#, no-c-format
msgid "The time it takes the pling sound from the speakers to reach your ear."
msgstr "Tiden det tar för pling-ljudet att gå från högtalarna till dina öron."

#: index.docbook:140
#, no-c-format
msgid ""
"The first three items are latencies external to &arts;. They are "
"interesting, but beyond the scope of this document. Nevertheless be aware "
"that they exist, so that even if you have optimized everything else to "
"really low values, you may not necessarily get exactly the result you "
"calculated."
msgstr ""
"De första tre punkterna är latenstid utanför &arts;. De är intressanta, "
"men utanför det här dokumentets omfattning. Hur som helst, var medveten om "
"att de finns, så att även om du har optimerat allting annat till verkligt "
"små värden, så kanske du inte nödvändigtvis får exakt det resultat du "
"förväntar dig."

#: index.docbook:148
#, no-c-format
msgid ""
"Telling the server to play something involves usually one single &MCOP; "
"call. There are benchmarks which confirm that, on the same host with unix "
"domain sockets, telling the server to play something can be done about 9000 "
"times in one second with the current implementation. I expect that most of "
"this is kernel overhead, switching from one application to another. Of "
"course this value changes with the exact type of the parameters. If you "
"transfer a whole image with one call, it will be slower than if you transfer "
"only one long value. For the returncode the same is true. However for "
"ordinary strings (such as the filename of the <literal "
"role=\"extension\">wav</literal> file to play) this shouldn't be a problem."
msgstr ""
"Att be servern att spela någonting innebär oftast bara ett enda "
"&MCOP;-anrop. Det finns mätningar som bekräftar att det går att be "
"servern att spela någonting 9000 gånger per sekund med den nuvarande "
"implementeringen, på samma värddator med Unix domänuttag. Jag antar att "
"det mesta av det här är kärnans omkostnad, för att byta från en process "
"till en annan. Naturligtvis ändras det här värdet med de exakta typerna "
"på parametrarna. Om man överför en hel bild med ett anrop, blir det "
"långsammare än om man bara överför ett \"long\" värde. Detsamma är "
"sant för returvärdet. För vanliga strängar (som filnamnet på <literal "
"role=\"extension\">wav</literal>-filen som ska spelas) ska inte det här "
"vara ett problem."

#: index.docbook:162
#, no-c-format
msgid ""
"That means, we can approximate this time with 1/9000 sec, that is below 0.15 "
"ms. We'll see that this is not relevant."
msgstr ""
"Det här betyder att vi kan approximera den här tiden med 1/9000 sekund, "
"det vill säga under 0,15 ms. Vi kommer att se att detta inte är relevant."

#: index.docbook:167
#, no-c-format
msgid ""
"Next is the time between the server starting playing and the soundcard "
"getting something. The server needs to do buffering, so that when other "
"applications are running, such as your X11 server or "
"<quote>mousepling</quote>"
" application no dropouts are heard. The way this is done under &Linux; is "
"that there are a number fragments of a size. The server will refill "
"fragments, and the soundcard will play fragments."
msgstr ""
"Därefter kommer tiden efter servern börjar spela och ljudkortet tar emot "
"någonting. Servern måste buffra data, så att inga pauser hörs när andra "
"program, som din X11-server eller <quote>muspling</quote>"
"-programmet,  kör. Det sätt som detta hanteras på &Linux; är att det "
"finns ett antal fragment av en viss storlek. Servern fyller på fragment, "
"och ljudkortet spelar fragment."

#: index.docbook:177
#, no-c-format
msgid ""
"So suppose there are three fragments. The server refills the first, the "
"soundcard starts playing it. The server refills the second. The server "
"refills the third. The server is done, other applications can do something "
"now."
msgstr ""
"Så antag att det finns tre fragment. Servern fyller det första och "
"ljudkortet börjar spela det. Servern fyller det andra. Servern fyller det "
"tredje. Servern är klar och andra program kan nu göra någonting."

#: index.docbook:184
#, no-c-format
msgid ""
"As the soundcard has played the first fragment, it starts playing the second "
"and the server starts refilling the first. And so on."
msgstr ""
"När ljudkortet har spelat det första fragmentet, börjar det spela det "
"andra och servern börjar fylla det första igen, och så vidare."

#: index.docbook:189
#, no-c-format
msgid ""
"The maximum latency you get with all that is (number of fragments)*(size of "
"each fragment)/(samplingrate * (size of each sample)). Suppose we assume "
"44kHz stereo, and 7 fragments a 1024 bytes (the current aRts defaults), we "
"get 40 ms."
msgstr ""
"Den maximala latenstiden du får med allt detta är (antal fragment) * "
"(storlek på varje fragment) / (samplingsfrekvens * (storlek på varje "
"sampling)). Om vi antar 44 kHz stereo, och sju fragment på 1024 byte (de "
"nuvarande förvalda inställningarna i aRts), så får vi 40 ms."

#: index.docbook:196
#, no-c-format
msgid ""
"These values can be tuned according to your needs. However, the "
"<acronym>CPU</acronym> usage increases with smaller latencies, as the sound "
"server needs to refill the buffers more often, and in smaller parts. It is "
"also mostly impossible to reach better values without giving the soundserver "
"realtime priority, as otherwise you'll often get drop-outs."
msgstr ""
"De här värdena kan anpassas enligt dina behov. "
"<acronym>CPU</acronym>-användningen ökar dock med mindre latenstider, "
"eftersom ljudservern måste fylla på buffrarna oftare, och med mindre "
"delar. Det är också oftast omöjligt att nå bättre värden utan att ge "
"ljudservern realtidsprioritet, eftersom man annars ofta får pauser."

#: index.docbook:205
#, no-c-format
msgid ""
"However, it is realistic to do something like 3 fragments with 256 bytes "
"each, which would make this value 4.4 ms. With 4.4ms delay the idle "
"<acronym>CPU</acronym>"
" usage of &arts; would be about 7.5%. With 40ms delay, it would be about 3% "
"(of a PII-350, and this value may depend on your soundcard, kernel version "
"and others)."
msgstr ""
"Det är i alla fall realistiskt att göra någonting i stil med 3 fragment "
"med 256 byte vardera, som skulle ändra det här värdet till 4,4 ms. Med "
"4,4 ms fördröjning skulle &arts; <acronym>CPU</acronym>-användning vara "
"ungefär 7,5 %. Med en 40 ms fördröjning, skulle den vara ungefär 3 % "
"(för en PII-350, och värdet kan bero på ditt ljudkort, version av kärnan "
"och annat)."

#: index.docbook:213
#, no-c-format
msgid ""
"Then there is the time it takes the pling sound to get from the speakers to "
"your ear. Suppose your distance from the speakers is 2 meters. Sound travels "
"at a speed of 330 meters per second. So we can approximate this time with 6 "
"ms."
msgstr ""
"Så är det tiden som det tar för pling-ljudet att gå från högtalarna "
"till dina öron. Antag att ditt avstånd från högtalarna är 2 meter. Ljud "
"rör sig med hastigheten 330 meter per sekund. Så vi kan uppskatta den här "
"tiden till 6 ms."

#: index.docbook:223
#, no-c-format
msgid "Latency in Streaming Applications"
msgstr "Latenstid i program med ljudflöden"

#: index.docbook:225
#, no-c-format
msgid ""
"Streaming applications are those that produce their sound themselves. Assume "
"a game, which outputs a constant stream of samples, and should now be "
"adapted to replay things via &arts;. To have an example: when I press a key, "
"the figure which I am playing jumps, and a boing sound is played."
msgstr ""
"Program med ljudflöden är de som skapar sitt ljud själva. Tänk dig ett "
"spel som skickar ett konstant flöde med samplingar, och nu ska anpassas att "
"spela upp ljud via &arts;. Som ett exempel: när jag trycker på en tangent "
"så hoppar figuren som jag använder, och ett bång-ljud spelas upp."

#: index.docbook:233
#, no-c-format
msgid ""
"First of all, you need to know how &arts; does streaming. Its very similar "
"to the I/O with the soundcard. The game sends some packets with samples to "
"the sound server. Lets say three packets. As soon as the sound server is "
"done with the first packet, it sends a confirmation back to the game that "
"this packet is done."
msgstr ""
"Först så måste du veta hur &arts; hanterar strömmar. Det är mycket likt "
"I/O med ljudkortet. Spelet skickar några paket med samplingar till "
"ljudservern, låt oss anta tre stycken. Så fort som ljudservern är klar "
"med det första paketet, skickar det en bekräftelse tillbaka till spelet "
"att det paketet är klart."

#: index.docbook:241
#, no-c-format
msgid ""
"The game creates another packet of sound and sends it to the server. "
"Meanwhile the server starts consuming the second sound packet, and so on. "
"The latency here looks similar like in the simple case:"
msgstr ""
"Spelet skapar ytterligare ett ljudpaket och skickar det till servern. Under "
"tiden börjar servern konsumera det andra ljudpaketet, och så vidare. "
"Latenstiden här liknar den i det enklare fallet:"

#: index.docbook:247
#, no-c-format
msgid "The time until the kernel has notified the X11 server that a key was pressed."
msgstr "Tiden till kärnan har meddelat X11-servern att en knapp har tryckts ner."

#: index.docbook:247
#, no-c-format
msgid "The time until the X11 server has notified the game that a key was pressed."
msgstr "Tiden till X11-servern har meddelat spelet att en knapp har tryckts ner."

#: index.docbook:247
#, no-c-format
msgid "The time until the game has decided that this key is worth playing a boing."
msgstr ""
"Tiden till spelet har bestämt att den här knappen var värd att få ett "
"bång spelat."

#: index.docbook:247
#, no-c-format
msgid ""
"The time until the packet of sound in which the game has started putting the "
"boing sound is reaching the sound server."
msgstr ""
"Tiden till ljudpaketet som spelet har börjat stoppa in bång-ljudet i når "
"ljudservern."

#: index.docbook:247
#, no-c-format
msgid ""
"The time it takes for the boing (which the soundserver starts mixing to the "
"other output at once) to go through the buffered data, until it really "
"reaches the position where the soundcard plays."
msgstr ""
"Tiden det tar för bånget (som ljudservern börjar mixa med övrig "
"utmatning omedelbart) att ta sig igenom buffrad data, till det verkligen "
"når stället där ljudkortet spelar."

#: index.docbook:247
#, no-c-format
msgid "The time it takes the boing sound from the speakers to reach your ear."
msgstr "Tiden det tar för bång-ljudet från högtalarna att nå dina öron."

#: index.docbook:293
#, no-c-format
msgid "The external latencies, as above, are beyond the scope of this document."
msgstr ""
"De externa latenstiderna, som ovan, är utanför det här dokumentets "
"omfattning."

#: index.docbook:297
#, no-c-format
msgid ""
"Obviously, the streaming latency depends on the time it takes all packets "
"that are used for streaming to be played once. So it is (number of "
"packets)*(size of each packet)/(samplingrate * (size of each sample))"
msgstr ""
"Det är uppenbart att latenstiden för strömmar beror på tiden det tar "
"för alla paket som används att spelas en gång. Så den är (antal paket) "
"* (storlek på varje paket) / (samplingsfrekvensen * (storlek på varje "
"sampling))."

#: index.docbook:303
#, no-c-format
msgid ""
"As you see that is the same formula as applies for the fragments. However "
"for games, it makes no sense to do such small delays as above. I'd say a "
"realistic configuration for games would be 2048 bytes per packet, use 3 "
"packets. The resulting latency would be 35ms."
msgstr ""
"Som du ser är detta samma formel som gäller för fragmenten. För spel "
"finns det dock ingen anledning att ha så korta fördröjningar som ovan. "
"Jag skulle vilja säga att ett realistiskt exempel för ett spel skulle vara "
"2048 byte per paket, använd 3 paket. Latenstidsresultatet skulle då vara "
"35 ms."

#: index.docbook:310
#, no-c-format
msgid ""
"This is based on the following: assume that the game renders 25 frames per "
"second (for the display). It is probably safe to assume that you won't "
"notice a difference of sound output of one frame. Thus 1/25 second delay for "
"streaming is acceptable, which in turn means 40ms would be okay."
msgstr ""
"Det här är baserat på följande: antag att ett spel renderar 25 bilder "
"per sekund (för skärmen). Det är antagligen helt säkert att anta att en "
"skillnad på en bild för ljudutmatningen inte skulle märkas. Därför är "
"1/25 sekunds fördröjning för ljudflöden acceptabelt, vilket i sin tur "
"betyder att 40 ms skulle vara ok."

#: index.docbook:318
#, no-c-format
msgid ""
"Most people will also not run their games with realtime priority, and the "
"danger of drop-outs in the sound is not to be neglected. Streaming with 3 "
"packets a 256 bytes is possible (I tried that) - but causes a lot of "
"<acronym>CPU</acronym> usage for streaming."
msgstr ""
"De flesta personer kör inte heller sina spel med realtidsprioritet, och "
"faran med pauser i ljudet kan inte bortses ifrån. Strömmar med 3 paket på "
"256 byte är möjliga (jag provade det) - men orsakar mycket "
"<acronym>CPU</acronym>-användning för strömhantering."

#: index.docbook:325
#, no-c-format
msgid "For server side latencies, you can calculate these exactly as above."
msgstr "Latenstider på serversidan kan du beräkna precis som ovan."

#: index.docbook:332
#, no-c-format
msgid "Some <acronym>CPU</acronym> usage considerations"
msgstr "Några <acronym>CPU</acronym>-användningshänsyn"

#: index.docbook:334
#, no-c-format
msgid ""
"There are a lot of factors which influence _<acronym>CPU</acronym> usage in "
"a complex scenario, with some streaming applications and some others, some "
"plugins on the server etc. To name a few:"
msgstr ""
"Det finns många faktorer som påverkar <acronym>CPU</acronym>"
"-användning i ett komplext scenario, med några program med ljudflöden och "
"några andra program, några insticksprogram i servern, etc. För att ange "
"några få:"

#: index.docbook:340
#, no-c-format
msgid "Raw <acronym>CPU</acronym> usage by the calculations necessary."
msgstr "Rå <acronym>CPU</acronym>-användning för de nödvändiga beräkningarna."

#: index.docbook:340
#, no-c-format
msgid ""
"&arts; internal scheduling overhead - how &arts; decides when which module "
"should calculate what."
msgstr ""
"&arts; interna schemaläggningsomkostnad - hur &arts; bestämmer när vilken "
"modul ska beräkna vad."

#: index.docbook:340
#, no-c-format
msgid "Integer to float conversion overhead."
msgstr "Omkostnad för konvertering av heltal till flyttal."

#: index.docbook:340
#, no-c-format
msgid "&MCOP;0 protocol overhead."
msgstr "&MCOP; protokollomkostnad."

#: index.docbook:340
#, no-c-format
msgid "Kernel: process/context switching."
msgstr "Kärnans process/sammanhangsbyte."

#: index.docbook:340
#, no-c-format
msgid "Kernel: communication overhead"
msgstr "Kärnans kommunikationsomkostnad."

#: index.docbook:379
#, no-c-format
msgid ""
"For raw <acronym>CPU</acronym> usage for calculations, if you play two "
"streams, simultaneuosly you need to do additions. If you apply a filter, "
"some calculations are involved. To have a simplified example, adding two "
"streams involves maybe four <acronym>CPU</acronym>"
" cycles per addition, on a 350Mhz processor, this is 44100*2*4/350000000 = "
"0.1% <acronym>CPU</acronym> usage."
msgstr ""
"För beräkning av rå <acronym>CPU</acronym>-användning, om du spelar upp "
"två strömmar samtidigt måste du göra additioner. Om du applicerar ett "
"filter, är vissa beräkningar inblandade. För att ta ett förenklat "
"exempel, att addera två strömmar kräver kanske fyra "
"<acronym>CPU</acronym>-cykler per addition, på en 350 MHz processor är "
"detta 44100 * 2 * 4 / 350000000 = 0,1 % <acronym>CPU</acronym>-användning."

#: index.docbook:388
#, no-c-format
msgid ""
"&arts; internal scheduling: &arts; needs to decide which plugin when "
"calculates what. This takes time. Take a profiler if you are interested in "
"that. Generally what can be said is: the less realtime you do (&ie;. the "
"larger blocks can be calculated at a time) the less scheduling overhead you "
"have. Above calculating blocks of 128 samples at a time (thus using fragment "
"sizes of 512 bytes) the scheduling overhead is probably not worth thinking "
"about it."
msgstr ""
"&arts; interna schemaläggning: &arts; behöver bestämma vilken "
"insticksmodul som ska beräkna vad när. Detta tar tid. Använd ett "
"profileringsverktyg om du är intresserad av det. Vad som kan sägas i "
"allmänhet är att ju mindre realtid som används (dvs. ju större block som "
"kan beräknas åt gången) desto mindre schemaläggningsomkostnad fås. "
"Över beräkning av block med 128 samplingar åt gången (alltså med "
"användning av fragmentstorlekar på 512 byte) är schemaläggningsomkostnad "
"förmodligen inte värt att bry sig om."

#: index.docbook:398
#, no-c-format
msgid ""
"Integer to float conversion overhead: &arts; uses floats internally as data "
"format. These are easy to handle and on recent processors not slower than "
"integer operations. However, if there are clients which play data which is "
"not float (like a game that should do its sound output via &arts;), it needs "
"to be converted. The same applies if you want to replay the sounds on your "
"soundcard. The soundcard wants integers, so you need to convert."
msgstr ""
"Konvertering från heltal till flyttal: &arts; använder flyttal som internt "
"dataformat. De är enkla att hantera, och på moderna processorer inte "
"mycket långsammare än heltalsoperationer. Om det i alla fall finns "
"klienter som spelar data som inte är flyttal (som ett spel som ska göra "
"sin ljudutmatning via &arts;), behövs konvertering. Detsamma gäller om du "
"vill spela upp ljud på ditt ljudkort. Ljudkortet behöver heltal, så du "
"måste konvertera."

#: index.docbook:408
#, no-c-format
msgid ""
"Here are numbers for a Celeron, approx. ticks per sample, with -O2 +egcs "
"2.91.66 (taken by Eugene Smith <email>hamster@null.ru</email>). This is of "
"course highly processor dependant:"
msgstr ""
"Här är värden för en Celeron, ungefärliga klockcykler per sampling, med "
"-O2 och egcs 2.91.66 (mätta av Eugene Smith "
"<email>hamster@null.ru</email>). Det här är förstås ytterst "
"processorberoende:"

#: index.docbook:414
#, no-c-format
msgid ""
"convert_mono_8_float: 14\n"
"convert_stereo_i8_2float: 28\n"
"convert_mono_16le_float: 40\n"
"interpolate_mono_16le_float: 200\n"
"convert_stereo_i16le_2float: 80\n"
"convert_mono_float_16le: 80"
msgstr ""
"convert_mono_8_float: 14\n"
"convert_stereo_i8_2float: 28\n"
"convert_mono_16le_float: 40\n"
"interpolate_mono_16le_float: 200\n"
"convert_stereo_i16le_2float: 80\n"
"convert_mono_float_16le: 80"

#: index.docbook:423
#, no-c-format
msgid ""
"So that means 1% <acronym>CPU</acronym> usage for conversion and 5% for "
"interpolation on this 350 MHz processor."
msgstr ""
"Så detta betyder 1 % <acronym>CPU</acronym>-användning för konvertering "
"och 5 % för interpolation på den här 350 MHz processorn."

#: index.docbook:428
#, no-c-format
msgid ""
"&MCOP; protocol overheadL &MCOP; does, as a rule of thumb, 9000 invocations "
"per second. Much of this is not &MCOP;s fault, but relates to the two kernel "
"causes named below. However, this gives a base to do calculations what the "
"cost of streaming is."
msgstr ""
"&MCOP; protokollomkostnad: &MCOP; klarar, som en tumregel, 9000 anrop per "
"sekund. En stor del av detta är inte &MCOP;:s fel, utan hör ihop med de "
"två orsakerna för kärnan som nämns nedan. Det här ger i alla fall en "
"bas för att göra beräkningar av vad kostaden för strömhantering är."

#: index.docbook:435
#, no-c-format
msgid ""
"Each data packet transferred through streaming can be considered one &MCOP; "
"invocation. Of course large packets are slower than 9000 packets/s, but its "
"about the idea."
msgstr ""
"Varje datapaket som skickas med en ström kan anses vara ett &MCOP;-anrop. "
"Stora paket är förstås långsammare än 9000 paket/s, men det ger en god "
"idé."

#: index.docbook:441
#, no-c-format
msgid ""
"Suppose you use packet sizes of 1024 bytes. Thus, to transfer a stream with "
"44kHz stereo, you need to transfer 44100*4/1024 = 172 packets per second. "
"Suppose you could with 100% cpu usage transfer 9000 packets, then you get "
"(172*100)/9000 = 2% <acronym>CPU</acronym> usage due to streaming with 1024 "
"byte packets."
msgstr ""
"Antag att du använder paketstorlekar på 1024 byte. På så sätt, för att "
"överföra en ström med  44 kHz stereo, behöver du överföra 44100 * 4 / "
"1024 = 172 paket per sekund. Antag att du kunde överföra 9000 paket med "
"100 % CPU-användning, då får du (172 *100) / 9000 = 2 % "
"<acronym>CPU</acronym>-användning på grund av strömmen med 1024 byte "
"paket."

#: index.docbook:449
#, no-c-format
msgid ""
"That are approximations. However, they show, that you would be much better "
"off (if you can afford it for the latency), to use for instance packets of "
"4096 bytes. We can make a compact formula here, by calculating the packet "
"size which causes 100% <acronym>CPU</acronym> usage as 44100*4/9000 = 19.6 "
"samples, and thus getting the quick formula:"
msgstr ""
"Detta är en approximation. Det visar i alla fall att du skulle klara dig "
"mycket bättre (om du har råd med latenstiden), med att till exempel "
"använda paket på 4096 byte. Här kan vi skapa en kompakt formel, genom att "
"beräkna paketstorleken som orsakar 100 % <acronym>CPU</acronym>"
"-användning som 44100 * 4 / 9000 = 19,6 samplingar, och på så sätt få "
"snabbformeln:"

#: index.docbook:457
#, no-c-format
msgid "streaming <acronym>CPU</acronym> usage in percent = 1960/(your packet size)"
msgstr ""
"<acronym>CPU</acronym>-användning för en ström i procent = 1960 / (din "
"paketstorlek)"

#: index.docbook:461
#, no-c-format
msgid ""
"which gives us 0.5% <acronym>CPU</acronym> usage when streaming with 4096 "
"byte packets."
msgstr ""
"som ger oss 0,5 % <acronym>CPU</acronym>-användning med en ström av 4096 "
"byte paket."

#: index.docbook:465
#, no-c-format
msgid ""
"Kernel process/context switching: this is part of the &MCOP; protocol "
"overhead. Switching between two processes takes time. There is new memory "
"mapping, the caches are invalid, whatever else (if there is a kernel expert "
"reading this - let me know what exactly are the causes). This means: it "
"takes time."
msgstr ""
"Kärnans process/sammanhangsbyte: Det här är en del av &MCOP;-protokollets "
"omkostnad. Att byta mellan två processer tar tid. Det blir en ny "
"minnesmappning, cachar blir ogiltiga, och en del annat (om en expert på "
"kärnan läser det här - tala om de exakta orsakerna för mig). Det här "
"betyder: det tar tid."

#: index.docbook:473
#, no-c-format
msgid ""
"I am not sure how many context switches &Linux; can do per second, but that "
"number isn't infinite. Thus, of the &MCOP; protocol overhead I suppose quite "
"a bit is due to context switching. In the beginning of &MCOP;, I did tests "
"to use the same communication inside one process, and it was much faster "
"(four times as fast or so)."
msgstr ""
"Jag är inte säker på hur många processbyten &Linux; kan göra per "
"sekund, men värdet är inte oändligt. Så av &MCOP;-protokollets "
"omkostnad, antar jag att en hel del beror på processbyten. När &MCOP; "
"först påbörjades provade jag samma kommunikation inne i en process, och "
"det var mycket snabbare (ungefär fyra gånger snabbare)."

#: index.docbook:481
#, no-c-format
msgid ""
"Kernel: communication overhead: This is part of the &MCOP; protocol "
"overhead. Transferring data between processes is currently done via sockets. "
"This is convenient, as the usual select() methods can be used to determine "
"when a message has arrived. It can also be combined with other I/O sources "
"as audio I/O, X11 server or whatever else easily."
msgstr ""
"Kärnans kommunikationsomkostnad: Det här är en del av &MCOP;-protokollets "
"omkostnad. Att överföra data mellan processer görs för närvarande via "
"ett uttag (socket). Det här är bekvämt, eftersom den vanliga select() "
"metoden kan användas för att avgöra när ett meddelande har anlänt. Det "
"kan också kombineras med andra I/O-källor som ljud-I/O, X11-server eller "
"vad som helst annat."

#: index.docbook:489
#, no-c-format
msgid ""
"However, those read and write calls cost certainly processor cycles. For "
"small invocations (such as transferring one midi event) this is probably not "
"so bad, for large invocations (such as transferring one video frame with "
"several megabytes) this is clearly a problem."
msgstr ""
"De här läs- och skrivanropen kostar definitivt processorcykler. För små "
"anrop (som att överföra en midi-händelse) är det förmodligen inte så "
"farligt, men för stora anrop (som att överföra en videobild med flera "
"Mibyte) är det helt klart ett problem."

#: index.docbook:496
#, no-c-format
msgid ""
"Adding the usage of shared memory to &MCOP; where appropriate is probably "
"the best solution. However it should be done transparent to the application "
"programmer."
msgstr ""
"Att lägga till användning av delat minne till &MCOP; där det är "
"lämpligt är förmodligen den bästa lösningen. Det måste dock göras "
"transparent för tillämpningsprogrammeraren."

#: index.docbook:502
#, no-c-format
msgid ""
"Take a profiler or do other tests to find out how much exactly current audio "
"streaming is impacted by the not using sharedmem. However, its not bad, as "
"audio streaming (replaying mp3) can be done with 6% total "
"<acronym>CPU</acronym> usage for &artsd; and "
"<application>artscat</application> (and 5% for the mp3 decoder). However, "
"this includes all things from the necessary calculations up do the socket "
"overhead, thus I'd say in this setup you could perhaps save 1% by using "
"sharedmem."
msgstr ""
"Ta ett profileringsverktyg och gör andra prov för att exakt ta reda på "
"hur nuvarande ljudströmmar påverkas av att inte använda delat minne. Det "
"är dock inte så dåligt, eftersom ljudströmmar (spela upp mp3) kan göras "
"med totalt 6 % <acronym>CPU</acronym>-användning för &artsd; och "
"<application>artscat</application> (och 5 % för mp3-avkodaren). Det här "
"innefattar dock allting från nödvändiga beräkningar till omkostnad för "
"uttaget, så jag skulle uppskatta att man skulle vinna ungefär 1 % på att "
"använda delat minne."

#: index.docbook:516
#, no-c-format
msgid "Some Hard Numbers"
msgstr "Några riktiga värden"

#: index.docbook:518
#, no-c-format
msgid ""
"These are done with the current development snapshot. I also wanted to try "
"out the real hard cases, so this is not what everyday applications should "
"use."
msgstr ""
"De här är gjorda med den nuvarande utvecklingsversionen. Jag ville också "
"försöka med riktigt svåra fall, så det här är inte vad program för "
"daglig användning skulle göra."

#: index.docbook:524
#, no-c-format
msgid ""
"I wrote an application called streamsound which sends streaming data to "
"&arts;. Here it is running with realtime priority (without problems), and "
"one small serverside (volume-scaling and clipping) plugin:"
msgstr ""
"Jag skrev ett program som heter streamsound som skickar dataflöden till "
"&arts;. Här körs det med realtidsprioritet (utan problem), och en liten "
"insticksmodul på serversidan (volymskalning och klippning):"

#: index.docbook:530
#, no-c-format
msgid ""
"4974 stefan    20   0  2360 2360  1784 S       0 17.7  1.8   0:21 artsd\n"
" 5016 stefan    20   0  2208 2208  1684 S       0  7.2  1.7   0:02 "
"streamsound\n"
" 5002 stefan    20   0  2208 2208  1684 S       0  6.8  1.7   0:07 "
"streamsound\n"
" 4997 stefan    20   0  2208 2208  1684 S       0  6.6  1.7   0:07 "
"streamsound"
msgstr ""
"4974 stefan    20   0  2360 2360  1784 S       0 17.7  1.8   0:21 artsd\n"
" 5016 stefan    20   0  2208 2208  1684 S       0  7.2  1.7   0:02 "
"streamsound\n"
" 5002 stefan    20   0  2208 2208  1684 S       0  6.8  1.7   0:07 "
"streamsound\n"
" 4997 stefan    20   0  2208 2208  1684 S       0  6.6  1.7   0:07 "
"streamsound"

#: index.docbook:537
#, no-c-format
msgid ""
"Each of them is streaming with 3 fragments a 1024 bytes (18 ms). There are "
"three such clients running simultaneously. I know that that does look a bit "
"too much, but as I said: take a profiler and find out what costs time, and "
"if you like, improve it."
msgstr ""
"Var och en av programmen skickar en ström med 3 fragment på 1024 byte (18 "
"ms). Det finns tre sådana klienter som kör samtidigt. Jag vet att det "
"verkar vara lite väl mycket, men som jag sa: ta ett profileringsverktyg och "
"ta reda på vad som kostar tid, och om du vill, förbättra det."

#: index.docbook:544
#, no-c-format
msgid ""
"However, I don't think using streaming like that is realistic or makes "
"sense. To take it even more to the extreme, I tried what would be the lowest "
"latency possible. Result: you can do streaming without interruptions with "
"one client application, if you take 2 fragments of 128 bytes between aRts "
"and the soundcard, and between the client application and aRts. This means "
"that you have a total maximum latency of 128*4/44100*4 = 3 ms, where 1.5 ms "
"is generated due to soundcard I/O and 1.5 ms is generated through "
"communication with &arts;. Both applications need to run realtimed."
msgstr ""
"Jag tror i alla fall inte att använda strömmar så här är realistiskt "
"eller vettigt. För att göra det hela ännu mer extremt, försökte jag med "
"den minsta möjliga latenstiden. Resultat: man kan använda strömmar utan "
"avbrott med ett klientprogram, om man tar 2 fragment med 128 byte mellan "
"aRts och ljudkortet, och mellan klientprogrammet och aRts. Det här betyder "
"att man har en total maximal latenstid på 128 * 4 / 44100 * 4 = 3 ms, där "
"1,5 ms skapas på grund av I/O till ljudkortet och 1,5 ms skapas av "
"kommunikation med &arts;. Båda programmen måste köra med "
"realtidsprioritet."

#: index.docbook:556
#, no-c-format
msgid ""
"But: this costs an enormous amount of <acronym>CPU</acronym>. This example "
"cost you about 45% of my P-II/350. I also starts to click if you start top, "
"move windows on your X11 display or do disk I/O. All these are kernel "
"issues. The problem is that scheduling two or more applications with "
"realtime priority cost you an enormous amount of effort, too, even more if "
"the communicate, notify each other &etc;."
msgstr ""
"Men det här kostar en enorm mängd <acronym>CPU</acronym>. Det här "
"exemplet kostar ungefär 45 % på min P-II/350. Det börjar också gå fel "
"om man startar top, flyttar fönster på X11-skärmen eller gör disk-I/O. "
"Allt det här har med kärnan att göra. Problemet är att schemalägga två "
"eller flera processer med realtidsprioritet också kostar en enorm "
"ansträngning, ännu mer än kommunikation och meddelande till varandra, etc."

#: index.docbook:566
#, no-c-format
msgid ""
"Finally, a more real life example. This is &arts; with artsd and one artscat "
"(one streaming client) running 16 fragments a 4096 bytes:"
msgstr ""
"Till sist, ett mer vardagligt exempel: Det här är &arts; med artsd och en "
"artscat (en klient med dataflöde) som kör 16 fragment på 4096 byte:"

#: index.docbook:571
#, no-c-format
msgid ""
"5548 stefan    12   0  2364 2364  1752 R       0  4.9  1.8   0:03 artsd\n"
" 5554 stefan     3   0   752  752   572 R       0  0.7  0.5   0:00 top\n"
" 5550 stefan     2   0  2280 2280  1696 S       0  0.5  1.7   0:00 artscat"
msgstr ""
"5548 stefan    12   0  2364 2364  1752 R       0  4.9  1.8   0:03 artsd\n"
" 5554 stefan     3   0   752  752   572 R       0  0.7  0.5   0:00 top\n"
" 5550 stefan     2   0  2280 2280  1696 S       0  0.5  1.7   0:00 artscat"

#: index.docbook:591
#, no-c-format
msgid "Busses"
msgstr "Bussar"

#: index.docbook:593
#, no-c-format
msgid ""
"Busses are dynamically built connections that transfer audio. Basically, "
"there are some uplinks and some downlinks. All signals from the uplinks are "
"added and send to the downlinks."
msgstr ""
"Bussar är förbindelser som byggs dynamiskt för att överföra ljud. Det "
"finns ett antal upplänkar och nerlänkar. Alla signaler från upplänkarna "
"adderas och skickas till nerlänkarna."

#: index.docbook:599
#, no-c-format
msgid ""
"Busses as currently implemented operate in stereo, so you can only transfer "
"stereo data over busses. If you want mono data, well, transfer it only over "
"one channel and set the other to zero or whatever. What you need to to, is "
"to create one or more Synth&lowbar;BUS&lowbar;UPLINK objects and tell them a "
"bus name, to which they should talk (&eg; <quote>audio</quote> or "
"<quote>drums</quote>). Simply throw the data in there."
msgstr ""
"Bussar är för närvarande implementerade för att fungera med stereo, så "
"du kan bara överföra stereodata via bussar. Om du vill ha monodata, nå, "
"överför det bara på en kanal och sätt den andra till noll eller något "
"godtyckligt. Vad du måste göra är att skapa en eller flera "
"Synth&lowbar;BUS&lowbar;UPLINK-objekt och ge dem ett bussnamn, som de ska "
"prata med (t.ex. <quote>ljud</quote> eller <quote>trummor</quote>). Skicka "
"sedan helt enkelt in data dit."

#: index.docbook:609
#, no-c-format
msgid ""
"Then, you'll need to create one or more Synth&lowbar;BUS&lowbar;DOWNLINK "
"objects, and tell them the bus name (<quote>audio</quote> or "
"<quote>drums</quote> ... if it matches, the data will get through), and the "
"mixed data will come out again."
msgstr ""
"Därefter måste du skapa en eller flera "
"Synth&lowbar;BUS&lowbar;DOWNLINK-objekt, och tala om bussnamnet för dem "
"(<quote>ljud</quote> eller <quote>trummor</quote>... om det passar ihop, "
"kommer data igenom), och det blandade ljudet kommer ut igen."

#: index.docbook:616
#, no-c-format
msgid ""
"The uplinks and downlinks can reside in different structures, you can even "
"have different &artsbuilder;s running and start an uplink in one and receive "
"the data from the other with a downlink."
msgstr ""
"Upplänkarna och nerlänkarna kan finnas i olika strukturer, du kan till och "
"med ha olika aRts-byggare som kör och starta en upplänk i en och ta emot "
"data i den andra med en nerlänk."

#: index.docbook:622
#, no-c-format
msgid ""
"What is nice about busses is, that they are fully dynamic. Clients can plug "
"in and out on the fly. There should be no clicking or noise as this happens."
msgstr ""
"Vad som är trevligt med bussar är att de är fullständigt dynamiska. "
"Klienter kan kopplas in eller ur i farten. Det ska inte höras några klick "
"eller brus när detta sker."

#: index.docbook:628
#, no-c-format
msgid ""
"Of course, you should not plug out a client playing a signal, since it will "
"probably not be a zero level when plugged out the bus, and then it will "
"click."
msgstr ""
"Du ska förstås inte koppla in eller ur en klient medan den spelar en "
"signal, eftersom den förmodligen inte är noll när den kopplas ur, och då "
"uppstår ett klick."

#: index.docbook:657
#, no-c-format
msgid "Trader"
msgstr "Handlaren"

#: index.docbook:659
#, no-c-format
msgid ""
"&arts;/&MCOP; heavily relies on splitting up things into small components. "
"This makes things very flexible, as you can extend the system easily by "
"adding new components, which implement new effects, fileformats, "
"oscillators, gui elements, ... As almost everything is a component, almost "
"everything can be extended easily, without changing existing sources. New "
"components can be simply loaded dynamically to enhance already existing "
"applications."
msgstr ""
"&arts;/&MCOP; förlitar sig helt på att dela upp objekt i små komponenter. "
"Det här gör allt mycket flexibelt, eftersom man lätt kan utöka systemet "
"genom att lägga till nya komponenter, som implementerar nya effekter, "
"filformat, oscillatorer, grafiska element, ... Eftersom nästan allt är "
"komponenter, kan nästan allt lätt utökas utan att ändra befintlig "
"källkod. Nya komponenter kan enkelt laddas dynamiskt för att förbättra "
"program som redan finns."

#: index.docbook:669
#, no-c-format
msgid "However, to make this work, two things are required:"
msgstr "För att detta ska fungera, behövs dock två saker:"

#: index.docbook:673
#, no-c-format
msgid ""
"Components must advertise themselves - they must describe what great things "
"they offer, so that applications will be able to use them."
msgstr ""
"Komponenter måste tala om att de finns - de måste beskriva vilka "
"storartade saker de erbjuder, så att program kan använda dem."

#: index.docbook:673
#, no-c-format
msgid ""
"Applications must actively look for components that they could use, instead "
"of using always the same thing for some task."
msgstr ""
"Program måste aktivt leta efter komponenter som de skulle kunna använda, "
"istället för att alltid använda samma komponent för en viss uppgift."

#: index.docbook:691
#, no-c-format
msgid ""
"The combination of this: components which say <quote>here I am, I am cool, "
"use me</quote>"
", and applications (or if you like, other components) which go out and look "
"which component they could use to get a thing done, is called trading."
msgstr ""
"Kombinationen av det här: komponenter som säger <quote>här är jag, jag "
"är tuff, använd mig</quote>, och program (eller om man vill, andra "
"komponenter) som går ut och letar efter vilken komponent som de kan "
"använda för att få någonting gjort, kallas att handla."

#: index.docbook:698
#, no-c-format
msgid ""
"In &arts;, components describe themselves by specifying values that they "
"<quote>support</quote>"
" for properties. A typical property for a file-loading component could be "
"the extension of the files that it can process. Typical values could be "
"<literal role=\"extension\">wav</literal>, <literal "
"role=\"extension\">aiff</literal> or <literal "
"role=\"extension\">mp3</literal>."
msgstr ""
"I &arts; beskriver komponenter sig genom att ange värden som de "
"<quote>stöder</quote> som egenskaper. En typisk egenskap för en "
"filladdningskomponent kan vara filändelsen för filerna som den kan "
"behandla. Typiska värden kan vara <literal "
"role=\"extension\">wav</literal>, <literal role=\"extension\">aiff</literal>"
" eller <literal role=\"extension\">mp3</literal>."

#: index.docbook:707
#, no-c-format
msgid ""
"In fact, every component may choose to offer many different values for one "
"property. So one single component could offer reading both, <literal "
"role=\"extension\">wav</literal> and <literal "
"role=\"extension\">aiff</literal> files, by specifying that it supports "
"these values for the property <quote>Extension</quote>."
msgstr ""
"I själva verket kan varje komponent välja att erbjuda många olika värden "
"för en egenskap. Så en enda komponent skulle kunna erbjuda att läsa både "
"<literal role=\"extension\">wav</literal> och <literal "
"role=\"extension\">aiff</literal> filer, genom att ange att den stöder de "
"här värdena för egenskapen <quote>Extension</quote>."

#: index.docbook:715
#, no-c-format
msgid ""
"To do so, a component has to place a <literal "
"role=\"extension\">.mcopclass</literal> file at an appropriate place, "
"containing the properties it supports, for our example, this could look like "
"this (and would be installed in "
"<filename><replaceable>componentdir</replaceable>"
"/Arts/WavPlayObject.mcopclass</filename>):"
msgstr ""
"För att göra det här, måste en komponent lägga en <literal "
"role=\"extension\">.mcopclass</literal>"
"-fil som innehåller egenskaperna den stöder på ett lämpligt ställe. "
"För vårt exempel, kan den se ut så här (och skulle installeras i "
"<filename><replaceable>komponentkatalog</replaceable>"
"/Arts/WavPlayObject.mcopclass</filename>):"

#: index.docbook:723
#, no-c-format
msgid ""
"Interface=Arts::WavPlayObject,Arts::PlayObject,Arts::SynthModule,Arts::Object"
"\n"
"Author=\"Stefan Westerfeld &lt;stefan@space.twc.de&gt;\"\n"
"URL=\"http://www.arts-project.org\"\n"
"Extension=wav,aiff\n"
"MimeType=audio/x-wav,audio/x-aiff"
msgstr ""
"Interface=Arts::WavPlayObject,Arts::PlayObject,Arts::SynthModule,Arts::Object"
"\n"
"Author=\"Stefan Westerfeld &lt;stefan@space.twc.de&gt;\"\n"
"URL=\"http://www.arts-project.org\"\n"
"Extension=wav,aiff\n"
"MimeType=audio/x-wav,audio/x-aiff"

#: index.docbook:731
#, no-c-format
msgid ""
"It is important that the filename of the <literal "
"role=\"extension\">.mcopclass</literal>"
"-file also says what the interface of the component is called like. The "
"trader doesn't look at the contents at all, if the file (like here) is "
"called <filename>Arts/WavPlayObject.mcopclass</filename>, the component "
"interface is called <interfacename>Arts::WavPlayObject</interfacename> "
"(modules map to directories)."
msgstr ""
"Det är viktigt att filnamnet på <literal "
"role=\"extension\">.mcopclass</literal>-filen också anger vad komponentens "
"gränssnitt heter. Handlaren tittar inte på innehållet alls, om filen (som "
"här) heter <filename>Arts/WavPlayObject.mcopclass</filename>, och "
"komponentgränssnittet heter "
"<interfacename>Arts::WavPlayObject</interfacename> (moduler hör ihop med "
"kataloger)."

#: index.docbook:741
#, no-c-format
msgid ""
"To look for components, there are two interfaces (which are defined in "
"<filename>core.idl</filename>, so you have them in every application), "
"called <interfacename>Arts::TraderQuery</interfacename> and "
"<interfacename>Arts::TraderOffer</interfacename>. You to go on a "
"<quote>shopping tour</quote> for components like this:"
msgstr ""
"För att leta efter komponenter finns det två gränssnitt (som är "
"definierade i <filename>core.idl</filename>, så de är tillgängliga i "
"varje program), som heter <interfacename>Arts::TraderQuery</interfacename> "
"och <interfacename>Arts::TraderOffer</interfacename>. Du går på en "
"<quote>shoppingrunda</quote> efter komponenter så här:"

#: index.docbook:749
#, no-c-format
msgid "Create a query object:"
msgstr "Skapa ett frågeobjekt:"

#: index.docbook:749
#, no-c-format
msgid "Arts::TraderQuery query;"
msgstr "Arts::TraderQuery query;"

#: index.docbook:749
#, no-c-format
msgid ""
"Specify what you want. As you saw above, components describe themselves "
"using properties, for which they offer certain values. So specifying what "
"you want is done by selecting components that support a certain value for a "
"property. This is done using the supports method of a TraderQuery:"
msgstr ""
"Ange vad du vill ha. Som du såg ovan, beskriver komponenter sig själva med "
"egenskaper, som de sätter till vissa värden. Så att specificera vad du "
"vill ha görs genom att välja komponenter som stöder ett visst värde för "
"en egenskap. Det här sker med metoden supports i TraderQuery:"

#: index.docbook:749
#, no-c-format
msgid ""
"query.supports(\"Interface\",\"Arts::PlayObject\");\n"
"    query.supports(\"Extension\",\"wav\");"
msgstr ""
"query.supports(\"Interface\",\"Arts::PlayObject\");\n"
"    query.supports(\"Extension\",\"wav\");"

#: index.docbook:749
#, no-c-format
msgid ""
"Finally, perform the query using the query method. Then, you'll (hopefully) "
"get some offers:"
msgstr ""
"Till sist utförs förfrågan med metoden query. Sedan får du "
"(förhoppningsvis) några erbjudanden:"

#: index.docbook:749
#, no-c-format
msgid "vector&lt;Arts::TraderOffer&gt; *offers = query.query();"
msgstr "vector&lt;Arts::TraderOffer&gt; *offers = query.query();"

#: index.docbook:749
#, no-c-format
msgid ""
"Now you can examine what you found. Important is the interfaceName method of "
"TraderOffer, which will tell you the name of the component, that matched the "
"query. You can also find out further properties by getProperty. The "
"following code will simply iterate through all components, print their "
"interface names (which could be used for creation), and delete the results "
"of the query again:"
msgstr ""
"Nu kan du undersöka vad du hittade. Det viktiga är metoden interfaceName i "
"TraderOffer, som ger dig namnen på komponenterna som svarade på frågan. "
"Du kan också ta reda på ytterligare egenskaper med getProperty. Följande "
"kod löper helt enkelt igenom alla komponenterna, skriver ut deras "
"gränssnittsnamn (som skulle kunna användas för att skapa dem), och tar "
"bort resultatet av frågan:"

#: index.docbook:749
#, no-c-format
msgid ""
"vector&lt;Arts::TraderOffer&gt;::iterator i;\n"
"    for(i = offers-&gt;begin(); i != offers-&gt;end(); i++)\n"
"        cout &lt;&lt; i-&gt;interfaceName() &lt;&lt; endl;\n"
"    delete offers;"
msgstr ""
"vector&lt;Arts::TraderOffer&gt;::iterator i;\n"
"    for(i = offers-&gt;begin(); i != offers-&gt;end(); i++)\n"
"        cout &lt;&lt; i-&gt;interfaceName() &lt;&lt; endl;\n"
"    delete offers;"

#: index.docbook:803
#, no-c-format
msgid ""
"For this kind of trading service to be useful, it is important to somehow "
"agree on what kinds of properties components should usually define. It is "
"essential that more or less all components in a certain area use the same "
"set of properties to describe themselves (and the same set of values where "
"applicable), so that applications (or other components) will be able to find "
"them."
msgstr ""
"För att den här sortens handelsservice ska vara användbar, är det "
"viktigt att på något sätt komma överens om vilka egenskaper som "
"komponenter normalt ska definiera. Det är väsentligt att mer eller mindre "
"alla komponenter inom ett visst område använder samma uppsättning "
"egenskaper för att beskriva sig själva (och samma uppsättning värden "
"när det behövs), så att program (eller andra komponenter) kan hitta dem."

#: index.docbook:812
#, no-c-format
msgid ""
"Author (type string, optional): This can be used to ultimately let the world "
"know that you wrote something. You can write anything you like in here, "
"e-mail adress is of course helpful."
msgstr ""
"Author (typ stäng, valfri): Upphovsman. Det här kan användas för att "
"till sist låta världen få reda på att du skrivit någonting. Du kan "
"skriva vad du vill här, en e-postadress är förstås en bra hjälp."

#: index.docbook:818
#, no-c-format
msgid ""
"Buildable (type boolean, recommended): This indicates whether the component "
"is usable with <acronym>RAD</acronym> tools (such as &artsbuilder;) which "
"use components by assigning properties and connecting ports. It is "
"recommended to set this value to true for almost any signal processing "
"component (such as filters, effects, oscillators, ...), and for all other "
"things which can be used in <acronym>RAD</acronym>"
" like fashion, but not for internal stuff like for instance "
"<interfacename>Arts::InterfaceRepo</interfacename>."
msgstr ""
"Buildable (typ boolean, rekommenderas): Byggbar. Det här anger om "
"komponenten är användbar med <acronym>RAD</acronym>-verktyg (som "
"aRts-byggaren) som använder komponenter genom att tilldela egenskaper och "
"ansluta portar. Det rekommenderas att det här värdet sätts till true för "
"nästan alla signalbehandlingskomponenter (som filer, ljudeffekter, "
"oscillatorer, ...), och för alla andra objekt som kan användas på ett "
"<acronym>RAD</acronym>"
"-liknande sätt, men inte för interna objekt som till exempel "
"<interfacename>Arts::InterfaceRepo</interfacename>."

#: index.docbook:829
#, no-c-format
msgid ""
"Extension (type string, used where relevant): Everything dealing with files "
"should consider using this. You should put the lowercase version of the file "
"extension without the <quote>.</quote> here, so something like "
"<userinput>wav</userinput> should be fine."
msgstr ""
"Extension (typ sträng, använd där det passar): Filändelse. Alla moduler "
"som hanterar filer bör fundera på att använda det här. Du anger "
"filändelsen med små bokstäver utan <quote>.</quote>"
" här, så något som  <userinput>wav</userinput> ska fungera utmärkt."

#: index.docbook:836
#, no-c-format
msgid ""
"Interface (type string, required): This should include the full list of "
"(useful) interfaces your components supports, probably including "
"<interfacename>Arts::Object</interfacename> and if applicable "
"<interfacename>Arts::SynthModule</interfacename>."
msgstr ""
"Interface (typ sträng, krävs): Gränssnitt. Det här ska omfatta hela "
"listan på (användbara) gränssnitt som din komponent stöder, troligen "
"inklusive <interfacename>Arts::Object</interfacename> och om tillämpligt "
"<interfacename>Arts::SynthModule</interfacename>."

#: index.docbook:843
#, no-c-format
msgid ""
"Language (type string, recommended): If you want your component to be "
"dynamically loaded, you need to specify the language here. Currently, the "
"only allowed value is <userinput>C++</userinput>, which means the component "
"was written using the normal C++ <acronym>API</acronym>. If you do so, "
"you'll also need to set the <quote>Library</quote> property below."
msgstr ""
"Language (typ sträng, rekommenderas): Språk. Om du vill att din komponent "
"ska laddas dynamiskt, måste du ange språket här. För närvarande är det "
"enda tillåtna värdet <userinput>C++</userinput>, som betyder att "
"komponenten är skriven med det normala C++ programmeringsgränssnittet. Om "
"du anger detta, måste du också ange egenskapen <quote>Library</quote> "
"nedan."

#: index.docbook:852
#, no-c-format
msgid ""
"Library (type string, used where relevant): Components written in C++ can be "
"dynamically loaded. To do so, you have to compile them into a dynamically "
"loadable libtool (<literal role=\"extension\">.la</literal>) module. Here, "
"you can specify the name of the <literal "
"role=\"extension\">.la</literal>"
"-File that contains your component. Remember to use REGISTER_IMPLEMENTATION "
"(as always)."
msgstr ""
"Library (typ sträng, använd där det passar): Bibliotek. Komponenter som "
"är skrivna i C++ kan laddas dynamiskt. För att göra det måste du "
"kompilera dem i en dynamiskt laddningsbar libtool (<literal "
"role=\"extension\">.la</literal>) modul. Här kan du ange namnet på "
"<literal role=\"extension\">.la</literal>-filen som innehåller din "
"komponent. Kom ihåg att använda REGISTER_IMPLEMENTATION (som alltid)."

#: index.docbook:861
#, no-c-format
msgid ""
"MimeType (type string, used where relevant): Everything dealing with files "
"should consider using this. You should put the lowercase version of the "
"standard mimetype here, for instance <userinput>audio/x-wav</userinput>."
msgstr ""
"MimeType (typ sträng, använd där det passar): Mimetyp. Alla som hanterar "
"filer bör tänka sig att använda det här. Du ska ange standard-mimetypen "
"med små bokstäver här, till exempel <userinput>audio/x-wav</userinput>."

#: index.docbook:868
#, no-c-format
msgid ""
"&URL; (type string, optional): If you like to let people know where they can "
"find a new version of the component (or a homepage or anything), you can do "
"it here. This should be standard &HTTP; or &FTP; &URL;."
msgstr ""
"&URL; (typ sträng, valfri): Om du vill tala om var man kan hitta en ny "
"version av komponenten (eller en hemsida eller något annat), kan du göra "
"det här. Det här ska vara en standard &HTTP;- eller &FTP;-webbadress."

#: index.docbook:903
#, no-c-format
msgid "Namespaces in &arts;"
msgstr "Namnrymder i &arts;"

#: index.docbook:906
#, no-c-format
msgid "Introduction"
msgstr "Inledning"

#: index.docbook:908
#, no-c-format
msgid ""
"Each namespace declaration corresponds to a <quote>module</quote> "
"declaration in the &MCOP; &IDL;."
msgstr ""
"Varje namnrymdsdeklaration hör ihop med en deklaration av en "
"<quote>modul</quote> i &MCOP; &IDL;."

#: index.docbook:913
#, no-c-format
msgid ""
"// mcop idl\n"
"\n"
"module M {\n"
"    interface A\n"
"    {\n"
"    }\n"
"};\n"
"\n"
"interface B;"
msgstr ""
"// mcop idl\n"
"\n"
"module M {\n"
"    interface A\n"
"    {\n"
"    }\n"
"};\n"
"\n"
"interface B;"

#: index.docbook:925
#, no-c-format
msgid ""
"In this case, the generated C++ code for the &IDL; snippet would look like "
"this:"
msgstr ""
"I det här fallet skulle den genererade C++ koden för &IDL;-fragmentet se "
"ut så här:"

#: index.docbook:930
#, no-c-format
msgid ""
"// C++ header\n"
"\n"
"namespace M {\n"
"    /* declaration of A_base/A_skel/A_stub and similar */\n"
"    class A {        // Smartwrapped reference class\n"
"        /* [...] */\n"
"    };\n"
"}\n"
"\n"
"/* declaration of B_base/B_skel/B_stub and similar */\n"
"class B {\n"
"    /* [...] */\n"
"};"
msgstr ""
"// C++ deklaration\n"
"\n"
"namespace M {\n"
"    /* deklaration av A_base/A_skel/A_stub och liknande */\n"
"    class A {        // Smartwrap referensklass\n"
"        /* [...] */\n"
"    };\n"
"}\n"
"\n"
"/* deklaration av B_base/B_skel/B_stub och liknande */\n"
"class B {\n"
"    /* [...] */\n"
"};"

#: index.docbook:946
#, no-c-format
msgid ""
"So when referring the classes from the above example in your C++ code, you "
"would have to write <classname>M::A</classname>, but only B. However, you "
"can of course use <quote>using M</quote>"
" somewhere - like with any namespace in C++."
msgstr ""
"Så när du hänvisar till klasserna från exemplet ovan i din C++ kod, "
"måste du skriva <classname>M::A</classname>, men bara B. Du kan förstås "
"använda <quote>using M</quote> någonstans, som med alla namnrymnder i C++."

#: index.docbook:956
#, no-c-format
msgid "How &arts; uses namespaces"
msgstr "Hur &arts; använder namnrymder"

#: index.docbook:958
#, no-c-format
msgid ""
"There is one global namespace called <quote>Arts</quote>"
", which all programs and libraries that belong to &arts; itself use to put "
"their declarations in. This means, that when writing C++ code that depends "
"on &arts;, you normally have to prefix every class you use with "
"<classname>Arts::</classname>, like this:"
msgstr ""
"Det finns en global namnrymd som kallas <quote>Arts</quote>, som alla "
"program och bibliotek som hör till &arts; själv använder för att lägga "
"sina deklarationer i. Det här betyder att när du skriver C++ kod som beror "
"på &arts;, måste du normalt använda prefixet "
"<classname>Arts::</classname> för varje klass som du använder, så här:"

#: index.docbook:966
#, no-c-format
msgid ""
"int main(int argc, char **argv)\n"
"{\n"
"    Arts::Dispatcher dispatcher;\n"
"    Arts::SimpleSoundServer "
"server(Arts::Reference(\"global:Arts_SimpleSoundServer\"));\n"
"\n"
"    server.play(\"/var/foo/somefile.wav\");"
msgstr ""
"int main(int argc, char **argv)\n"
"{\n"
"    Arts::Dispatcher dispatcher;\n"
"    Arts::SimpleSoundServer "
"server(Arts::Reference(\"global:Arts_SimpleSoundServer\"));\n"
"\n"
"    server.play(\"/var/foo/någon_fil.wav\");"

#: index.docbook:975
#, no-c-format
msgid "The other alternative is to write a using once, like this:"
msgstr "Det andra alternativet är att skriva \"using\" en gång, så här:"

#: index.docbook:979
#, no-c-format
msgid ""
"using namespace Arts;\n"
"\n"
"int main(int argc, char **argv)\n"
"{\n"
"    Dispatcher dispatcher;\n"
"    SimpleSoundServer server(Reference(\"global:Arts_SimpleSoundServer\"));\n"
"\n"
"    server.play(\"/var/foo/somefile.wav\");\n"
"    [...]"
msgstr ""
"using namespace Arts;\n"
"\n"
"int main(int argc, char **argv)\n"
"{\n"
"    Dispatcher dispatcher;\n"
"    SimpleSoundServer server(Reference(\"global:Arts_SimpleSoundServer\"));\n"
"\n"
"    server.play(\"/var/foo/någon_fil.wav\");\n"
"    [...]"

#: index.docbook:991
#, no-c-format
msgid ""
"In &IDL; files, you don't exactly have a choice. If you are writing code "
"that belongs to &arts; itself, you'll have to put it into module &arts;."
msgstr ""
"I &IDL;-filer, har du egentligen inget val. Om du skriver kod som tillhör "
"&arts; själv, måste du lägga den i modulen &arts;."

#: index.docbook:996
#, no-c-format
msgid ""
"// IDL File for aRts code:\n"
"#include &lt;artsflow.idl&gt;\n"
"module Arts {        // put it into the Arts namespace\n"
"    interface Synth_TWEAK : SynthModule\n"
"    {\n"
"        in audio stream invalue;\n"
"        out audio stream outvalue;\n"
"        attribute float tweakFactor;\n"
"    };\n"
"};"
msgstr ""
"// IDL-fil för aRts-kod:\n"
"#include &lt;artsflow.idl&gt;\n"
"module Arts {        // lägg den i Arts-namnrymd\n"
"    interface Synth_TWEAK : SynthModule\n"
"    {\n"
"        in audio stream invalue;\n"
"        out audio stream outvalue;\n"
"        attribute float tweakFactor;\n"
"    };\n"
"};"

#: index.docbook:1009
#, no-c-format
msgid ""
"If you write code that doesn't belong to &arts; itself, you should not put "
"it into the <quote>Arts</quote> namespace. However, you can make an own "
"namespace if you like. In any case, you'll have to prefix classes you use "
"from &arts;."
msgstr ""
"Om du skriver kod som inte hör till &arts; själv, ska du inte lägga den i "
"namnrymden <quote>Arts</quote>. Du kan dock skapa en egen namnrymd om du "
"vill. Hur som helst, måste du använda prefix för klasser från &arts; som "
"du använder."

#: index.docbook:1016
#, no-c-format
msgid ""
"// IDL File for code which doesn't belong to aRts:\n"
"#include &lt;artsflow.idl&gt;\n"
"\n"
"// either write without module declaration, then the generated classes will\n"
"// not use a namespace:\n"
"interface Synth_TWEAK2 : Arts::SynthModule\n"
"{\n"
"    in audio stream invalue;\n"
"    out audio stream outvalue;\n"
"    attribute float tweakFactor;\n"
"};\n"
"\n"
"// however, you can also choose your own namespace, if you like, so if you\n"
"// write an application \"PowerRadio\", you could for instance do it like "
"this:\n"
"module PowerRadio {\n"
"    struct Station {\n"
"        string name;\n"
"        float frequency;\n"
"    };\n"
"\n"
"    interface Tuner : Arts::SynthModule {\n"
"        attribute Station station;     // no need to prefix Station, same "
"module\n"
"        out audio stream left, right;\n"
"    };\n"
"};"
msgstr ""
"// IDL-fil för kod som inte hör till aRts:\n"
"#include &lt;artsflow.idl&gt;\n"
"\n"
"// skriv antingen med eller utan moduldeklaration, och de genererade "
"klasserna\n"
"// kommer inte att använda en namnrymd:\n"
"interface Synth_TWEAK2 : Arts::SynthModule\n"
"{\n"
"    in audio stream invalue;\n"
"    out audio stream outvalue;\n"
"    attribute float tweakFactor;\n"
"};\n"
"\n"
"// du kan dock välja en egen namnrymd om du vill, så om du\n"
"// skriver programmet \"PowerRadio\", skulle du kunna göra så här:\n"
"module PowerRadio {\n"
"    struct Station {\n"
"        string name;\n"
"        float frequency;\n"
"    };\n"
"\n"
"    interface Tuner : Arts::SynthModule {\n"
"        attribute Station station;     // inget prefix för Station, samma "
"modul\n"
"        out audio stream left, right;\n"
"    };\n"
"};"

#: index.docbook:1047
#, no-c-format
msgid "Internals: How the Implementation Works"
msgstr "Interna funktioner: hur implementeringen fungerar"

#: index.docbook:1049
#, no-c-format
msgid ""
"Often, in interfaces, casts, method signatures and similar, &MCOP; needs to "
"refer to names of types or interfaces. These are represented as string in "
"the common &MCOP; datastructures, while the namespace is always fully "
"represented in the C++ style. This means the strings would contain "
"<quote>M::A</quote> and <quote>B</quote>, following the example above."
msgstr ""
"&MCOP; behöver ofta hänvisa till namn på typer och gränssnitt för "
"typkonverteringar, gränssnitt och metodsignaturer. Dessa representeras av "
"strängar i de vanliga &MCOP;-datastrukturerna, medan namnrymden alltid är "
"fullständigt representerad i C++ stilen. Det här betyder att strängarna "
"skulle innehålla <quote>M::A</quote> och <quote>B</quote>, enligt exemplen "
"ovan."

#: index.docbook:1058
#, no-c-format
msgid ""
"Note this even applies if inside the &IDL; text the namespace qualifiers "
"were not given, since the context made clear which namespace the interface "
"<interfacename>A</interfacename> was meant to be used in."
msgstr ""
"Observera att detta gäller till och med om namnrymdskvalificeringen inte "
"angavs inne i &IDL;-texten, eftersom sammanhanget klargör vilken namnrymd "
"gränssnittet <interfacename>A</interfacename> var tänkt att användas."

#: index.docbook:1068
#, no-c-format
msgid "Threads in &arts;"
msgstr "Trådar i &arts;"

#: index.docbook:1071
#, no-c-format
msgid "Basics"
msgstr "Grundläggande information"

#: index.docbook:1073
#, no-c-format
msgid ""
"Using threads isn't possible on all platforms. This is why &arts; was "
"originally written without using threading at all. For almost all problems, "
"for each threaded solution to the problem, there is a non-threaded solution "
"that does the same."
msgstr ""
"Att använda trådar är inte möjligt på alla plattformar. Det här är "
"orsaken att &arts; ursprungligen skrevs utan att använda trådar alls. För "
"nästan alla problem, finns det en lösning utan trådar som gör samma sak "
"som varje lösning med trådar."

#: index.docbook:1080
#, no-c-format
msgid ""
"For instance, instead of putting audio output in a seperate thread, and make "
"it blocking, &arts; uses non-blocking audio output, and figures out when to "
"write the next chunk of data using <function>select()</function>."
msgstr ""
"Till exempel, istället för att placera ljudutmatning i en separat tråd, "
"och göra den blockerande, använder &arts; ljudutmatning som inte "
"blockerar, och räknar ut när nästa del av utdata ska skrivas med "
"<function>select()</function>."

#: index.docbook:1087
#, no-c-format
msgid ""
"However, &arts; (in very recent versions) at least provides support for "
"people who do want to implement their objects using threads. For instance, "
"if you already have code for an <literal role=\"extension\">mp3</literal> "
"player, and the code expects the <literal role=\"extension\">mp3</literal> "
"decoder to run in a seperate thread, it's usally the easiest thing to do to "
"keep this design."
msgstr ""
"&arts; stöder åtminstone (i de senaste versionerna) de som vill "
"implementera sina objekt med trådar. Till exempel om du redan har kod för "
"en <literal role=\"extension\">mp3</literal>-spelare, och koden förväntar "
"sig att <literal role=\"extension\">mp3</literal>-avkodaren ska köras i en "
"separat tråd, är det oftast lättast att behålla den konstruktionen."

#: index.docbook:1096
#, no-c-format
msgid ""
"The &arts;/&MCOP; implementation is built along sharing state between "
"seperate objects in obvious and non-obvious ways. A small list of shared "
"state includes:"
msgstr ""
"Implementeringen av &arts;/&MCOP; är uppbyggd genom att dela tillståndet "
"mellan olika objekt på tydliga och mindre tydliga sätt. En kort lista på "
"delade tillstånd innefattar:"

#: index.docbook:1102
#, no-c-format
msgid "The Dispatcher object which does &MCOP; communication."
msgstr "Avsändarobjektet som gör &MCOP;-kommunikation"

#: index.docbook:1102
#, no-c-format
msgid "The Reference counting (Smartwrappers)."
msgstr "Referensräkningen (Smartwrappers)."

#: index.docbook:1102
#, no-c-format
msgid "The IOManager which does timer and fd watches."
msgstr "I/O-hanteraren som hanterar tidsgränser och fd-tidmätning."

#: index.docbook:1102
#, no-c-format
msgid "The ObjectManager which creates objects and dynamically loads plugins."
msgstr "Objekthanteraren som skapar objekt och laddar insticksmoduler dynamiskt."

#: index.docbook:1102
#, no-c-format
msgid "The FlowSystem which calls calculateBlock in the appropriate situations."
msgstr "Flödessystemet som anropar calculateBlock vid lämpliga tillfällen."

#: index.docbook:1133
#, no-c-format
msgid ""
"All of the above objects don't expect to be used concurrently (&ie; called "
"from seperate threads at the same time). Generally there are two ways of "
"solving this:"
msgstr ""
"Inget av de ovanstående objekten förväntar sig att användas med "
"samtidighet (dvs. anropas från olika trådar samtidigt). I allmänhet finns "
"det två sätt att lösa detta:"

#: index.docbook:1139
#, no-c-format
msgid ""
"Require the caller of any functions on this objects to acquire a lock before "
"using them."
msgstr ""
"Kräva att den som anropar vilken funktion som helst i objektet skaffar ett "
"lås innan den används."

#: index.docbook:1139
#, no-c-format
msgid ""
"Making these objects really threadsafe and/or create per-thread instances of "
"them."
msgstr ""
"Göra objekten verkligt trådsäkra och/eller skapa instanser av dem för "
"varje tråd."

#: index.docbook:1155
#, no-c-format
msgid ""
"&arts; follows the first approach: you will need a lock whenever you talk to "
"any of these objects. The second approach is harder to do. A hack which "
"tries to achieve this is available at <ulink "
"url=\"http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz\"> "
"http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz</ulink>"
", but for the current point in time, a minimalistic approach will probably "
"work better, and cause less problems with existing applications."
msgstr ""
"&arts; använder det första sättet. Du behöver ett lås varje gång du "
"ska komma åt några av de här objekten. Det andra sättet är svårare att "
"göra. En snabbfix som försöker åstadkomma detta finns på <ulink "
"url=\"http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz\"> "
"http://space.twc.de/~stefan/kde/download/arts-mt.tar.gz</ulink>, men för "
"närvarande fungerar förmodligen ett minimalt sätt bättre, och orsakar "
"mindre problem med befintliga program."

#: index.docbook:1167
#, no-c-format
msgid "When/how to acquire the lock?"
msgstr "När/hur ska låsning ske?"

#: index.docbook:1169
#, no-c-format
msgid "You can get/release the lock with the two functions:"
msgstr "Du kan skaffa/släppa låset med de två funktionerna:"

#: index.docbook:1173
#, no-c-format
msgid "Arts::Dispatcher::lock()"
msgstr "Arts::Dispatcher::lock()"

#: index.docbook:1173
#, no-c-format
msgid "Arts::Dispatcher::unlock()"
msgstr "Arts::Dispatcher::unlock()"

#: index.docbook:1188
#, no-c-format
msgid ""
"Generally, you don't need to acquire the lock (and you shouldn't try to do "
"so), if it is already held. A list of conditions when this is the case is:"
msgstr ""
"I allmänhet behöver du inte skaffa ett lås (och du ska inte försöka att "
"göra det), om det redan hålls. En lista på villkor när detta är fallet "
"är:"

#: index.docbook:1194
#, no-c-format
msgid "You receive a callback from the IOManager (timer or fd)."
msgstr "Du tar emot ett återanrop från I/O-hanteraren (tidsgräns eller fd)."

#: index.docbook:1194
#, no-c-format
msgid "You get call due to some &MCOP; request."
msgstr "Du anropas på grund av någon &MCOP;-begäran."

#: index.docbook:1194
#, no-c-format
msgid "You are called from the NotificationManager."
msgstr "Du anropas från NotificationManager."

#: index.docbook:1194
#, no-c-format
msgid "You are called from the FlowSystem (calculateBlock)"
msgstr "Du anropas från flödessystemet (calculateBlock)"

#: index.docbook:1220
#, no-c-format
msgid ""
"There are also some exceptions of functions. which you can only call in the "
"main thread, and for that reason you will never need a lock to call them:"
msgstr ""
"Det finns också några undantag för funktioner som du bara kan anropa i "
"huvudtråden, och av den anledningen aldrig behöver ett lås för att "
"anropa dem:"

#: index.docbook:1226
#, no-c-format
msgid "Constructor/destructor of Dispatcher/IOManager."
msgstr "Skapa och ta bort avsändaren eller I/O-hanteraren."

#: index.docbook:1226
#, no-c-format
msgid ""
"<methodname>Dispatcher::run()</methodname> / "
"<methodname>IOManager::run()</methodname>"
msgstr ""
"<methodname>Dispatcher::run()</methodname> / "
"<methodname>IOManager::run()</methodname>"

#: index.docbook:1226
#, no-c-format
msgid "IOManager::processOneEvent()"
msgstr "IOManager::processOneEvent()"

#: index.docbook:1245
#, no-c-format
msgid ""
"But that is it. For everything else that is somehow related to &arts;, you "
"will need to get the lock, and release it again when done. Always. Here is a "
"simple example:"
msgstr ""
"Men det är allt. För allt annat som på något sätt hör ihop med &arts;, "
"måste du skaffa låset, och släppa det igen när du är klar. Här är ett "
"enkelt exempel:"

#: index.docbook:1251
#, no-c-format
msgid ""
"class SuspendTimeThread : Arts::Thread {\n"
"public:\n"
"    void run() {\n"
"        /*\n"
"         * you need this lock because:\n"
"         *  - constructing a reference needs a lock (as global: will go to\n"
"         *    the object manager, which might in turn need the GlobalComm\n"
"         *    object to look up where to connect to)\n"
"         *  - assigning a smartwrapper needs a lock\n"
"         *  - constructing an object from reference needs a lock (because "
"it\n"
"         *    might need to connect a server)\n"
"         */\n"
"        Arts::Dispatcher::lock();\n"
"        Arts::SoundServer server = "
"Arts::Reference(\"global:Arts_SoundServer\");\n"
"        Arts::Dispatcher::unlock();\n"
"\n"
"        for(;;) {            /*\n"
"             * you need a lock here, because\n"
"             *  - dereferencing a smartwrapper needs a lock (because it "
"might\n"
"             *    do lazy creation)\n"
"             *  - doing an MCOP invocation needs a lock\n"
"             */\n"
"            Arts::Dispatcher::lock();\n"
"            long seconds = server.secondsUntilSuspend();\n"
"            Arts::Dispatcher::unlock();\n"
"\n"
"            printf(\"seconds until suspend = %d\",seconds);\n"
"            sleep(1);\n"
"        }\n"
"    }\n"
"}"
msgstr ""
"class SuspendTimeThread : Arts::Thread {\n"
"public:\n"
"    void run() {\n"
"        /*\n"
"         * du behöver det här låset därför att:\n"
"         *  - skapa en referens behöver ett lås (eftersom global: går "
"till\n"
"         *    objekthanteraren, som i sin tur kan behöva GlobalComm\n"
"         *    objektet för att slå upp vart anslutningen ska göras)\n"
"         *  - tilldela en smartwrapper behöver ett lås\n"
"         *  - skapa ett objekt från en referens behöver ett lås "
"(eftersom\n"
"         *    det kan behöva ansluta till en server)\n"
"         */\n"
"        Arts::Dispatcher::lock();\n"
"        Arts::SoundServer server = "
"Arts::Reference(\"global:Arts_SoundServer\");\n"
"        Arts::Dispatcher::unlock();\n"
"\n"
"        for(;;) {            /*\n"
"             * du behöver ett lås här, eftersom\n"
"             *  - följa en referens för en smartwrapper behöver ett lås\n"
"             *    (eftersom det kan skapa objektet när det används)\n"
"             *  - att göra ett MCOP-anrop behöver ett lås\n"
"             */\n"
"            Arts::Dispatcher::lock();\n"
"            long seconds = server.secondsUntilSuspend();\n"
"            Arts::Dispatcher::unlock();\n"
"\n"
"            printf(\"sekunder till vänteläge = %d\",seconds);\n"
"            sleep(1);\n"
"        }\n"
"    }\n"
"}"

#: index.docbook:1289
#, no-c-format
msgid "Threading related classes"
msgstr "Trådrelaterade klasser"

#: index.docbook:1291
#, no-c-format
msgid "The following threading related classes are currently available:"
msgstr "Följande trådrelaterade klasser finns tillgängliga för närvarande:"

#: index.docbook:1295
#, no-c-format
msgid ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__Thread.html\"><classname>"
" Arts::Thread</classname></ulink> - which encapsulates a thread."
msgstr ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__Thread.html\"><classname>"
" Arts::Thread</classname></ulink> - som kapslar in en tråd."

#: index.docbook:1295
#, no-c-format
msgid ""
"<ulink url=\"http://www.arts-project.org/doc/headers/Arts__Mutex.html\"> "
"<classname>Arts::Mutex</classname></ulink> - which encapsulates a mutex."
msgstr ""
"<ulink url=\"http://www.arts-project.org/doc/headers/Arts__Mutex.html\"> "
"<classname>Arts::Mutex</classname></ulink> - som kapslar in en mutex."

#: index.docbook:1295
#, no-c-format
msgid ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__ThreadCondition.html\"> "
"<classname>Arts::ThreadCondition</classname></ulink> - which provides "
"support to wake up threads which are waiting for a certain condition to "
"become true."
msgstr ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__ThreadCondition.html\"> "
"<classname>Arts::ThreadCondition</classname></ulink> - som ger stöd för "
"att väcka upp trådar som väntar på att ett visst villkor ska bli sant."

#: index.docbook:1295
#, no-c-format
msgid ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__SystemThreads.html\">"
"<classname>Arts::SystemThreads</classname></ulink> - which encapsulates the "
"operating system threading layer (which offers a few helpful functions to "
"application programmers)."
msgstr ""
"<ulink "
"url=\"http://www.arts-project.org/doc/headers/Arts__SystemThreads.html\">"
"<classname>Arts::SystemThreads</classname></ulink> - som kapslar in "
"operativsystemets trådningslager (och ger några hjälpfunktioner för "
"tillämpningsprogrammerare)."

#: index.docbook:1331
#, no-c-format
msgid "See the links for documentation."
msgstr "Se länkarna för dokumentation."

#: index.docbook:1339
#, no-c-format
msgid "References and Error Handling"
msgstr "Referenser och felhantering"

#: index.docbook:1341
#, no-c-format
msgid ""
"&MCOP; references are one of the most central concepts in &MCOP; "
"programming. This section will try to describe how exactly references are "
"used, and will especially also try to cover cases of failure (server "
"crashes)."
msgstr ""
"&MCOP;-referenser är ett av de mest centrala koncepten i &MCOP; "
"programmering. Det här avsnittet försöker beskriva exakt hur referenser "
"används, och behandlar särskilt felfall (serverkrascher)."

#: index.docbook:1349
#, no-c-format
msgid "Basic properties of references"
msgstr "Grundläggande egenskaper för referenser"

#: index.docbook:1351
#, no-c-format
msgid ""
"An &MCOP; reference is not an object, but a reference to an object: Even "
"though the following declaration <programlisting>\n"
"   Arts::Synth_PLAY p;\n"
"</programlisting> looks like a definition of an object, it only declares a "
"reference to an object. As C++ programmer, you might also think of it as "
"Synth_PLAY *, a kind of pointer to a Synth_PLAY object. This especially "
"means, that p can be the same thing as a NULL pointer."
msgstr ""
"En &MCOP; referens är inte ett objekt, utan en referens till ett objekt: "
"Även om följande deklaration <programlisting>\n"
"   Arts::Synth_PLAY p;\n"
"</programlisting>"
" ser ut som en definition av ett objekt, så deklarerar det bara en referens "
"till ett objekt. Som C++ programmerare, kan du också se den som Synth_PLAY "
"*, en sorts pekare till ett Synth_PLAY-objekt. Det betyder i synnerhet att p "
"kan vara samma sak som en NULL-pekare."

#: index.docbook:1351
#, no-c-format
msgid "You can create a NULL reference by assigning it explicitly"
msgstr "Du kan skapa en NULL-referens genom att explicit tilldela den."

#: index.docbook:1351
#, no-c-format
msgid "Arts::Synth_PLAY p = Arts::Synth_PLAY::null();"
msgstr "Arts::Synth_PLAY p = Arts::Synth_PLAY::null();"

#: index.docbook:1351
#, no-c-format
msgid "Invoking things on a NULL reference leads to a core dump"
msgstr "Att anropa objekt med en NULL-referens orsakar en minnesdump"

#: index.docbook:1351
#, no-c-format
msgid ""
"Arts::Synth_PLAY p = Arts::Synth_PLAY::null();\n"
"   string s = p.toString();"
msgstr ""
"Arts::Synth_PLAY p = Arts::Synth_PLAY::null();\n"
"   string s = p.toString();"

#: index.docbook:1351
#, no-c-format
msgid ""
"will lead to a core dump. Comparing this to a pointer, it is essentially the "
"same as <programlisting>\n"
"   QWindow* w = 0;\n"
"   w-&gt;show();\n"
"</programlisting> which every C++ programmer would know to avoid."
msgstr ""
"orsakar en minnesdump. Om man jämför detta med en pekare, är det i stor "
"sett samma som <programlisting>\n"
"   QWindow* w = 0;\n"
"   w-&gt;show();\n"
"</programlisting> vilket varje C++ programmerare vet att man ska undvika."

#: index.docbook:1351
#, no-c-format
msgid "Uninitialized objects try to lazy-create themselves upon first use"
msgstr "Oinitierade objekt försöker att skapa sig själva när de först används"

#: index.docbook:1351
#, no-c-format
msgid ""
"Arts::Synth_PLAY p;\n"
"   string s = p.toString();"
msgstr ""
"Arts::Synth_PLAY p;\n"
"   string s = p.toString();"

#: index.docbook:1351
#, no-c-format
msgid ""
"is something different than dereferencing a NULL pointer. You didn't tell "
"the object at all what it is, and now you try to use it. The guess here is "
"that you want to have a new local instance of a Arts::Synth_PLAY object. Of "
"course you might have wanted something else (like creating the object "
"somewhere else, or using an existing remote object). However, it is a "
"convenient short cut to creating objects. Lazy creation will not work once "
"you assigned something else (like a null reference)."
msgstr ""
"är något annorlunda än att följa en NULL-pekare. Du talade inte alls om "
"för objektet vad det är, och nu försöker du använda det. Gissningen "
"här är att du vill ha en ny lokal instans av ett Arts::Synth_PLAY-objekt. "
"Du kan förstås ha velat göra något annat (som att skapa objektet någon "
"annanstans, eller använda ett befintligt fjärrobjekt). Det är i alla fall "
"en bekväm genväg för att skapa objekt. Att skapa ett objekt när det "
"först används fungerar inte när du väl har tilldelat det något annat "
"(som en null-referens)."

#: index.docbook:1351
#, no-c-format
msgid ""
"The equivalent C++ terms would be <programlisting>\n"
"   QWidget* w;\n"
"   w-&gt;show();\n"
"</programlisting> which obviously in C++ just plain segfaults. So this is "
"different here. This lazy creation is tricky especially as not necessarily "
"an implementation exists for your interface."
msgstr ""
"Den motsvarande C++ terminologin skulle vara <programlisting>\n"
"   QWidget* w;\n"
"   w-&gt;show();\n"
"</programlisting> som naturligtvis helt enkelt ger ett segmenteringsfel i "
"C++. Så detta är annorlunda här. Det här sättet att skapa objekt är "
"knepigt, eftersom det inte är nödvändigt att det finns en implementering "
"för ditt gränssnitt."

#: index.docbook:1351
#, no-c-format
msgid ""
"For instance, consider an abstract thing like a Arts::PlayObject. There are "
"certainly concrete PlayObjects like those for playing mp3s or wavs, but "
"<programlisting>\n"
"   Arts::PlayObject po;\n"
"   po.play();\n"
"</programlisting> will certainly fail. The problem is that although lazy "
"creation kicks in, and tries to create a PlayObject, it fails, because there "
"are only things like Arts::WavPlayObject and similar. Thus, use lazy "
"creation only when you are sure that an implementation exists."
msgstr ""
"Betrakta till exempel ett abstrakt objekt som ett Arts::PlayObject. Det "
"finns naturligtvis konkreta PlayObjects, som de för att spela mp3-filer "
"eller wav-filer, men <programlisting>\n"
"   Arts::PlayObject po;\n"
"   po.play();\n"
"</programlisting> misslyckas helt säkert. Problemet är att fastän ett "
"PlayObject försöker skapas, så misslyckas det eftersom det bara finns "
"objekt som Arts::WavPlayObject och liknande. Använd därför bara det här "
"sättet att skapa objekt om du är säker på att det finns en "
"implementering."

#: index.docbook:1351
#, no-c-format
msgid "References may point to the same object"
msgstr "Referenser kan peka på samma objekt"

#: index.docbook:1351
#, no-c-format
msgid ""
"Arts::SimpleSoundServer s = "
"Arts::Reference(\"global:Arts_SimpleSoundServer\");\n"
"   Arts::SimpleSoundServer s2 = s;"
msgstr ""
"Arts::SimpleSoundServer s = "
"Arts::Reference(\"global:Arts_SimpleSoundServer\");\n"
"   Arts::SimpleSoundServer s2 = s;"

#: index.docbook:1351
#, no-c-format
msgid ""
"creates two references referring to the same object. It doesn't copy any "
"value, and doesn't create two objects."
msgstr ""
"skapar två referenser som anger samma objekt. Det kopierar inte något "
"värde, och skapar inte två objekt."

#: index.docbook:1351
#, no-c-format
msgid ""
"All objects are reference counted So once an object isn't referred any "
"longer by any references, it gets deleted. There is no way to explicitely "
"delete an object, however, you can use something like this <programlisting>\n"
"   Arts::Synth_PLAY p;\n"
"   p.start();\n"
"   [...]\n"
"   p = Arts::Synth_PLAY::null();\n"
"</programlisting> to make the Synth_PLAY object go away in the end. "
"Especially, it should never be necessary to use new and delete in "
"conjunction with references."
msgstr ""
"Alla objekt referensräknas. Så fort ett objekt inte har några referenser "
"längre, tas det bort. Det finns inget sätt att uttryckligen ta bort ett "
"objekt, men du kan dock använda något sådant här <programlisting>\n"
"   Arts::Synth_PLAY p;\n"
"   p.start();\n"
"   [...]\n"
"   p = Arts::Synth_PLAY::null();\n"
"</programlisting>"
" för att få Synth_PLAY-objektet att försvinna till slut. I synnerhet ska "
"det aldrig vara nödvändigt att använda new och delete i samband med "
"referenser."

#: index.docbook:1480
#, no-c-format
msgid "The case of failure"
msgstr "Fallet med misslyckanden"

#: index.docbook:1482
#, no-c-format
msgid ""
"As references can point to remote objects, the servers containing these "
"objects can crash. What happens then?"
msgstr ""
"Eftersom referenser kan peka på fjärrobjekt, kan servrarna som innehåller "
"de här objekten krascha. Vad händer då?"

#: index.docbook:1487
#, no-c-format
msgid ""
"A crash doesn't change whether a reference is a null reference. This means "
"that if <function>foo.isNull()</function> was "
"<returnvalue>true</returnvalue> before a server crash then it is also "
"<returnvalue>true</returnvalue> after a server crash (which is clear). It "
"also means that if <function>foo.isNull()</function> was "
"<returnvalue>false</returnvalue> before a server crash (foo referred to an "
"object) then it is also <returnvalue>false</returnvalue> after the server "
"crash."
msgstr ""
"En krasch ändrar inte om en referens är en null-referens. Det här betyder "
"att om <function>foo.isNull()</function> var <returnvalue>true</returnvalue>"
" innan en serverkrasch är den också <returnvalue>true</returnvalue> efter "
"en serverkrasch (vilket är självklart). Det betyder också att om "
"<function>foo.isNull()</function> var <returnvalue>false</returnvalue>"
" innan en serverkrasch (foo angav ett objekt) är den också "
"<returnvalue>false</returnvalue> efter serverkraschen."

#: index.docbook:1487
#, no-c-format
msgid ""
"Invoking methods on a valid reference stays safe Suppose the server "
"containing the object calc crashed. Still calling things like "
"<programlisting>\n"
"   int k = calc.subtract(i,j)\n"
"</programlisting>"
" are safe. Obviously subtract has to return something here, which it can't "
"because the remote object no longer exists. In this case (k == 0) would be "
"true. Generally, operations try to return something <quote>neutral</quote> "
"as result, such as 0.0, a null reference for objects or empty strings, when "
"the object no longer exists."
msgstr ""
"Att anropa metoder med en giltig referens förblir säkert. Antag att "
"servern som innehåller objektet calc kraschade. Fortfarande är anrop till "
"objekt som <programlisting>\n"
"   int k = calc.subtract(i,j)\n"
"</programlisting> säkra. Det är uppenbart att subtract måste returnera "
"något här, vilket den inte kan eftersom fjärrobjektet inte längre finns. "
"I det här fallet skulle (k == 0) vara sant. I allmänhet försöker "
"operationer returnera något <quote>neutralt</quote> som resultat, som 0.0, "
"en null-referens för objekt eller tomma strängar, när objektet inte "
"längre finns."

#: index.docbook:1487
#, no-c-format
msgid "Checking <function>error()</function> reveals whether something worked."
msgstr ""
"Att kontrollera med <function>error()</function> avslöjar om något "
"fungerade."

#: index.docbook:1487
#, no-c-format
msgid ""
"In the above case, <programlisting>\n"
"   int k = calc.subtract(i,j)\n"
"   if(k.error()) {\n"
"      printf(\"k is not i-j!\\n\");\n"
"   }\n"
"</programlisting> would print out <computeroutput>k is not "
"i-j</computeroutput> whenever the remote invocation didn't work. Otherwise "
"<varname>k</varname> is really the result of the subtract operation as "
"performed by the remote object (no server crash). However, for methods doing "
"things like deleting a file, you can't know for sure whether it really "
"happened. Of course it happened if <function>.error()</function> is "
"<returnvalue>false</returnvalue>. However, if <function>.error()</function> "
"is <returnvalue>true</returnvalue>, there are two possibilities:"
msgstr ""
"För ovanstående fall, skulle <programlisting>\n"
"   int k = calc.subtract(i,j)\n"
"   if(k.error()) {\n"
"      printf(\"k är inte i-j!\\n\");\n"
"   }\n"
"</programlisting> skriva ut <computeroutput>k är inte i-j</computeroutput> "
"när fjärranropet inte fungerade. Annars är <varname>k</varname>"
" verkligen resultatet av subtraktionsoperationen som utförs av "
"fjärrobjektet (ingen serverkrasch). För metoder som gör saker som att ta "
"bort en fil, kan du inte veta säkert om det verkligen skett. Naturligtvis "
"skedde det om <function>.error()</function> är "
"<returnvalue>false</returnvalue>. Men om <function>.error()</function> är "
"<returnvalue>true</returnvalue>, finns det två möjligheter:"

#: index.docbook:1487
#, no-c-format
msgid ""
"The file got deleted, and the server crashed just after deleting it, but "
"before transferring the result."
msgstr ""
"Filen togs bort, och servern kraschade precis efter den togs bort, men innan "
"resultatet överfördes."

#: index.docbook:1487
#, no-c-format
msgid "The server crashed before beeing able to delete the file."
msgstr "Servern kraschade innan den kunde ta bort filen."

#: index.docbook:1487
#, no-c-format
msgid "Using nested invocations is dangerous in crash resistent programs"
msgstr ""
"Att använda nästlade anrop är farligt i ett program som ska vara "
"kraschsäkert."

#: index.docbook:1487
#, no-c-format
msgid ""
"Using something like <programlisting>\n"
"   window.titlebar().setTitle(\"foo\");\n"
"</programlisting> is not a good idea. Suppose you know that window contains "
"a valid Window reference. Suppose you know that "
"<function>window.titlebar()</function> will return a Titlebar reference "
"because the Window object is implemented properly. However, still the above "
"statement isn't safe."
msgstr ""
"Att använda något som liknar <programlisting>\n"
"   window.titlebar().setTitle(\"foo\");\n"
"</programlisting> är ingen bra Idé. Antag att du vet att fönstret "
"innehåller en giltig fönsterreferens. Antag att du vet att "
"<function>window.titlebar()</function> returnerar en referens till "
"namnlisten eftersom fönsterobjektet är riktigt implementerat. Men satsen "
"ovan är ändå inte säker."

#: index.docbook:1487
#, no-c-format
msgid ""
"What could happen is that the server containing the Window object has "
"crashed. Then, regardless of how good the Window implementation is, you will "
"get a null reference as result of the window.titlebar() operation. And then "
"of course invoking setTitle on that null reference will lead to a crash as "
"well."
msgstr ""
"Vad kan hända om servern som innehåller fönsterobjektet har kraschat. "
"Då, oberoende av hur bra implementeringen av Window är, så kommer du att "
"få en null-referens som resultat av operationen window.titlebar(). Och "
"sedan kommer förstås anropet till setTitle med den här null-referensen "
"också leda till en krasch."

#: index.docbook:1487
#, no-c-format
msgid ""
"So a safe variant of this would be <programlisting>\n"
"   Titlebar titlebar = window.titlebar();\n"
"   if(!window.error())\n"
"      titlebar.setTitle(\"foo\");\n"
"</programlisting> add the appropriate error handling if you like. If you "
"don't trust the Window implementation, you might as well use "
"<programlisting>\n"
"   Titlebar titlebar = window.titlebar();\n"
"   if(!titlebar.isNull())\n"
"      titlebar.setTitle(\"foo\");\n"
"</programlisting> which are both safe."
msgstr ""
"Så en säker variant av detta skulle vara <programlisting>\n"
"   Titlebar titlebar = window.titlebar();\n"
"   if(!window.error())\n"
"      titlebar.setTitle(\"foo\");\n"
"</programlisting> och lägg till den riktiga felhanteringen om du vill. Om "
"du inte litar på implementeringen av Window, kan du lika väl använda "
"<programlisting>\n"
"   Titlebar titlebar = window.titlebar();\n"
"   if(!titlebar.isNull())\n"
"      titlebar.setTitle(\"foo\");\n"
"</programlisting> som båda är säkra."

#: index.docbook:1601
#, no-c-format
msgid ""
"There are other conditions of failure, such as network disconnection "
"(suppose you remove the cable between your server and client while your "
"application runs). However their effect is the same like a server crash."
msgstr ""
"Det finns andra felorsaker, som nerkoppling av nätverket (antag att du tar "
"bort kabeln mellan din server och klient medan ditt program kör). Deras "
"effekt är ändå likadan som en serverkrasch."

#: index.docbook:1607
#, no-c-format
msgid ""
"Overall, it is of course a consideration of policy how strictly you try to "
"trap communcation errors throughout your application. You might follow the "
"<quote>if the server crashes, we need to debug the server until it never "
"crashes again</quote>"
" method, which would mean you need not bother about all these problems."
msgstr ""
"Totalt sett är det förstås en policyfråga hur strikt du försöker "
"hantera kommunikationsfel i hela ditt program. Du kan följa metoden "
"<quote>om servern kraschar, måste vi avlusa den till den aldrig kraschar "
"igen</quote>"
", som skulle betyda att du inte behöver bry dig om alla de här problemen."

#: index.docbook:1618
#, no-c-format
msgid "Internals: Distributed Reference Counting"
msgstr "Interna funktioner: distribuerad referensräkning"

#: index.docbook:1620
#, no-c-format
msgid ""
"An object, to exist, must be owned by someone. If it isn't, it will cease to "
"exist (more or less) immediately. Internally, ownership is indicated by "
"calling <function>_copy()</function>, which increments an reference count, "
"and given back by calling <function>_release()</function>. As soon as the "
"reference count drops to zero, a delete will be done."
msgstr ""
"Ett objekt måste ägas av någon för att finnas till. Om det inte gör "
"det, kommer det upphöra att finnas till (mer eller mindre) omedelbart. "
"Internt anges en ägare genom att anropa <function>_copy()</function>, som "
"räknar upp en referensräknare, och en ägare tas bort genom att anropa "
"<function>_release()</function>. Så fort referensräknaren når noll, så "
"tas objektet bort."

#: index.docbook:1629
#, no-c-format
msgid ""
"As a variation of the theme, remote usage is indicated by "
"<function>_useRemote()</function>, and dissolved by "
"<function>_releaseRemote()</function>. These functions lead a list which "
"server has invoked them (and thus owns the object). This is used in case "
"this server disconnects (&ie; crash, network failure), to remove the "
"references that are still on the objects. This is done in "
"<function>_disconnectRemote()</function>."
msgstr ""
"Som en variation på temat, anges fjärranvändning med "
"<function>_useRemote()</function>, och löses upp med  "
"<function>_releaseRemote()</function>. Dessa funktioner har en lista över "
"vilken server som har anropat dem (och därför äger objektet). Det här "
"används om servern kopplar ner (dvs. krasch, nätverksfel), för att ta "
"bort referenser som fortfarande finns till objektet. Det här görs i "
"<function>_disconnectRemote()</function>."

#: index.docbook:1639
#, no-c-format
msgid ""
"Now there is one problem. Consider a return value. Usually, the return value "
"object will not be owned by the calling function any longer. It will however "
"also not be owned by the caller, until the message holding the object is "
"received. So there is a time of <quote>ownershipless</quote> objects."
msgstr ""
"Nu finns det ett problem. Betrakta ett returvärde. I vanliga fall ägs inte "
"returvärdesobjektet av funktionen som anropas längre. Det ägs inte heller "
"av den som anropar, förrän meddelandet som innehåller objektet har tagits "
"emot. Så det finns en tid med objekt som <quote>saknar ägare</quote>."

#: index.docbook:1647
#, no-c-format
msgid ""
"Now, when sending an object, one can be reasonable sure that as soon as it "
"is received, it will be owned by somebody again, unless, again, the receiver "
"dies. However this means that special care needs to be taken about object at "
"least while sending, probably also while receiving, so that it doesn't die "
"at once."
msgstr ""
"Nu när vi skickar ett objekt kan man vara rimligt säker på att så fort "
"det tas emot, ägs det av någon igen, om inte, återigen, mottagaren "
"kraschar. Det här betyder i alla fall att speciell hänsyn måste tas för "
"objekt åtminstone vid sändning, och troligen också vid mottagning, så "
"att de inte tas bort meddetsamma."

#: index.docbook:1655
#, no-c-format
msgid ""
"The way &MCOP; does this is by <quote>tagging</quote> objects that are in "
"process of being copied across the wire. Before such a copy is started, "
"<function>_copyRemote</function> is called. This prevents the object from "
"being freed for a while (5 seconds). Once the receiver calls "
"<function>_useRemote()</function>, the tag is removed again. So all objects "
"that are send over wire are tagged before transfer."
msgstr ""
"Sättet som &MCOP; gör det här är genom att <quote>tagga</quote> objekt "
"som håller på att kopieras över nätverket. Innan en sådan kopiering "
"börjar, anropas <function>_copyRemote</function>. Det här förhindrar att "
"objektet tas bort på ett tag (5 sekunder). Så fort mottagaren anropar "
"<function>_useRemote()</function>"
", tas taggen bort igen. Så alla objekt som skickas över nätverket, taggas "
"innan överföringen."

#: index.docbook:1664
#, no-c-format
msgid ""
"If the receiver receives an object which is on his server, of course he will "
"not <function>_useRemote()</function> it. For this special case, "
"<function>_cancelCopyRemote()</function> exists to remove the tag manually. "
"Other than that, there is also timer based tag removal, if tagging was done, "
"but the receiver didn't really get the object (due to crash, network "
"failure). This is done by the <classname>ReferenceClean</classname> class."
msgstr ""
"Om mottagaren tar emot ett objekt som finns på samma server, så används "
"förstås inte <function>_useRemote()</function>"
".  I det här specialfallet, finns funktionen "
"<function>_cancelCopyRemote()</function> för att ta bort taggen manuellt. "
"Förutom detta, finns det också en tidsbaserad borttagning av taggen, om "
"taggning gjordes, men mottagaren verkligen inte fick objektet (på grund av "
"krasch, nätverksfel). Det här görs med klassen "
"<classname>ReferenceClean</classname>."

#: index.docbook:1679
#, no-c-format
msgid "&GUI; Elements"
msgstr "Grafiska gränssnittselement"

#: index.docbook:1681
#, no-c-format
msgid ""
"&GUI; elements are currently in the experimental state. However, this "
"section will describe what is supposed to happen here, so if you are a "
"developer, you will be able to understand how &arts; will deal with &GUI;s "
"in the future. There is some code there already, too."
msgstr ""
"Grafiska gränssnittselement är för närvarande på det experimentella "
"stadiet. Det här avsnittet beskriver vad som är meningen ska hända med "
"dem, så om du är en utvecklare, kan du förstå hur &arts; kommer att "
"hantera grafiska gränssnitt i framtiden. Det finns också redan en del kod "
"på plats."

#: index.docbook:1688
#, no-c-format
msgid ""
"&GUI; elements should be used to allow synthesis structures to interact with "
"the user. In the simplest case, the user should be able to modify some "
"parameters of a structure directly (such as a gain factor which is used "
"before the final play module)."
msgstr ""
"Grafiska gränssnittselement ska användas för att låta syntesstrukturer "
"växelverka med användaren. I det enklaste fallet ska användaren kunna "
"ändra några parametrar för en struktur direkt (som en "
"förstärkningsfaktor som används innan den slutliga uppspelningsmodulen)."

#: index.docbook:1695
#, no-c-format
msgid ""
"In more complex settings, one could imagine the user modifying parameters of "
"groups of structures and/or not yet running structures, such as modifying "
"the <acronym>ADSR</acronym> envelope of the currently active &MIDI; "
"instrument. Another thing would be setting the filename of some sample based "
"instrument."
msgstr ""
"För mer komplexa fall, kan man tänka sig att användaren ändrar "
"parametrar för grupper av strukturer och/eller strukturer som inte kör "
"än, som att ändra <acronym>ADSR</acronym> enveloppen för det aktiva  "
"&MIDI;-instrumentet. Något annat skulle kunna vara att ange filnamnet för "
"ett samplingsbaserat instrument."

#: index.docbook:1703
#, no-c-format
msgid ""
"On the other hand, the user could like to monitor what the synthesizer is "
"doing. There could be oscilloscopes, spectrum analyzers, volume meters and "
"<quote>experiments</quote> that figure out the frequency transfer curve of "
"some given filter module."
msgstr ""
"Å andra sidan, skulle användaren kunna vilja övervaka vad synthezisern "
"gör. Det skulle kunna finnas oscilloskop, spektrumanalysatorer volymmätare "
"och <quote>experiment</quote> som till exempel räknar ut "
"frekvensöverföringskurvan för en given filtermodul."

#: index.docbook:1710
#, no-c-format
msgid ""
"Finally, the &GUI; elements should be able to control the whole structure of "
"what is running inside &arts; and how. The user should be able to assign "
"instruments to midi channels, start new effect processors, configure his "
"main mixer pult (which is built of &arts; structures itself) to have one "
"channel more and use another strategy for its equalizers."
msgstr ""
"Till sist, ska grafiska gränssnittselement kunna kontrollera hela "
"strukturen av allt som kör inne i &arts;, och på vilket sätt. Användaren "
"ska kunna tilldela instrument till midi-kanaler, starta nya "
"effektbehandlingssteg, anpassa sin huvudmixerpanel (som själv är byggd av "
"&arts;-strukturer) för att få ytterligare en kanal eller använda en annan "
"strategi för tonkontroll."

#: index.docbook:1719
#, no-c-format
msgid ""
"You see - the <acronym>GUI</acronym>"
" elements should bring all possibilities of the virtual studio &arts; should "
"simulate to the user. Of course, they should also gracefully interact with "
"midi inputs (such as sliders should move if they get &MIDI; inputs which "
"also change just that parameter), and probably even generate events "
"themselves, to allow the user interaction to be recorded via sequencer."
msgstr ""
"Som du ser, ska grafiska gränssnittselement ge alla möjligheterna i en "
"virtuell studio som &arts; simulerar åt användaren. Naturligtvis ska de "
"också växelverka med midi-ingångar (som skjutreglage som också flyttas "
"om de får &MIDI;-indata som ändrar motsvarande parameter), och troligen "
"till och med skapa händelser själva, för att växelverkan med användaren "
"ska kunna spelas in via en sequencer."

#: index.docbook:1728
#, no-c-format
msgid ""
"Technically, the idea is to have an &IDL; base class for all widgets "
"(<classname>Arts::Widget</classname>), and derive a number of commonly used "
"widgets from there (like <classname>Arts::Poti</classname>, "
"<classname>Arts::Panel</classname>, <classname>Arts::Window</classname>, "
"...)."
msgstr ""
"Tekniskt sett är Idén att ha en &IDL;-basklass för alla grafiska "
"komponenter (<classname>Arts::Widget</classname>), och härleda ett antal "
"vanliga komponenter från den (som <classname>Arts::Poti</classname>, "
"<classname>Arts::Panel</classname>, <classname>Arts::Window</classname>, "
"...)."

#: index.docbook:1736
#, no-c-format
msgid ""
"Then, one can implement these widgets using a toolkit, for instance &Qt; or "
"Gtk. Finally, effects should build their &GUI;s out of existing widgets. For "
"instance, a freeverb effect could build it's &GUI; out of five "
"<classname>Arts::Poti</classname> thingies and an "
"<classname>Arts::Window</classname>. So IF there is a &Qt; implementation "
"for these base widgets, the effect will be able to display itself using "
"&Qt;. If there is Gtk implementation, it will also work for Gtk (and more or "
"less look/work the same)."
msgstr ""
"Därefter kan man implementera de här grafiska komponenterna med en "
"verktygslåda, till exempel &Qt; eller Gtk. Till slut, bör effekter bygga "
"sina grafiska gränssnitt från existerande komponenter. En "
"efterklangseffekt skulle till exempel kunna bygga sitt grafiska gränssnitt "
"från fem <classname>Arts::Poti</classname>-mojänger och ett "
"<classname>Arts::Window</classname>"
". Så OM det finns en &Qt; implementering för de här grundkomponenterna, "
"kan effekten visas med &Qt;. Om det finns en Gtk implementering, fungerar "
"det också med Gtk (och ser mer eller mindre likadant ut)."

#: index.docbook:1747
#, no-c-format
msgid ""
"Finally, as we're using &IDL; here, &artsbuilder; (or other tools) will be "
"able to plug &GUI;s together visually, or autogenerate &GUI;s given hints "
"for parameters, only based on the interfaces. It should be relatively "
"straight forward to write a <quote>create &GUI; from description</quote> "
"class, which takes a &GUI; description (containing the various parameters "
"and widgets), and creates a living &GUI; object out of it."
msgstr ""
"Till sist, eftersom vi använder &IDL; här, kan aRts-byggaren (eller andra "
"verktyg) sätta ihop grafiska gränssnitt visuellt, eller automatgenerera "
"grafiska gränssnitt, med tips för parametervärden, enbart baserat på "
"gränssnitten. Det borde vara ganska rättframt att skriva en klass för att "
"<quote>skapa grafiskt gränssnitt från en beskrivning</quote>, som tar en "
"beskrivning av ett grafiskt gränssnitt (som innehåller de olika "
"parametrarna och grafiska komponenterna), och skapar ett levande objekt för "
"ett grafiskt gränssnitt från den."

#: index.docbook:1757
#, no-c-format
msgid ""
"Based on &IDL; and the &arts;/&MCOP; component model, it should be easy to "
"extend the possible objects which can be used for the &GUI; just as easy as "
"it is to add a plugin implementing a new filter to &arts;."
msgstr ""
"Baserat på &IDL; och &arts;/&MCOP;-komponentmodellen, bör det vara lätt "
"att utöka de möjliga objekten som kan användas för det grafiska "
"gränssnittet precis lika lätt som det är att lägga till en insticksmodul "
"till &arts; som till exempel implementerar ett nytt filter."
