7. SKAPA LJUD

7.1 PROGRAMMERA LJUD UTAN ATT VARA PROGRAMMERARE

De flesta programmerare använder datorljud av två orsaker: att skapa musik och för att göra ljudeffekter. Innan vi börjar med djupsinnigheter i hur man programmerar ljud ska vi se på hur ett typiskt ljudprogram är uppbyggt... och ge dig ett kort ljudprogram som du kan experimentera med.

7.2 UPPBYGGNAD AV LJUDPROGRAM

Till att börja med finns det 5 inställningar som du måste känna till för att skapa ljud med din Commodore 64: VOLYM, ATTACK/DECAY, SUSTAIN/RELEASE (ADSR), VÅGFORMKONTROLL och HÖG FREKVENS/LÅG FREKVENS. De första tre inställningarna görs vanligtvis EN GÅNG i början av ditt program. Hög och låg frekvensinställning måste ställas om för varje ton du spelar. Vågformkontrollen startar och stoppar varje ton. Här följer hur ett typiskt Ijud/musik program är uppbyggt.

7.3 LJUDDEMOPROGRAM

Innan du börjar måste du välja en stämma. Det finns 3 stämmor. Varje stämma kräver ljudinställningar för vågform etc. Du kan spela 1-, 2- eller 3-stämmigt men vårt lilla program använder enbart STÄMMA NUMMER 1. Skriv in detta program rad för rad... kom ihåg att trycka RETURN efter varje rad.
1. Nollställ först ljudkretsen. 5 FOR L=54272 TO 54296:POKE L,0:NEXT
2. Sätt på full VOLYM. 10 POKE 54296, 15
3. Sätt ATTACK/DECAY nivå för att bestämma hur snabbt en ton ökar till och faller från sin högsta ljudstyrka (0 till 255). 20 POKE 54277, 190
4. Sätt SUSTAIN/RELEASE värde för att bestämma nivån på den förlängda tonen och hastigheten den sedan ska tona ner med. 30 POKE 54278, 248
5. Leta rätt på den not/ton du vill spela i tabellen i appendix M och skriv in HÖG. FREKVENS och LÅG-FREKVENS värde för den ton. (Varje ton kräver 2 POKEvärden.) 40 POKE 54273, 17:POKE 54272, 37
6. Starta VÅGFORM med en av 4 standardinställningar (17, 33, 65 eller 129). 50 POKE 54276, 17
7. Skriv en fördröjningsloop för att bestämma VARAKTIGHETEN av tonen som spelas (en kvartsnot är ca. "250" men kan variera då längre program kan påverka tiden) 60 FOR T=1 TO 250:NEXT
8. Stäng av TONEN 70 POKE 54276,16

