![[SOUNDLIGHT]](../../soundll3.gif) |
VISUAL BASIC CRASHKURS V |
Projekt 5: ein Real-Level Chaser für das Pult
Sie haben Visual Basic 3.0 auf Ihrem Rechner installiert? Die bisherigen Teile, Kursprojekt 1, Kursprojekt 2, Kursprojekt 3 und Kursprojekt 4 installiert und abgearbeitet? Prima. Dann können wir loslegen:
- Wir schlagen vor, daß Sie dies Kapitel ausdrucken, nachdem Sie es mit Ihrem Internet-Browser geladen haben.
- Die Beispieldateien können Sie am Ende des Kapitels laden, bitte beachten Sie dazu unbedingt die angegebenen Hinweise zur Installation.
Gehen Sie auf DATEI und dann auf Projekt laden und laden Sie aus dem Verzeichnis C:\VB\SLH das Projekt CHAS_D.
Sie erhalten dann den oben dargestellten Arbeitsbildschirm und im Projektfenster werden zwei Dateien eingetragen, nämlich
- CHAS_D.FRM, die Form-Datei (das Layout) des Pultes
- DEMOS.BAS, das Deklarations-Modul
Das Chaser-Desk
Einer der wichtigsten Effekte der Lichttechnik ist ein Lauflicht, das natürlich umso interessanter wird, je mehr Kanäle bedienbar sind und je mehr individuelle Schritte abspeicherbar sind. Hier läßt uns Visual Basic freien Raum, denn Grenzen sind eigentlich nur durch Ihre Phantasie gegeben - den uns zur Verfügung stehenden Hauptspeicher werden wir kaum füllen können.
Notwendige Variable
Um ein Lauflicht einrichten zu können, bedarf es zunächst der Überlegung, welche zusätzlichen Variablen dafür erforderlich sind.
Wir benötigen:
- EINEN CHASER-BILDSPEICHER
Er muß für n Bilder jeweils Helligkeitsinformationen für 6 Kanäle halten. Dazu benötigen wir ein zweidimensionales Array mit n bzw. 6 Elementen. Für 99 zugelassene Steps wird also ein Datenarray von 99x6 Elementen benötigt, wir nennen es CHASER(n,m)
- EIN MERKREGISTER FÜR DIE STEPZAHL
Da nicht immer alle 99 Steps belegt werden, muß zusätzlich eine Variable MAXSTEP eingerichtet werden, die die Anzahl der tatsächlich belegten Schritte enthält.
- EIN FLAG
Der Rechner muß wissen, wann der Chaser eingeschaltet ist und wann nicht. Diese Information muß auch in anderen Routinen vorhanden sein, die Variable CHSFLG ist daher Global zu deklarieren. Sie kann die Werte 0 oder 1 annehmen. Sie können sie auch als Boolesche Variable (True/False) deklarieren und nutzen.
- EINEN CHASERSTEP-ZÄHLER
Er muß die Nummer des aktuell ausgegebenen Step enthalten und wird daher als CHSTEP deklariert. Auch diese Variable muß an anderer Stelle, z.B. für die numerische Ausgabe, vorhanden sein.
- EIN CHASERAUSGABE-REGISTER
Das haben wir bei der Faderberechnung bisher anders gemacht: dort wurden alle Berechnungen des Gesamt-Ausgabewertes in der Faderroutine durchgeführt. Hier also mal ein anderer Weg: wir benutzen ein Zwischenregister, um den Ausgabewert des Chasers für den jeweils gerade ausgegebenen Step zu ermitteln. Entsprechend heißt das Register CHSOUT(n) und hat nmit n=0...5 genau 6 Plätze, für jeden Kanal einen.
Die Einbindung
der Ausgabe ist nunmehr recht einfach: statt in der Faderausgaberoutine von einem Zwischenregisterwert NULL auszugehen, gehen wir nun vom Chaserwert aus. Es ändert sich:
Zwischenwert1 = ChasOut(Index) :REM Chaserwert des Kanals übernehmen....
For n = 0 To 5 'für alle Memories bearbeiten...
Zwischenwert2 = MemFader(n).Value * Memory(n, Index) / 100
If Zwischenwert2 > Zwischenwert1 Then Zwischenwert1 = Zwischenwert2
Next n
.....u.s.w.
Wie kommen die Chaserwerte in den Speicher?
Nun, sehr einfach. Prinzipiell genauso, wie sie als Memorybild beim Drücken der STORE-Taste und einer Kanaltaste in den Speicher kommen, wird nun nach Drücken der STORE-Taste und der STEP-Taste ein Memory als ChaserStep (jeder Step ist ja ein Bild!) in den Chaserspeicher geschrieben. Ist das erledigt, wird wird die Stepnummer um eins hochgezählt und das Register für die maximale Stepzahl abenfalls inkrementiert. Das war's.
Wie kommen die Chaserwerte aus dem Speicher?
Ebenso einfach, sie werden einfach aus dem ChaserMemory-Array ausgelesen. Das geschieht bei jedem Step, den der durch den SPEED-Regler gesteuerte Auto-Timer aufruft:
Rem Chaser einen Step weiter
ChStep = ChStep + 1
If ChStep > MaxStep Then ChStep = 0
'In jedem Falle Step-Anzeige aktualisieren
StepAnzeige.Caption = Right$("0" + Right$(Str$(ChStep + 1), Len(Str$(ChStep + 1)) - 1), 2)
Call MergeChaser
Die Ermittlung der Werte erfolgt in der Routine MergeChaser:
For n = 0 To 5
ChasOut(n) = Int(Chaser(ChStep, n) * ChLevel / 100)
Rem jetzt die Ausgangswerte nachstellen
Call Fader_Change(n)
Next n
und das war's denn.
Die Bedienung
Damit Sie jetzt gleich mal selbst probieren können, hier die einfache Anweisung:
- Öffnen Sie Kanalfader 1, klicken Sie dann STORE, dann STEP, und ziehen Sie Fader 1 wieder auf Null.
- Wiederholen SIe das mit allen Fadern (2-6).
- Klicken Sie nun START
Hausaufgaben!
Unser Memory ist auf Platte abspeicherbar, der Chaser noch nicht. Da wir Ihnen ja nicht alles vorkauen wollen, heißt die Aufforderung: Jetzt mal 'ran!. rstellen Sie Speicher- und Laderoutinen für den Chaserspeicher! (Tip: Sie können die Routinen für's Memory fast wörtlich kopieren...).
Hier das File-Format für die Abspeicherung und das gewünschte Schlüsselwort:
Speicher-Datei für SoftDesk 12 (C) SLH 1995
[Patching]
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
[Memory]
0, 0, 10, 50, 50, 0, 0, 100, 100, 0, 0, 0
0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 30, 0, 0, 0, 0, 0, 100, 0, 0, 100
0, 0, 40, 0, 0, 0, 0, 0, 0, 100, 100, 0
0, 0, 50, 100, 100, 0, 0, 0, 0, 0, 0, 0
100, 100, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0
[Chaser]
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100
0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0
0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0
0, 0, 0, 100, 0, 0, 0, 0, 100, 0, 0, 0
0, 0, 0, 0, 100, 0, 0, 100, 0, 0, 0, 0
Der Schwierigkeitsgrad dabei ist, daß Sie nicht wissen, wieviel Chasersteps denn gespeichert und in der Datei vorhanden sind. Tip: auf EOF (End Of File) oder Eckige Klammer (neues Schlüsselwort, dann ist der Block auch zu Ende) prüfen.
Projekt-Quellcode laden
Erstellen Sie auf Ihrer Festplatte im Visual Basic Ordner ein Verzeichnis namens C:\VB\SLH. Laden Sie die Datei PROJ5.EXE in dies Verzeichnis und starten Sie sie dort. Es entpacken sich dann unter anderem folgende Dateien:
- CHAS6_D.MAK
- CHAS6_D.FRM
- CHAS6_D.FRX
- DEMOS.BAS
- SLHDMX2.DLL
- SLHDMX12.BIN
- SLHDMX16.BIN
- CMDIALOG.VBX
- DATEI.D12
Einige dieser Dateien könnten durch vorherige Beispiele schon auf Ihrer Festplatte vorhanden sein. Sie sollten sie überschreiben.
Projekt-Sourcecode downloaden
zurück zur
SOUNDLIGHT HOMEPAGE