CLSQÿÿrË· œœSoundEffectTestR%R( StdProjectã+»N„…†‰Ž‰”‰Ž „•Œ… Sound;|******************************************************************************|Cluster-Soundmodul: DefinitionenS. Herr, 28.09.1992|******************************************************************************|HISTORY:|Version 0.1, 04.12.1990: Beginn|Version 0.2, 15.12.1990: Versch. Änderungen|Version 0.3, 24.12.1990, nach einigen Änderungen nun Entscheidung für|globales Instrumente- und Pattern-Array!!|Version 0.4, 17.04.1991|Version 0.5-0.8: verschiedene kleinere Änderungen|Version 0.9, 05.07.1992, es hat bisher keine Änderungen des Definition|Modules mehr gegeben. Jetzige Änderungen betreffen Anpassung an verschiedene|Videonormen und die Teilung der Soundkanäle zwischen Songs und|Simple Effects.|Version 1.0, 28.09.1992: Vorläufig endgültige Version.|Bemerkung: Es muß noch eine Möglichkeit geschaffen werden, innerhalb eines|Songs verschiedene Untersongs zu halten, die gezielt angesprungen werden|können. Das ist ein wichtiges Feature, falls die Routine jemals in einem|Spiel eingesetzt werden sollte.S. Herr, 28.09.1992|Noch 'ne Bemerkung: Es ist prinzipiell möglich, Soundtracker-Lieder für|das Cluster-Soundmodul zu konvertieren, da auch das Cluster-Soundmodul|auf Patterns basiert. Allerdings muß (derzeitig noch) auf Effekte wie|Arpeggio u.ä. verzichtet werden. Vorhanden sind jedoch immerhin das Setzen|der Lautstärke, das An- und Ausschalten des Tiefpaßfilters und das Setzen|der Abspielgeschwindigkeit.|Vielleicht findet sich ja eines Tages ein Cluster-mächtiger Soundtracker-Freak,|der ein Konvertierungsprogramm schreibt, das aus einem Soundtrackermodul einen|Cluster-Quelltext erzeugt. Das Programm würde sicherlich Bestandteil des|Cluster-Soundmoduls werden!”™…|Hier werden die zur Verfügung stehenden Notenwerte aufgeführt. Besondere|Bedeutung haben PA, PS und PE:|PA : Pause mit ausgeschalteter DMA|PS : Pause mit Ausklingenlassen der momentan aktiven Note|PE : Pattern-Ende-MarkierungNoteval =(PA,PS,PE,c1,C1,d1,D1,e1,f1,F1,g1,G1,a1,A1,b1,c2,C2,d2,D2,e2,f2,F2,g2,G2,a2,A2,b2,c3,C3,d3,D3,e3,f3,F3,g3,G3,a3,A3,b3);|Definition der Instrument-StrukturInstrument =’…ƒ’„Adr: ANYPTR; |Zeiger auf den Sampledatenspeicher|Geplant für die Zukunft!|ADSR : ’’™ [0..3] † SHORTCARD; |ADSR relative LautstärkewerteSize : LONGINT; |Länge des verwertbaren Teils des SamplesLOffs: LONGINT; |Offset Startadresse der Loop (SOLLTE 0 sein,$|falls OneShot-Sample!)LLength : LONGINT; |Länge der Loop (und damit des abgespielten$|Teils des Samples). WENN 2 => OneShotDVol : SHORTINT; |Default Volume…Ž„;|Lege Typ für Instrumente-Array fest (offen)Instruments = ’’™ † Instrument;|Definition der möglichen Effekte. Erklärung:|NE: No Effect:Aktuelle Note hat keinen Effekt|VO: Set Volume :Setze Lautstärke auf den in Note.Evl gesetzten Wert|Mögliche Werte: von 0 bis 64|LF: LoPass on:Tiefpassfilter an => dumpfer Klang|HF: LoPass off :Tiefpassfilter aus => heller Klang|SP: Set Speed:Setze Abspielgeschwindigkeit. Zu diesem Wert wird noch|ein vom Video-Display-Typ (PAL, NTSC etc...) abfhängiger|Offset dazugezählt (siehe Struktur Song)|Mögliche Werte: von 2 bis 127Effects = (NE,VO,LF,HF,SP);|Definition der Note-StrukturNote = ’…ƒ’„ Val: Noteval;|Notenwert. Noteval: Aufzählungstyp von Indizes|auf eine Tabelle von Sampleperiods. Dur: CARDINAL; |Zeitdauer bis NOTEOFF (in Steps!) Ins: SHORTINT; |Instrument. Index auf Instruments-Array Eff: Effects;|Effektnummer (Aufzählungstyp) EVl: SHORTINT; |Effektwert …Ž„;|Typfestlegung für offenes PatternarrayPattern = ’’™ † Note;|Zeigertyp auf offenes Patternarray festlegenPatterns = ’’™ † ƒŒ““”’ ” Pattern;|Zeiger auf Patterns definieren (für InitSoundsystem-Routine)PatternPointer = ‰Ž”…’ ” Patterns;|Definition des Arrangements|Dies ist ein Array von Indizes auf das Patternarray, hiermit wird der|Song zusammengestellt (arrangiert)ArrT = ’’™ † SHORTINT; |Indizes auf das Patterns-Array!|Zeigertyp auf das offene ArrangementarrayArrangement = ƒŒ““”’ ” ArrT;|Definition der Song-StrukturSong = ’…ƒ’„ Channels : ’’™ [0..3] † Arrangement; |Für jeden Soundkanal#|wird hier ein Arrangement eingetragen Enabled : ’’™ [0..3] † BOOLEAN;|Hier werden die momentan#|aktiven Kanäle eingetragen. Änderbar während#|des Abspielens! Repeat : ’’™ [0..3] † SHORTINT; |Stößt die Abspielroutine auf#|eine TR-Note (siehe oben), so wird ab dem#|hier eingetragenen Pattern wiederholt. …Ž„;|Definiere Zeiger auf SongstrukturSongPointer = ‰Ž”…’ ” Song;|Definition der "komplexen"-Soundeffekt-Struktur|Noch nicht implementiert.|Soundeffect = ’…ƒ’„|Ch: SHORTINT;|Wunschkanal, falls die Wahl des Kanals nicht|#|von Bedeutung ist: negative Kanalnummer,|#|z.B. -1 etc.. Die Routine von oben trägt hier|#|den belegten Kanal ein, falls TRUE|Pat : SHORTCARD; |welches Pattern soll gespielt werden (Index)|Use : BOOLEAN;|Wird auf TRUE gesetzt, wenn dieser Effekt|#|gerade abgespielt wird.|…Ž„;|Definition der Simple-Effekt-Struktur.|Wird benutzt, um einfach Samples abzuspielen (z.B. Explosion etc.)SimpleEffect = ’…ƒ’„Ch: SHORTINT;|siehe bei SoundeffectVal : Noteval;|Tonhöhe des EffektsIns : SHORTCARD; |Index auf InstrumentearrayVol : SHORTCARD; |Lautstärke (0..64)Use : BOOLEAN;|siehe bei Soundeffect…Ž„;|Definition der möglichen Video-ModiVideoModes = (PAL,NTSC,HZ70);ƒŽ“”|Definiere Default-Abspielgeschwindigkeit (PAL)DefaultSpeed = 6;|TR und TS werden im Arrangement für gewisse Funktionen eingesetzt:|TR : Ab einem gewissen, in der Songstruktur angegebenen Pattern wird|wiederholt (z.B. für Endlosschleifen im Lied) (Track Repeat)|TS : Track endet hier (d.h. Abspielen hält an, z.B. wenn Lied zu Ende)|(Track Stop (nicht Truck Stop...))TS = -2;|Track StopTR = -1;|Track Repeat’ƒ…„•’… InitSoundSystem(–’ Instr:Instruments;’…† Patts:Patterns);|Der Benutzer übergibt hiermit dem Soundmodul seine Instrumente- und| Pattern-Arrays (besser gesagt, die Zeiger darauf)|Nicht vorhanden, da momentan nicht nötig.|’ƒ…„•’… CreateInstrument():Instrument;|Initialisiert eine Instrumentstruktur’ƒ…„•’… LoadInstrument(–’ NewIns:Instrument;’…† FileName:STRING):BOOLEAN;|Routine, um ein Instrument zu laden. Instrument muß eine Variable sein,|da Ladelänge und Adresse eingetragen werden. Sample muß in "Rohform"|vorliegen (kein IFF-File!)|Bemerkung: Geplant: Laden von IFF SVX8-Instrumenten und Abspeicherung|von RAW eingelesenen Instrumenten als SVX8-Instrumente’ƒ…„•’… KillInstrument(–’ Ins:Instrument);|löscht Sampledatenspeicher und vernichtet die Instrumentstruktur|Achtung: Nur mit von Disk geladenen Instumenten verwenden!’ƒ…„•’… PlaySimpleEffect(–’ Eff:SimpleEffect):BOOLEAN;|Spiele einfachen (DMA-) Effekt’ƒ…„•’… KillSimpleEffect(–’ Eff:SimpleEffect);|Stoppe einen SimpleEffect, falls er vorher erfolgreich gestartet wurde.’ƒ…„•’… StartSong(’…† s:Song; m:VideoModes);|Einen Song von der laufenden Patternposition starten. Videomode muß|angegeben werden, damit Abspielgeschwindigkeit stimmt.’ƒ…„•’… StopSong(’…† s:Song);|Song anhalten’ƒ…„•’… GoFirstPos(’…† s:Song);|Gehe ganz an den Anfang des Songs. (funktioniert nur, wenn Song gerade nicht|gespielt wird.…Ž„ Sound.ÿ