För att lyssna till den ton du just skapade, skriv RUN och tryck på RETURN. För att se eller ändra i programmet skriv LIST och tryck på RETURN (Glöm inte att spara ditt demo-program på kassett eller disk.

7.4 GÖR MUSIK MED COMMODORE 64

Du behöver inte vara musiker för att kunna göra musik med din Commodore 64! Allt du behöver kunna är några stycken enkla tal som talar om för din dator hur stark volym, vilka toner, hur länge de ska ljuda etc. Men först... här följer ett program som ger dig en snabb demonstration av Commodore 64 otroliga musikförmåga, genom att använda en av datorns 3 separata stämmor.

Skriv ordet NEW och tryck RETURN. så raderas ditt tidigare program. Skriv därefter in följande program och skriv RUN och tryck RETURN

    5 REM SKALA ←------------------------- Programmets titel
    7 FOR L=54272 TO 54296:POKE L,0:NEXT
   10 POKE 54296,15 ←--------------------- Sätter full volym
   20 POKE 54277,7:POKE 54278,133 ←------- Sätter ADSR (varje ton)
   50 READ A ←---------------------------- Läser första DATA i rad 110.
   60 READ B ←---------------------------- Läser andra talet på rad 110
                                           DATA.
   70 IF B=-1 THEN END ←------------------ Programmet stänger av de två
                                           stämmorna och avslutar när det
                                           läst -1 på rad 900.
   80 POKE 54273,A:POKE 54272,B ←--------- POKEar det första talet från DATA
                                           på rad 110 (A=17) som HÖG
                                           FREKVENS och det andra talet
                                           (B=37) som LÅG FREKVENS. Nästa
                                           gång programmet loopat runt läser
                                           det A som 19 och B som 63, osv.
                                           Dessa tal POKEas in i HÖG och
                                           LÅG-FREKVENSREGISTREN. Adresserna
                                           är för HÖG FREKVENS=54273 och LÅG
                                           FREKVENS=54272 för stämma 1.
   85 POKE 54276,17 ←--------------------- Startar tonen
   90 FOR T=1 TO 250:NEXT:POKE 54276,16 ←- Spelar tonen och stänger därefter
                                           av den.
   95 FOR T=1 TO 50:NEXT ←---------------- RELEASE-tiden.
  100 GOTO 20 ←--------------------------- Loopar tillbaka för att
                                           återställa KONTROLLER och spela
                                           en ny ton.
  110 DATA 17,37,19,63,21,154,22,227 ←---- Not-värde från tabell appendix 7.
  120 DATA 25,177,28,214,32,94,34,175 ←--- Varje par siffror representerar
                                           en not. Exempelvis, 17 och 37
                                           representerar "C" i fjärde
                                           oktaven, 19 och 63 representerar
                                           "D" osv.
  900 DATA -1,-1 ←------------------------ När programmet når -1 stängs
                                           HÖG/LÅGFREKVENSERNA av och
                                           programmet avslutas som
                                           instrueras på rad 70.
För att förändra Ijudet till "cembalo", ändra så det står följande på rad 85:
  POKE 54276,33
och rad 90 till:
  FOR T=1 TO2 50:NEXT:POKE 54276,32
och kör programmet igen. (Ändra programmet genom att trycka ned RUN/STOP-tangenten för att stoppa det, skriv därefter LIST och tryck RETURN). Skriv därefter på nytt den programrad du vill ändra, den nya raden ersätter automatiskt den tidigare med samma radnummer. Vad vi gjorde här var att ändra VÅGFORMEN från triangelform till sågtandsform. Förändring av vågformen kan drastiskt ändra Ijudet från Commodore 64... men... vågform är endast en av flera inställningar du kan ändra för att skapa olika musikaliska klanger och ljudeffekter! Du kan också ändra ATTACK/DECAY förhållandet för varje ton... exempelvis kan du ändra "cembalo" att låta mera "banjo"-likt genom att ändra rad 20 och lägga till rad 30.
  20 POKE 54277,193
  30 POKE 54278,8 ←----------------- Sätter SUSTAIN till 0 för "banjoljud"

Som du just sett, kan du få Commodore 64's ljud att låta som olika musikinstrument. Låt oss studera hur varje ljudinställning fungerar.

7.5 VIKTIGA LJUDKONTROLLER

1. VOLYM -- För att starta ljudet och ställa in högsta ljudstyrka, skriv: POKE54296,15. Volyminställningen sträcker sig från 0 till 15 men du kommer vanligtvis att använda 15. För att stänga av Ijudet skriv:
  POKE54296,0

Du behöver enbart ställa in volymen EN GÅNG i början av ditt program, eftersom inställningen aktiverar alla tre stämmorna i Commodore 64. (Förändring av volymen under det att en ton spelas eller i en ljudeffekt hörs kan skapa ett intressant "sound" men är utanför vad vi tar upp i denna bruksanvisning).

2. ADSR och VÅGFORMKONTROLLINSTÄLLNING -- Du har redan konstaterat hur en ändring av vågform kan ändra "soundet" från "xylofon" till "cembalo". Varje stamma har sin egen VÅGFORMKONTROLL vilken låter dig bestämma en av fyra vågformer: Triangel, sågtand, puls (fyrkant) och brus. Kontrollen aktiverar också Commodore 64's ADSR funktion, men vi återkommer strax om detta. Ett prov på vågformsstart kan se så här ut:

  POKE 54276,17
där det första talet (54276) representerar kontrollen för stämma 1 och det andra talet (17) representerar start av triangelvågform. Inställningar för varje stämma och vågformskombination visas i tabellen nedan.

7.6 ADSR OCH VÅGFORMINSTÄLLNINGAR

TON START/STOPP VÄRDEN

 KONTROLLTRIANGELSÅNGTANDPULSBRUS
STÄMMA 15427617/1633/3265/64129/128
STÄMMA 25428317/1633/3265/64129/128
STÄMMA 35429017/1633/3265/64129/128

Även om KONTROLLREGISTREN är olika för varje stäma är vågformsvärdena samma för varje typ av vågform. För att förstå hur detta fungerar, se på rad 85 och 90 i programmet som spelade skalan. l detta program, direkt efter att vi satt frekvensen på rad 80 ställde in KONTROLLINSTÄLLNINGARNA för stämma 1 på rad 85 genom: POKE54276,17. Detta startade stämma 1 med triangelvåg (17). På rad 70 stoppade vi tonen genom POKE54276,16. Därefter ändrade vi VÅGFORMS-startinställningen från 17 till 33 för att skapa en sågtandsform och detta gav skalan cembalo-"sound". Nu förstår du hur KONTROLLREGISTRET och VÅGFORM hor ihop. Att ställa in vågform görs på samma sätt som volyminställning, med den skillnaden att varje stämma har sin egen inställning och att istället för att POKEa ett volymvärde definierar vi vågformen. Nu ska vi se på en annan aspekt på ljud... ADSR-egenskapen.

3. ATTACK/DECAY-INSTÄLLNING -- om vi nämnde tidigare, styr KONTROLLREGISTRET inte enbart vågorna utan aktiverar också ADSR, eller ATTACK/DECAY/SUSTAIN/RELEASE egenskaperna hos Commodore 64. Vi ska börja med att se på ATTACK/DECAY inställningen. Tabellen nedan visar de olika ATTACK/DECAY nivåerna för varje stämma. Om du inte är bekant med ljuduttrycken ATTACK och DECAY kan du föreställa dig ATTACK som ett mått på den tid det tar för en ton att nå sin högsta Ijudstyrka. Decay är motsatsen, ett mått på hur snabbt en ton faller från sin högsta Ijudstyrka tillbaka till SUSTAIN nivå. Följande tabell visar ATTACK/DECAY inställning. Lägg märke till att DU MÅSTE KOMBINERA ATTACK OCH DECAY INSTÄLLNINGARNA GENOM ATT ADDERA DEM OCH SKRIVA IN TOTALA VÄRDET. Du kan exempelvis ställa in HÖG ATTACK och LÅG DECAY genom att addera värdet för låg attack (64) med värdet för låg decay (2). Summan (66) talar om för datorn att ställa in högt attack- och lågt decay-förhållande. Du kan också öka attackförhållandet genom att addera samman dem (128 + 64 + 32 + 16 = högsta möjliga attackförhållande = 240).

7.7 ATTACK/DECAY-INSTÄLLNINGAR

ATTACK/DECAY-INSTÄLLNINGHÖG ATTACKMEDIUM ATTACK LÅG ATTACKLÄGSTA ATTACKHÖG DECAYMEDIUM DECAYLÅG DECAY LÄGSTA DECAY
STÄMMA 1542771286432168421
STÄMMA 2542841286432168421
STÄMMA 3542911286432168421

Om du ställer in ett attackförhållande utan decay blir decay automatiskt 0, och omvänt. Exempelvis om du skriver POKE 54277,64 sätts medium attack med noll decay för stämma 1. Skriver du POKE 54277,66 sätter du medium attack och lågt decay förhållande (eftersom 66 = 64 + 2 sätts båda inställningarna). Du kan också addera flera attackvärden, eller flera decayvärden. Du kan exempelvis addera låg attack (32) och medium attack (64) far ett kombinerat attackförhållande av 96, därefter addera medium decay med 4 och... hokuspokus.. POKE 54277,100.

Nu är det bäst att demonstrera effekterna genom ett kort program. Skriv ordet NEW, tryck RETURN. och skriv in detta program och kör det.

   5 FOR L=54272 TO 54296:POKE L,0:NEXT 
  10 PRINT "TRYCK EN TANGENT"
  20 POKE 54296,15
  30 POKE 54277,64
  50 POKE 54273,17 : POKE 54272,37
  60 GET K$ : IF K$ = "" THEN 60
  70 POKE 54276,17: FOR T=1 TO 200: NEXT
  80 POKE 54276,16: FOR T=1 TO 50: NEXT
  90 GOTO 20

Här har vi använt STÄMMA 1 för att skapa en ton i taget... med medium attack och noll decay. Nyckelraden är rad 30. Genom POKE med 64 av attack/decay inställningen aktiveras ett medium attack förhållande. Resultatet låter som någon som studsar en boll i ett tomt oljefat. Tryck RUN/STOP-tangenten och stoppa programmet. Skriv LIST och tryck RETURN Skriv följande rad och tryck RETURN. (den nya raden 30 ersätter automatisk den gamla raden med samma radnummer):

  30 POKE 54277,190

Skriv ordet RUN och tryck RETURN så får du se hur det låter. Vad vi gjort nu är att vi kombinerat flera attack- och decay-inställningar. Inställningarna är: HÖG ATTACK(128) + LÅG ATTACK(32) + LÄGSTA ATTACK(16) + HÖG DECAY(8) + MEDIUM DECAY(4) + LÅG DECAY(2) = 190.

Detta påverkar ljudet att låta som en oboe eller något annat rörblåsinstrument. Om du vill experimentera, prova med att ändra vågform och attack/decay värden i programmet som spelade skalan för att höra hur en oboe låter. Därigenom kan du se hur förändring av attack/decay kan användas för att skapa olika typer av ljudeffekter.

4. SUSTAIN/RELEASE INSTÄLLNINGEN. Så som ATTACK/DECAY aktiveras av ADSR/VÅGFORM-kontrollregistret aktiveras även SUSTAIN/RELEASE av samma register. SUSTAIN/RELEASE låter dig "förlänga" en del av ett speciellt ljud, på samma sätt som sustain-pedalen på en orgel eller piano förlänger tiden innan en ton klingat ut. Vilken som helst ton eller ljudeffekt kan förlängas vid vilken som helst av 16 ljudnivåer... du kan även sätta SUSTAIN på maximum (240) och låta tonen spelas oändligt. SUSTAIN/RELEASE-inställningen kan användas i en FOR... NEXT-loop för att bestämma hur länge tonen ska hållas på SUSTAIN Ijudstyrka innan den avslutas (RELEASE). Följande tabell visar de tal som ska POKEas för att nå olika SUSTAIN/RELEASE-förhållande.

7.8 SUSTAIN/RELEASE-INSTÄLLNINGAR

SUSTAIN/RELEASE RATE SETTINGS
SUSTAIN/RELEASEHÖGMEDIUMLÅGLÄGSTA HÖGMEDIUMLÅGLÄGSTA
KONTROLLADRESSSUSTAINRELEASE
STÄMMA 1542781286432168421
STÄMMA 2542851286432168421
STÄMMA 3542921286432168421

Om du exempelvis använder STAMMA 1, kan du ställa in ett högt SUSTAIN-värde genom att skriva: POKE 54278, 128 eller du kan kombinera ett högt SUSTAIN-värde med ett lågt RELEASE-värde genom att addera 128+2 och sedan skriva POKE 54278,130. Här kommer samma demonstrationsprogram som vi använde i ATTACK/DECAY avsnittet tidigare... nu utökat med SUSTAIN/RELEASE. Lägg märke till skillnaden i "sound".

   5 FOR L=54272 TO 54296:POKE L,0:NEXT
  10 POKE 54296,15
  20 POKE 54277,64
  30 POKE 54278,128
  40 POKE 54273,17 : POKE 54272,37
  50 PRINT "TRYCK EN TANGENT"
  60 GET K$ : IF K$ = "" THEN 60
  70 POKE 54276,17: FOR T=1 TO 200: NEXT
  80 POKE 54276,16: FOR T=1 TO 50: NEXT
  90 GOTO 20

På rad 30 ber vi datorn att förlänga (SUSTAIN) tonen med HÖG SUSTAIN-nivå (128 från tabellen ovan), varefter tonen blir RELEASEad) på rad 80. Du kan variera tiden för en ton genom att ändra TO-värdet i rad 70. For att se effekten av att använda RELEASE prova med att ändra rad 30 till: POKE54278,89 (SUSTAIN:80,RELEASE=9).

