Funsound is geschreven om snel kleine synthetische geluidjes te kunnen samenstellen voor gebruik in games etc. Het programma is in minder dan een dag snel even inelkaar geflansd omdat ik meer werk had met die geluidjes te vinden om ze vervolgens te kunnen samplen. De userinterface en de afwerking is dan ook ronduit slecht, maar is handelbaar als je weet wat je moet doen. Voor mensen zonder sampler kan (ja, kan) dit een handig progje zijn. Wanneer je het programma opstart zie je linksboven een groot kader, hierin kun je met de mouse een waveform 'tekenen' over 256 bytes. Deze waveform wordt x-maal achter elkaar geplakt met een gemoduleerde frequentie en volume. Het volumeverloop bepaal je met een programma, dat je in iedere (ascii)teksteditor kunt schrijven. Dit programeertaaltje kent de volgende instructies: S (SET) frequentie,volume A (ADD) frequentie,volume M (MULTIPLY) frequentiefactor,volumefactor D (DIVIDE) frequentiefactor,volumefactor H (HOLD) times,0 R (REPEAT) times,0 E (ENDREPEAT) 0,0 een programma zou er zo uit kunnen zien: S 500,128 R 40,0 A 5,1 H 1,0 E 0,0 R 40,0 A 5,-2 H 1,0 E 0,0 De eerste instructie initialiseert de frequentie op 500Hz en het volume op 128. Vervolgens wordt het begin van de loop aangegeven die 40 maal herhaald moet worden. (je kunt loops niet nesten!) Nu wordt er 5 bij de frequentie opgeteld en 1 bij het volume. Hold 1 geeft de opdracht om de nu berekende nieuwe golfvorm gedurende 1 periode vast te houden. Vervolgens de loop-end opdracht. Bovenstaande wordt nu nog 39 maal herhaald. Vervolgens wordt een nieuwe loop geinitialiseerd die ook 40 maal doorlopen moet worden. Bij de frequentie wordt weer 5 opgeteld en er wordt 2 van het volume afgetrokken. Deze stage wordt weer 1 periode aangehouden en de endrepeat geeft weer aan dat de loop is afgesloten. Het princiepe is dus: Je definieert een waveform van 256 bytes en deze wordt vervolgens x maal gecopieerd.(voor elke H y,0 y maal dus x=de som van de holdopdrachten, in bovenbstaand voorbeeld dus 80.) Deze waveform wordt door de frequentiesturing uit je programma beinvloed in de breedte (hoe hoger je frequentie, hoe minder meetpunten uit de 256 worden gebruikt) en door de volumesturing in de hoogte. Let er wel op dat de buffer waarin de waveforms achter elkaar geplakt worden maar 25600 bytes groot is! Alle parameters voor de instructies zijn integers (om de parser makkelijk te houden...), maar als je bijvoorbeeld de frequentie met 1.07 wilt vermenigvuldigen kun je dat bereiken door: M 107,0 D 100,0 Let er ook op dat je altijd en de frequentie parameter en de volume parameter moet specificeren; als je wilt dat 1 van beide niet veranderd, dus onaangetast blijft, specificeer dan 0. Pas op het moment dat je een H(old) instructie geeft wordt de dan berekende golf daadwerkelijk gecopieerd. Wanneer je zo een totale golfvorm hebt berekend wordt deze in het geheugen opgeslagen en in het kader helemaal onder in het beeld verkleind weergegeven. Deze zo rekenkundig gecreerde 'sample' kan nu beluisterd worden en als raw data op disk opgeslagen (altijd onder de naam Sample.bin). De gein zit hem erin dat deze sample gewoon door DMA kan worden afgespeeld en je geen processortijd (kostbaar in games....) kwijt bent aan het modificeren van volume en periode. (Natuurlijk mag het nog wel.....). Nou je (ongeveer) begrijpt wat de bedoeling is zal ik aangeven wat de verschillende beeldschermfuncties doen: Allereerst dus het grootste kader waarin je met de mouse de waveform 'tekent'. Meteen daaronder 3 balkjes waarmee je met nummer 1 de grove uitspeelperiode bepaalt. (dit is de waarde die in AUDxPER wordt gezet als je dat iets zegt.... Standaard op 124 ingesteld (het snelst)) 2 de fijne afregeling van bovenstaande. 3 De basisfrequentie in Hz waarbij de 256 meetpunten uit je waveform volledig worden meegenomen. Standaard staat deze op 110Hz. Volgende formule is misschien handig: aantal gebruikte meetpunten voor berekende en gecopieerde periode = basisfrequentie/gewenste frequentie * 256. 1 en 2 mag je altijd gewoon aanpassen en direct de sample weer afspelen, voor punt 3 moet je eerst de golfvorm opnieuw laten berekenen. Links zie je vervolgens de woorden: LOAD (preset 1..8 voor wave of programma loaden) CALC (berekenen van waveform) PLAY (afspelen van berekende waveform) QUIT (back to where we came from.....) SAVE (preset 1..8 voor wave saven) SAMPLE (gegenereerde sample op disk saven als rawdata (Sample.bin)) Naast deze woorden zie je 2 rijen van 8 puntjes, hiermee geef je een preset aan. De eerste rij de waveform preset 1..8 en de tweede rij de programma preset van 1..8. Na het aanklikken van zo'n puntje (een behendigheidsspel op zich.... sorry) kun je ingeval van waveform op LOAD of SAVE drukken, en in geval van programma op LOAD drukken. (Je programmas MOETEN DATA1 t/m DATA8 heten voor de respectievelijke presets, je waves heten altijd WAVE1 t/m WAVE8 maar deze worden toch altijd door het programma zelf gesaved met juiste naam) Nadat je een waveform hebt getekend of geload en een programma hebt geload kun je op CALC drukken en wordt de resulterende sample berekend. Nu kun je de gegenereerde sample beluisteren door op PLAY te drukken, de sample wordt dan 1 maal gespeeld. Als je op SAMPLE drukt wordt de berekende sample op disk gesaved onder de naam Sample.bin. (Let erop dat FunSound de files Sample.bin, DATA1..8 en WAVE1..8 in de current directory saved/load !!!). Onder de woorden zie je 3 getallen onderelkaar: het eerste geeft het getal aan dat in AUDxPER moet worden gezet, de periode waarmee het DMA kanaal de sample naar buiten gooit. Het tweede geeft de basisfrequentie aan. Het derde geeft de lengte van de berekende sample aan in bytes. Als je dit een beetje begrijpt moet het lukken om een sampletje te maken dacht ik..... Nogmaals : don't expect magic, het programma is alleen geschreven om snel wat bliep-bliep geluidjes te maken voor in wat games. Misschien dat ik een echte uitgebreide versie van dit programma (met userinterface en meer mogelijkheden) schrijf als ik wat meer tijd heb, het concept bevalt me wel. Als je contact met me op wilt nemen: Jeroen Sparla Ganzediepstraat 34 7523 PH Enschede Nederland (Je mag ook bellen (voice), als je er tussen kunt komen: 053-337261).