ASSCalc

Aus WiFX - The Karaoke Wiki for ASSCalc, NyuFX, Lua, AFX, Tenfex & Templater
Wechseln zu: Navigation, Suche

Geschichte

ASSCalc wurde von Hajo Krabbenhoeft alias Tentacle im Jahr 2003 für seine eigenen Effecte geschrieben. 2004 wurde diese Version als Public-Release auf seiner Webseite [[1]http://www.tentacleworks.net/] veröffentlicht, wo man sie heute noch downloaden kann. Dort findet man auch genug Beispielscripte, mit denen sich fast alle Anwendungen abdecken lassen. Da zu dieser Zeit noch kein Aegisub in Aussicht war und es zu der Zeit das gängige Format war, wurde das Program auf ANSI Scripte ausgelegt, was bedeutet, dass die Kanjis, welche in UTF8 vorhanden sind, in SHIFT-J gewandelt werden müssen, was oft zu Problemen führt, da Shift-J Zeichen auch }{ enthalten dürfen. Diese werden dann von ASSCalc falsch interpretiert und es bricht den Prozess ab. Dieses Problem wurde erst im September 2011 behoben, als Tentacle die UTF8 Version als beta heraus gab. Diese gibt es aktuell nur per Mail, da sie noch nicht getestet wurde. Seit der neuen Version existiert ein GITHub, wo der Sourcecode von ASSCalc eingesehen und zur Weiterentwicklung benutzt werden kann, da Tentacle so gut wie keine Zeit mehr dafür findet.

Arbeitsweise von ASSCalc

Das Layerprinzip

ASSCalc arbeitet in einem Effekt Layer Prinzip, das heißt es werden Effekt Layer erzeugt, die auf einen Style zugreifen, und diesen dann in einer gewissen Art und Weise berechnen. Es gibt pro Effekt Layer oder auch P-Layer zwei Dateien, welche ein Namensformat haben müssen, damit der Layer angesprochen wird. Beide müssen den gleichen Style ansprechen und die gleiche Nummer haben. ASSCalc fängt immer bei NULL an zu zählen, also ist die erste P-Layernummer p0.

Im Vergleich zu anderen Tools, wo vorher ein Cache alle möglichen Daten gebildet wird und auf diese Daten dann zugegriffen wird, liest ASSCalc das Grundscript Line für Line und checkt, ob es einen vorhandene P-Layer mit dem Style für die Line gibt. Ist dies erfüllt wird der Layer direkt ausgeführt. Es können auch mehrere FX Layer auf den gleichen Style zugreifen. Wichtig ist hierbei zu wissen, dass die ganze Line pro FX-Layer ausgeführt wird und dann die gleiche Line nochmal für den anderen Layer usw. Sprich ein Layer wird pro Line immer komplett abgearbeitet und dann wird der erst der nächste ausgeführt.

Da ASSCalc sozusagen "live" berechnet und nur Zahlen im Speicher haben kann, muss Text direkt ausgegeben werden. Am Ende ist es also egal ob man eine ASS Datei erzeugt oder irgend einen Text ausgeben möchte, da man grundsätzlich nur Text und Variablen kombiniert. Dieses Prinzip kennt man von Templater oder Typetool. Der Unterschied zu Templater besteht vor allem darin, dass man in der Textansicht einer ASS Datei arbeitet, während man bei Templater schön mit einer Aegisubbenutzeroberflöche arbeiten kann und man nicht so viel Zugriff auf die anordnung im Grundscript hat, da dies von Aegisub übernommen wird.

Um ASSCalc richtig zu verstehen muss man im Zyklus denken, wenn man sich auf Fehlersuche begibt. Stellt es euch so vor, wie wenn Calc erstmal alle Abläufe hintereinander kopiert und sie dann ausführt. Sprich eine Variable die im ersten Durchlauf im Header gesetzt wird und im Normalen Layer umgeschrieben wird, ist im zweiten durchlauf immer noch so, wie sie umgeschrieben wurde, da das nächste mal der Header erst für die nächste Line ausgeführt wird. Das Programm läuft sozusagen in einer über einen Flag gesteurten Schleife.

Die Headerdatei - pXh.txt

Die p0h-Datei ließt den Header einer Line aus und besteht immer aus den 3 Komponenten Stylelock (zuweisung des Styles, welchen er suchen soll), Fontmatch (Automatisch vom Style oder Direktauswahl) und dem Flag (Berechnungsart des Layers). Wie oben schon erwähnt wird die Header Datei nur einmal pro Line (pro Layer) ausgeführt. In dieser kann auch noch nicht auf die interne Variablen zugegriffen werden, wie die Linebreite und Höhe in Pixeln oder Farben etc.

Der sogenannte Flag gibt an, wie der P0-Layer für die Line ausgeführt wird. Es gibt 5 Berechnungsarten, von denen aber nur 3 relevant sind.

  • Skipspace bedeutet, dass p0 für jedes \k ausgeführt wird, der vorhandene Text in der Text Variable ist also die ganze Silbe. Leerzeichen werden raus gelöscht, sprich auch getimete Pausen, welche keinen Text beinhalten, werden nicht berechnet, um Scriptplatz zu sparen und eine bessere Performance zu erreichen.
  • Charwise hingegen führt die p0 Datei für jedes Zeichen aus, auch Leerzeichen! Die Scriptgröße wird natürlich viel größer, da der Effekt pro Zeichen geschrieben werden muss. Der vorhandene Text ist das jeweilige Zeichen.
  • Doublecharwise behandelt zwei Zeichen als eins. Dies wird für Shift-J Karaoke benötigt, da dort ein Kanji mit zwei ANSI Zeichen beschrieben wird.

Die Hauptdatei - pX.txt

die p0-Datei besteht mindestens aus einem Komponenten, dem Stylelock, oder kann auch bei speziellen Anwendungen weg gelassen werden. Wichtig ist hierbei nochmal zu erwähnen dass der Stylelock zwingend aus den gleichen Style zugreifen muss, wie die Headerdatei.

In einem P0-Layer, welche nun anhand des Flags pro Silbe oder pro Zeichen ausgeführt wird, können nun wiederum andere Dateien n mal eingefügt werden, bzw. geloopt werden. Das bedeutet man kann unendlich oft eine Effektabfolge pro Zeichen/Silbe ausgeben und davon auch unendlich viele verschiedene. Grundsätzlich gibt es, wie in anderen Sprachen vorhanden keine if-else oder sonstige Abfragen. Calc arbeitet eher wie ein Batch Script aus der guten alten DOS Zeit, sprich an einer gewissen Stelle im Code ist es möglich PRO Datei festzulegen ob der nachfolgende Code ausgeführt wird oder nicht, es kann aber nicht in einer Datei, wie bei Batch möglich, gesprungen werden. Zusätzlich können NUR Gleitkommazahlen verwendet werden (0.2;1.7;30), keine Strings oder sonstiges. Schleifen sind auf eine Einzelschleife und eine Multidimensionale (Breite X Höhe) beschränkt und können nur externe *.txt Dateien loopen. Dies aber so oft man will.

Script für die Berechnung vorbereiten

  1. Um mit ASSCalc zu arbeiten, sollte man ein Script vorbereiten mit den Auflösungseinstellungen für das größt mögliche Video, z.B. FullHD.
  2. Dann sollte man das Video 1x schauen und über den Actor markieren, wo man welche Effekte braucht.
  3. Beim anschauen sollte direkt das Timing und der Text kontrolliert werden. Späteres nachtimen mit den Identifiern oder Colorchanges ist oft nervig oder löscht einfach alles wieder raus.
  4. Dann solltet ihr euch entscheiden, ob ihr diese unterschiedlichen Effekte versucht in einem Layer unterzubringen und per textfind drauf zugreift oder per Style. Bei der Textfind Variante solltet ihr die Identifier wie {Q}, {X}, {XY} oder {FX1} schonmal setzen.
  5. Auch die Orientierung im Bild kann schon über Variablenübergabe gesetzt werden wie {%%silbpos=1}. Hierzu bitte die Anleitung bei Asscalc Variablen lesen.
  6. Wenn es einen Spezialeffekt gibt, welcher sehr aufwändig werden soll bietet sich hier die Stylevariante an, damit ein extra Effektlayer verwendet werden kann und man nicht immer alle Möglichkeiten beachten muss, die eintreten könnten.
  7. Nun solltet ihr eure Schriftart aussuchen und diese größentechnisch anpassen und farblich vorwählen zum testen, fals ihr Colorchanges erst später einfügen wollt. Ändert nun alles so, wie ihr denkt das ihr es schon Final benutzen könnt, um eventuelle Positionierungsfehler durch eine Schrift- oder Größenänderung auszuschließen.
  8. Legt nun die restlichen Styles nach dem Schema an, wobei ihr tunlichst darauf achten solltet, dass ihr maximal 3 schriftarten verwendet für die Basis zzgl. Shapes und Effektfonts. Ihr benötigt mindesten Romaji und Translation und optional noch Kanji. Solltet ihr die Schriftart wechseln, muss dies zum Song passen und eine deutlich andere Passage im Song darstellen. Sollte man dies in erwägung ziehen, sollte sich das Farbschema aber nicht all zu stark ändern, da es sonst komplett rausfällt aus dem Gesamtkonzept.
  9. Achtet auch noch darauf, dass keine {\k33}blah{\k23} {\k13}blah2 Fehler auftreten. Auf diese Timingversion kommt ASSCalc nicht klar und wird einfach den Effekt doppelt ausführen an einer völlig falschen Position. Die Lösung ist {\k33}blah {\k23}{\k13}blah2
  10. Wenn Effekte teilweise bei der letzten Silbe rummucken kann es helfen ein {\k0} oder LEERZEICHEN+{\k0} einzufügen.

Ein Script berechnen

Originaltext von Tentacle

to test out one of those sample effects:

create a new folder

put the p*.txt files for the effect in

create a shortcut for the exe

set the working path of the shortcut to the folder where you put the p*.txt files


drag the .ass script on the shortcut

(directly on the exe wont work!) (Comment: auf Windows 7 geht es ohne Probleme)


it should draw a lot of stuff, some ....... and then say done then you have a out.ass which contains the effect

BIG FILES: edit your shortcut to read asscalc.exe split That’ll create out_000.ass, out_001.ass, ...


coding your own scripts:

i'd suggest you to look at the sample source

Deutsche Wikibeschreibung

folgt

bzw. nützlich zu Wissen ist, dass die Datei immer da ausgegeben wird, wo die exe liegt. Die *.ink Datei und die BasicASS kann also an einem völlig anderen Ort liegen, wie die out.ass Datei.

Basisscripte

Untertitel ausgeben

Effekt pro Silbe

Effekt pro Zeichen

weitere Quellen

Wenn mana auf der Webseite [[2]http://www.tentacleworks.net/] das ASSCalc Pack runterläd, erhält man automatisch Beispielscripte von Tentacle von 2004. Diese enthalten viele nützliche Informationen, sollten aber keinesfalls als irgendeine Vorlage für Effekte benutzt werden, da sie nicht mehr dem heutigen Standard entsprechen und unter uns gesagt auch etwas Wirr programmiert sind ;) Die Grundzüge sind aber in allen heutigen Scripten erkennbar und haben teilweise noch immer die gleichen Stylenamen wie japro, japka und engsub oder Variablennamen wie curx oder cury.