5. VÄLJA STÄMMA OCH STÄLLA IN HÖG/LÅG FREKVENS Varje individuell ton hos Commodore 64 kräver 2 separata POKE-instruktioner... en för HÖG FREKVENS och en för LAG FREKVENS. Tabellen över musiktonernas värde finns i bilaga M vilken visar vilka POKE-värden som erfordras för att spela de olika tonerna inom Commodore 64's åtta oktavområden. HÖG och LÅG-FREKVENS-kommandona är olika för varje stämma du använder. Detta medger att du kan programmera alla tre stämmorna var för sig för att skapa 3-stämmig musik eller exotiska ljudeffekter.

HÖG och LÅG-FREKVENS POKE-värde för varje stämma visas i tabellen nedan, vilken också innehåller tonvärden för den mellersta (femte) oktaven.
MUSIKTONER -- FEMTE OKTAVEN
STÄMMA och FREKVENSPOKE-NUMMERCC#DD#E FF#GG#AA#BCC#
STÄMMA 1/HÖG542733436384043454851545761646872
STÄMMA 1/LÅG5427275851262005219812797111172126188149169
STÄMMA 2/HÖG542803436384043454851545761646872
STÄMMA 2/LÅG5427975851262005219812797111172126188149169
STÄMMA 3/HÖG542873436384043454851545761646872
STÄMMA 3/LÅG5428675851262005219812797111172126188149169

