Irgendwie hatte ich wohl zu viel Freizeit in letzter Zeit und kam auf die Idee noch eine Matrix Software zu schreiben. Obwohl die vorhandenen Projekte mit PixelController und Glediator schon fast alles abdecken, ich will auch MatrixMover nicht vergessen, hatte ich noch ein paar Dinge die mir persönlich für den Einsatz in der Veranstaltungstechnik/Bühne gefehlt haben.
//EDIT: Ach noch eine Warnung vorab, der Post ist wohl leider etwas länger geworden obwohl ich mich kurz fassen wollte, sorry
Nun ja, egal. Was nun dabei rausgekommen ist, ist zur Abwechslung mal kein Madrix Clone, sondern eher ein Glediator Clone. Na ja, nicht wirklich, wenn auch die Oberfläche stark an Glediator erinnert. Ich fand auch die Idee von Matrix Mover sehr gut mit den unendlich kaskadierbaren Effekten. Da ich das Ganze aber handlich haben wollte und technisch überschaubar, vor allem in Hinblick auf grössere Matrixen auch noch Rechenleistung übrig haben wollte, habe ich mich für das klassische DJ Setup entschieden mit 2 Kanälen die gemischt werden können und bin auf die Erkenntnis gekommen das, gleich wie bei Glediator, zwei Effekte pro Kanal reichen. Durch die Szenenspeicherung kann man ja beide Kanäle nutzen und hat 4 Generatoren zur Verfügung, was reichen sollte. Daher erinnert die Oberfläche natürlich stark an Glediator, aber meine Schwerpunkte liegen sicher in anderen Details in der Engine.
Trotz der oberflächlichen Ähnlichkeit hoffe ich das Pepe mir nicht böse ist, sieh es nicht als Clone sondern als Hommage an Glediator
Ich hoffe auch das McGyver an seinem MatrixMover wieder weitermacht, ist ein sehr tolles Konzept und bin schon gespannt was dabei noch raus kommt.
Was kann nun Jinx!, bzw. ist nun anders ?
Jinx! wurde komplett in C geschrieben und basiert nur auf der Windows API, somit benötigen wir keinerlei Runtime (.Net oder was auch immer) und sind komplett unabhängig, klein, schnell, handlich. Es gibt lediglich eine rund 200kB grosse Binary die auf jedem Windows (ab XP aufwärts) nativ läuft.
Sehr viel Wert habe ich auf die Geschwindigkeit gelegt und somit wirklich vieles selbst implementiert anstatt fertige GDI Funktionen von Winows zu nehmen. Das Resultat sollte dafür nun auch mit grosse Matrixen auf relativ langsamen Rechnern zurecht kommen.
Die Oberfläche ist klassisch aufgebaut, wir haben 2 Sektionen (links und rechts) sowie in jeder Sektion 2 Generatoren die nun alle zusammen gemischt werden können. Dazu gibt es noch den Master-Out sowie einen Master Gamma Korrektur. Die Filter zum zusammenfügen der einzelnen Generatoren habe ich neben den üblichen noch um ein Overlay (sprich linkes Bild liegt z.B. über dem Rechten) sowie um ein Overlay mit Randerzeugung (um z.B. Schriften auf einem Hintergrund abzuheben) erweitert.
Die Effekte selbst sind alle wohl bekannt. Auch hier sind wieder die üblichen Klassiker aus den C64 Demo Zeiten wie Plasma und Metaballs vorhanden. Von der Parametrisierung her sind alle Effekte prozentual gesteuert, sprich wenn ich einen Effekt erstelle und danach die gespeicherte Szene auf einer größeren/kleineren Matrix aufrufe sollte das Bild dem urpsrünglichen entsprechen (z.B. ein Text geht immer noch über die komplette Matrixhöhe). Dies hat natürlich seine Grenzen, aber im grossen und ganzen haut das ganz gut hin.
Viel Zeit hab ich auch in die Audioeffekte gesteckt. Wir haben eine Automatic Gain Control (damit man nicht immer nachregeln muss wenn das Lied mal leiser ist) und arbeiten komplett über Frequenzbänder. Das Triggern der Audioeffekte wie Strobe und Expanding Objects (pro Trigger wird ein Object erzeugt) kann so auf Frequenzen beschränkt werden.
Der Audio Analyzer ist komplett logarithmisch aufgebaut wie man es gewohnt ist und, auf den bin ich besonders stolz, erzeugt ein Bild das man von Audiogeräten gewohnt ist. Zusätzlich können auch die Sinus-Lines als 3 Band Analyzer benutzt werden, probierts einfach mal aus. Gecaptured wird automatisch das aktive Aufnahmedevice von Windows.
Das Szenenfenster ist noch etwas rudimentär, aber funktionsfähig. Hier können Szenen gespeichert, überschrieben, gelöscht, sortiert und aufgerufen werden. Beim Szenenwechsel steht ein Fade-Out der alten Szene zur Verfügung, sprich das letzte Standbild der alten Szene wird ausgeblendet während die neue bereits läuft. Die Fadetime sowie die Funktion generell kann direkt im Szenenfenster und auch im ShowMode (gleich mehr dazu) gesteuert werden.
Um schnell Szenen zu bearbeiten können, kann man die PreviewFenster Links und Rechts auf die einzelnen Kanäle schalten, damit man sieht welche Parameter man ändert (rechte Maustaste auf das Preview). Weiterhin können einzelne Generatoren kopiert und an anderen Stellen mit allen gesetzten Parametern wieder eingefügt werden (rechte Maustaste auf den Edit Button).
Hat man nun alle Szenen fertig kann man in den Showmode wechseln. Hierbei bekommt ihr ein einzelnes Fenster mit dem Masterpreview sowie einem Button pro gespeicherte Szene. Die Buttons werden automatisch angeordnet und das Fenster ist komplett resizebar. Die Buttons selbst können auch in der Größe verändert werden (die kleinen + und - oben in der Menüleiste). So kann man sich eine Touchscreeen Oberfläche für die Show zusammenbauen. Die Buttongröße, Fensterposition und Größe wird dabei gespeichert und wird automatisch wieder gesetzt.
Über das Menü kann die Audio AGC eingeschaltet werden sowie die Matrix und die Ausgänge eingestellt werden. Bei der Matrix Size kann zusätzlich ein Pixelstep eingestellt werden. Normalerweise werden die Effekte mit einer Pixeländerung/pro Frame erzeugt, hat man nun eine grosse Matrix werden viele Effekte dadurch sehr langsam. Hier kann man nun den Pixelstep erhöhen um auch bei grossen Matrixen schnelle Effekte zu bekommen (dann eben 2 Pixeländerungen pro Frame oder 3).
Unter Output Devices können die einzelnen Ausgänge angelegt werden und unter Output Patch die Ausgänge grafisch auf die Matrix gepatcht werden. Der Patch kann manuell erfolgen oder via Fastpatch. Bei Fastpatch klickt vorher auf den Startpixel und dann erst auf Fastpatch, hier könnt ihr nun die Fläche festlegen (x und y Ausdehnung) sowie das zu patchende Device und so weiter. Ihr werdet schon damit klar kommen
Als Ausgabe selbst steht im Moment nur Artnet (getestet) und tpm2.net (ungetestet, hab hier leider nix zum testen) zur Verfügung, serielle Ausgabe ist noch nicht mit drin. Ist hier alles eingestellt kann über Setup->Start Output die Ausgabe gestartet werden.
Unter dem Menü File könnt ihr speichern und laden. Es wird alles in eine einzige Datei gespeichert, sämtliche Einstellungen, Devices, Szenen, der Patch, Showmode (Größe, Position, etc.). Somit kann eine komplette Show auf einen Schlag geladen werden. War beim speichern der Ausgang aktiv, so wird dieser auch sofort nach dem laden aktiv. Die gespeicherten Dateien könnt ihr auch über die Kommandozeile mitladen ("jinx.exe blubber.jnx"), das heisst ihr könnt auch die .jnx Dateien in Windows verknüpfen und via Doppelklick starten.
Wird keine Datei bei der Kommandozeile übergeben, so wird die autosave Datei (wenn vorhanden) geladen. Bei jedem Beenden speichert Jinx! automatisch das komplette Setup in der autosave.dat (gleiches Verzeichnis wie die Binary) und lädt diese auch wieder automatisch. Somit ist man nachdem starten des Programms sofort auf dem alten Zustand. Über File-Import kann mann die gleichen Dateien laden, allerdings werden hierbei nur die Szenen geladen und in die vorhandene Szenenliste angefügt. Über die Importfunktion werden keine Einstellungen, Devices, etc. mitgeladen.
Soweit mal der Überblick, ich könnte noch stundenlang über irgendwelche Kleinigkeiten berichten, aber ich denke ihr werdet es schon rausbekommen
Vom Stand her ist es eine frühe Beta-Version. Grobe Fehler (Speicherverletzungen, Abstürze, etc.) sollten keine mehr drin sein aber hier und da wird es bestimmt noch Bugs geben in den Funktionen die ich noch nicht gefunden habe. Die GUI ist noch sehr rudimentär und an vielen Stellen nicht sehr Benutzerfreundlich (Szenenfenster z.B.), hier hab ich noch viel Arbeit. Ich werde zwar keine kunterbunte Oberfläche machen, aber ein bisschen logischer und einheitlich darf das Bedienkonzept stellenweise schon noch werden.
Es wäre schön wenn ihr Jinx! mal testen könnt und mir eine Manöverkritik erteilt, was euch gefällt, nicht gefällt, was ihr noch für Ideen habt, was nicht funktioniert, etc. ...
So nun aber genug geschrieben, testet es einfach mal aus.
Grüße
Sven
P.S.: Eins hab ich noch, muss noch 2-3 Worte (oder sagen wir Sätze) zum Capturing loswerden. Wir ihr bei den anderen Programmen schon gemerkt habt ist das capturen unter Windows stellenweise sehr zäh. Dies liegt an Winapi selbst, da sie vieles beim Screenshoten berücksichtigen muss. Ganz grosses Gift für ein schnelles capturing ist die Aero Oberfläche unter Vista/Win 7, da Windows den Bildschirm immer erst synchronisieren muss. Sobald diese aktiv ist benötigt ein Screenshot von einem kleinen Teilbereich des Bildschirms rund 30ms. Da kann man sich ausrechnen das bei 25 Bildern/Sekunde hier nicht mehr viel Zeit für die restlichen Effekte übrig bleibt. Schaltet man die Funktion ab (Systemeigenschaften -> Erweitert -> Leistung -> Desktopgestaltung aktivieren -> Haken raus) benötigt der gleiche Screenshot nur noch 2-4ms und alles ist gut. Wer also ernsthaft mit Screencapturing arbeiten möchte sollte daher, und das hat nun nichts mit Jinx! zu tun sondern gilt auch für die anderen Programme, die Desktopgestaltung (temporär) ausschalten.
//EDIT
Aktuelle Version:
Changelog und Download: http://www.live-leds.de
Aktuelle Version: Jinx! - LED Matrix Control (neueste Version)
Aktuelles Manual: Jinx! - User Manual (neueste Version)