Som du ser, finns det två inställningar för varje stämma. En HÖG- och en LÅGFREKVENS inställning. För att spela en ton måste du POKEa ett värde i HÖGFREKVENS- och ett värde i LÅGFREKVENS-registren. Genom att använda ovanstående tabell finner vi att inställningen för tonen C i förste stämmans femte oktav skrives:

  POKE 54273,34:POKE 54272,75
Samma ton i stämma 2 blir:
  POKE 54280,34:POKE 54279,75
Använder vi detta i programmet ser det ut så här:
   5 FORL=54272TO54296:POKEL,0:NEXT
  10 V=54296:W=54276:A=54277:  ←---- Låter adresser motsvaras av bokstav
     S=54278:H=54273:L=54272
  20 POKE V,15:POKE A,190:POKE S,89 ←Sätter VOLYN, ADSR
  30 POKE H,34:POKE L,75  ←--------- HÖG/LÅG FREKVENS
  40 POKE W,33:FOR T=1 TO 200:NEXT ← Startar tonen, låter den spela
  50 POKE W,32  ←------------------- Stänger av tonen

7.9 SPELA ETT STYCKE PÅ COMMODORE 64

Följande kan användas för att komponera eller spela ett musikstycke med stämma 1. Det är två viktiga lärdomar i detta program. Lägg märke till hur vi namnger alla de långa registeradresserna i programmets första rad. Därefter kan vi använda bokstaven W för "VÅGFORM" istället för 54276.

Den andra lärdomen gäller det sätt vi använder DATA. Detta program är gjort så att du ska skriva in tre värden för varje ton: HÖG FREKVENS, LAG FREKVENS och TIDEN som tonen ska spelas.

För detta stycke används en tidsfördröjning av 125 för en åttondelston, 250 för en fjärdedelston, 375 för en punkterad fjärdedelston, 500 för en halvton och 1000 för en helton. Dessa värden kan ökas eller minskas för att passa ett speciellt tempo, eller din egen musiksmak.

För att förstå hur ett stycke skrivs in studera rad 100. Vi skrev in 34 och 75 som HÖG och LAG FREKVENS-inställning för att spela tonen "C" (från tabellen på föregående sida) och därefter värdet 250 för en fjärdedelston. Därför blir den första tonen i vårt stycke en fjärdedelston "C". Den andra tonen är också en fjärdedel, denna gång tonen "E"... och så fortsätter det till slutet på stycket. Du kan skriva in nästan vilket stycke som helst på detta sätt och använda så många DATA rader du behöver. Du kan fortsätta skriva ton och varaktighetsvärden över flera rader men varje ny programrad måste börja med ordet "DATA". DATA-1,-1,-1 ska vara den sista raden i ditt program. Denna rad avslutar stycket.

Skriv ordet NEW för att radera tidigare program och skriv därefter in följande program. Skriv RUN och tryck RETURN så för då höra melodin:

MICHAEL ROW THE BOAT ASHORE -- FÖRSTA TAKTEN

  5 V=54296:W=54276:A=54277:HF=54273:LF=54272:S=54278:PH=54275:PL=54274
  10 POKEV,15:POKEW,65:POKEA,190:POKEPH,15:POKEPL,15
  20 READH
  30 READL
  40 READD
  50 IFH=-1THENEND
  60 POKEHF,H:POKELF,L
  70 FORx=D-50TOD-20:POKES,136:NEXT
  80 FORt=1TOD:NEXT:POKEHF,0:POKELF,0:POKEW,0
  90 GOTO10
  100 DATA34,75,250,43,52,250,51,97,375,43,52,125,51,97
  105 DATA250,57,172,250
  110 DATA51,97,500,0,0,125,43,52,250,51,97,250,57,172
  115 DATA1000,51,97,500
  120 DATA-1,-1,-1
(Hämta)

7.10 SKAPA LJUDEFFEKTER

Till skillnad från musik är Ijudeffekter ofta knutna till en speciell programhändelse så som explosion från ett rymdskepp när det krockar med en barriär i ett rymdspel... eller varningssurr i ett seriöst program, varnande för att du t.ex. är på väg att radera flexskivan.

Du har möjligheter att själv skapa olika Ijudeffekter. Här följer 10 program-idéer som kan hjälpa dig igång att experimentera med Ijudeffekter:

  1. Förändra volymen under tiden tonen spelas, för att exempelvis skapa en ekoeffekt.
  2. Variera snabbt mellan två toner för att skapa "vibrato".
  3. VÅGFORM... prova olika inställningar för varje stämma.
  4. Attack/Decay... för att ändra hur snabbt ljudet stiger mot högsta volym och hur snabbt det avtar igen.
  5. Sustain/Release... för att förlänga eller minska ljudet av en ljudeffekt, eller för att kombinera en serie av ljud. Prova med olika inställningar.
  6. Flerstämmiga effekter... spela mer än en stämma samtidigt, varje stämma oberoende styrd, eller en stämma spelande längre eller kortare än en annan, eller som tjänar som ett eko eller svar på den första tonen.
  7. Förändra toner I skalan, eller byt oktav, genom att använda toner ur tabellen MUSIKTONERS VÄRDE.
  8. Använd pulsvågform och olika pulsinställningar för att skapa olika ljudeffekter.
  9. Använd brusvågform för att skapa "vitt brus" för att accentuera toner eller för att skapa explosioner, pistolskott eller fotsteg. Samma musikaliska toner som skapar musiken kan också användas tillsammans med BRUS för att skapa olika typer av vitt brus.
  10. Kombinera flera HÖG/LÅG FREKVENSER i snabb följd över flera oktaver.
  11. Filter... prova det extra POKEkommandona i bilaga M.

7.11 ENKLA LJUDEFFEKTER DU KAN PROVA

Följande program kan användas till i stort sett alla BASIC program. De har tagits med för att ge dig några program-idéer och demonstrera Commodore 64's Ijudeffektegenskaper.

Lägg märke till den programmeringsgenväg vi använder på rad 10. Vi kan förkorta långa besvärliga ljudregisternummer genom att definiera dem som enkla, lättanvända bokstäver (numeriska variabler). Rad 10 betyder helt enkelt att dessa lätt ihågkommna bokstäver kan användas i stället för de långa nummer vi använda tidigare. Här betyder V = Volym, W = vågform, A = attack/Decay, H = hög frekvens (stämma 1), L = låg frekvens (stämma 1). Vi använder sedan dessa bokstäver istället för siffrorna i vårt program... vilket gör vårt program kortare, inskrivningen kortare och ljudinställningarna lättare att komma ihåg.

DOCKGRÅT

  10 V=54296 : W=54276 : A=54277 : H=54273 : L=54272
  20 POKE V,15 : POKE W,33 : POKE A,15
  30 FOR X = 200 TO 5 STEP -2 : POKE H,40 : POKE L,X : NEXT
  40 FOR X = 150 TO 5 STEP -2 : POKE H,40 : POKE L,X : NEXT
  50 POKE W,0

LJUD AV SKOTT... med hjälp av stämma 1, brus-vågform och avtagande volym.

  10 V=54296 : W=54276 : A=54277 : H=54273 : L=54272
  20 FOR X = 15 TO 0 STEP -1 : POKE V,X : POKE W,129:
     POKE A,15 : POKE H,40 : POKE L,200 : NEXT
  30 POKE W,0 : POKE A,0
[ ← Föregående | Innehållsförteckning | Nästa → ]
[HTML 4.01]
Peter Krefting / $Date: 2009-10-08 13:34:08 $ / peter@softwolves.pp.se