Posts by Justin

    Nein, das erste geht nicht. Der Beat-Trigger wird immer dann getriggert, wenn ein Beat z.B. von einem SpeedMaster kommt. Dieser arbeitet intern fest mit 1/4 Takt, also jeder vierte Beat ist der Erste. Außerdem ist der einzige Ort, an dem du bei Mastern rechnen kannst bei der Eingabe im Device Control. An allen anderen Stellen kannst du den Wert nicht verändern. Aber es gibt die Möglichkeit, den BPM-Wert des SpeedMasters zu verdoppeln / zu halbieren. Dazu den SpeedMaster einfach einem Executor hinzufügen und das entsprechend auf den Buttons unten so konfigurieren, dass man die BPM verdoppeln / halbieren kann.

    das verdoppelte habe ich auch gesehen aber leider ist das nicht so wie ich mir das vorstelle :/


    Alles über InputAssignments zu machen erscheint mir gerade das beste.


    Vorallem weil ich gerade eine lampe auf takt 0 und lampe 2 auf takt 2 laufen lassen will das geht leider aber nicht mit normale Cuelists (bzw ich weiß einfach nicht wie falls es geht haha)

    Kann man den Trigger "beat" auch sagen er soll 1/8 statt 1/4 machen?

    Zudem wollte ich noch fragen ob man auch Parameter benutzten kann um beispielsweise dynamisch den Step anzupassen

    heißt wenn im lied z.b eine passage kommt wo die drums immer schneller werden das ich quasi über ein fader von jedem zweiten beat auf jedem beat wechseln kann


    Quasi das man einen fader hat der es mir erlaubt von 1/2 auf 1/4 dann 1/8 1/16 etc zu gehen. Desto höher der fader geht desto schneller (aber halt immernoch im bpm)

    Super! Vielen dank für die Information.

    Leider verstehe ich nicht ganz genau wie die Cues anzuordnen sind bzw dessen inhalt.


    Ich glaube ich habs nicht so ganz verstanden

    Bei mir ändert sich nichts egal was ich für eine zahl beim one shot eintrage

    Es fadet immer nach 2 sekunden aus


    Funktioniert das eventuell einfach bei Matrix effekten nicht oder liegt das an mir?


    Gibt es eventuell das Projekt im video zum download?

    Guten Abend,


    ich wollte eben mal nachfragen wie man genau Mathe Operationen auf einem Fanning bzw SpeedMaster anwendet.


    Ich möchte ein Effekt über einen SpeedMaster steuern um die BPM zu syncronisieren. Allerdings ist der Effekt gerade noch ziemlich langsam und würde gerne das dieser in 1/4 oder 2/4 abständen getriggert wird.

    Deshalb hier zwei fragen

    1. Wie sorge ich dafür das der Effekt x mal im Takt so schnell ist wie der SpeedMaster vorgibt ohne diesen direkt zu ändern

    z.b Sowas hier

    So das ich Lampe 1 auf 1/4 laufen lassen kann und Lampe 2 auf 2/4


    2. Ist es möglich Effekte einmal zu triggern, so das sie sich nicht wiederholen?

    Denn den Pulse Effekt würde ich gerne selber triggern so das er einmal Pulsiert und danach auf ein Signal von mir (Beat) wartet um dann manuell getriggert zu werden.


    p.s Mir wurde das mal gezeigt aber leider habe ich es vergessen. Immerhin können es dann auch andere nachvollziehen wenn sie auf diesen Thread stoßen :)

    Falls es noch nicht erwähnt wurde hier ein Projekt welches ich selber schon umgsetzt habe

    GitHub - hideakitai/ArtNet: Art-Net Sender/Receiver for Arduino (Ethernet, WiFi)
    Art-Net Sender/Receiver for Arduino (Ethernet, WiFi) - GitHub - hideakitai/ArtNet: Art-Net Sender/Receiver for Arduino (Ethernet, WiFi)
    github.com

    Diese lib hat FastLED support womit ich selber schon über artnet meine WS2812b angesteuert habe und es funktioniert wunderbar.


    Einfach ArtNet Konfigurieren in DMXC3 und schon kannst du jeden Channel einzeln ansteuern (oder mehrere Sektionen wenn man das möchte)


    Damit kann man dann sogar hingehen und ein DDF mit einer Matrix erstellen und hat Pixelstreifen mit DMXC3 verbunden ^^

    Vielen Dank ^^


    Ich erstelle eben ein Ticket ^^

    Hier mal mit meinem Timecode+ Plugin sowie die ganzen tests.

    Das Plugin war gerade nur ein test sowie Proof of Concept also nichts festes

    Frame perfect wie gewollt ^^

    Das einzige Problem ist jetzt nur das der Controller nicht immer hinterherkommt (was jetzt auch nicht das größte problem ist)

    forum.dmxcontrol-projects.org/…dex.php?attachment/17560/

    Ich habe in das Licht in echt beobachtet. Also die DMX Ausgabe.


    Mein DMX Controller kann nichts unter ~40FPS darstellen also heißt ein abstand von 25ms +-10ms sollten machbar sein


    Folgende Tests habe ich gemacht

    Abstand von 30ms

    - Funktioniert in 90% der fällen ohne Probleme. Hier und da wird mal eine cue verschluckt alle 5 Versuche

    Abstand von 50ms (sichtbarer unterschied zum vorherigem)

    - Funktioniert ohne Probleme

    Abstand von 100ms (sichtbarer unterschied zum vorherigem)

    - Funktioniert ohne Probleme

    Genau so wie ich es haben mit dem "workarround" über ein Wait

    - Funktioniert ohne Probleme

    - Genau so wie ich es haben will ohne auch nur eine einzige Verzögerung

    Genau das gleiche nur mit Timecodes

    - Funktioniert wie mehrfach gesagt nicht richtig.

    Trifft jedenfalls nicht den Timecode


    Nur beim Timecode ist es nicht möglich was für mich ein eindeutiges zeichnen ist das irgendwo ein Fehler sein muss.

    Ich habe schon genug Software unter Windows benutz benutzt welche einigermaßen zeitkritisch sind (FL Studio, Abelton Live, Premiere Pro, After Effects, Unity, Unreal Engine 5).

    Jede dieser Software kann Frame Perfekt im loop etwas abspielen mit nur wenigen ms abstand ohne auch nur ein einzigen Delay.

    Möglich ist es also nach eigenen Erfahrungswerten. Nur der Timecode in DMXC3 kann das nicht..


    Ein Echtzeitbetriebssystem wäre komplett overkill. Es geht sich ja nicht um tausenstel nanosekunden Genauigkeit sondern um einige ms (40ms ist garnichts wobei es in dem beispiel ja um gerade mal 100ms - 200ms geht) und das ist komplett im rahmen des machbaren in Windows.


    Ich hab mir mal die Zeit genommen um etwas zu analysieren :D

    • Tick = Der akuelle Tick der alle 40ms geupdated wird
    • CurrentTime = blockAlignedStream.CurrentTime.TotalMilliseconds
    • WavePosition = Die aktuell abgespielten millisekunden berechnet durch geschriebene bytes
    • Stopwatch = Eine Stopwatch welche beim ersten tickevent getriggert wird (also fast (+-5ms) zeitgleich mit dem abspielen der datei)

    Die Audiodatei war eine 300 BPM Metronom (4 Sekunden)

    Tick CurrentTime msWavePosition msStopwatch ms
    1 300 0 0,7955
    2 300 43,89583333 51,8418
    3 300 88,89583333 96,8444
    4 300 129,4583333 137,417
    5 450 176,4791667 186,4052
    6 450 223,4375 231,3759
    7 450 270,4791667 280,4115
    8 600 317,1041667 327,0722
    9 600 365,0416667 372,9844
    10 600 412,1041667 422,0394
    11 750 460,125 468,0674
    12 750 511,1041667 519,0593
    13 750 550,125 560,0567
    14 900 601,125 609,1253
    15 900 646,1041667 654,1301
    16 900 693,1666667 703,1301
    17 900 741,1458333 749,1668
    18 1050 787,1041667 795,0572
    19 1050 836,1041667 846,0595
    20 1050 892,1875 902,1885
    21 1200 933,2916667 943,3638
    22 1200 982,2916667 990,4593
    23 1200 1037,1875 1047,1289
    24 1350 1085,145833 1093,1586
    25 1350 1134,708333 1144,6394
    26 1350 1175,6875 1185,6123
    27 1500 1224,75 1232,7388
    28 1500 1271,729167 1281,709
    29 1500 1323,104167 1331,1335
    30 1650 1364,041667 1372,0754
    31 1650 1411,604167 1421,6046
    32 1650 1457,5 1467,4906
    33 1800 1510,458333 1518,4261
    34 1800 1551,479167 1559,4537
    35 1800 1596,520833 1606,4907
    36 1800 1645,604167 1653,5956
    37 1950 1686,666667 1694,8007
    38 1950 1737,729167 1747,8194
    39 1950 1790,5625 1798,5032
    40 2100 1830,583333 1840,518
    41 2100 1883,645833 1891,7263
    42 2100 1929,75 1937,8448
    43 2250 1980,729167 1988,6952
    44 2250 20:30:00 2028,8338
    45 2250 2060,895833 2068,8445
    46 2400 2106,5 2114,4801
    47 2400 2147,458333 2155,3962
    48 2400 2192,5 2202,4136
    49 2400 2240,5 2248,4656
    50 2550 2289,3125 2297,2823
    51 2550 2333,4375 2343,4593
    52 2550 2386,291667 2394,2362
    53 2700 2427,833333 2435,7625
    54 2700 2471,875 2481,7906
    55 2700 2524,833333 2532,7514
    56 2850 2571,833333 2579,7739
    57 2850 2615,875 2625,8139
    58 2850 2667,854167 2675,7824
    59 3000 2708,833333 2716,8225
    60 3000 2755,833333 2765,7653
    61 3000 2803,833333 2811,7633
    62 3150 2851,4375 2861,3976
    63 3150 2896,604167 2906,6434
    64 3150 2950,5 2958,6264
    65 3150 2992,604167 3002,648
    66 3300 3050,395833 3058,314
    67 3300 3091,354167 3099,2869
    68 3300 3137,916667 3147,8286
    69 3450 3180,895833 3188,8205
    70 3450 3224,875 3232,8145
    71 3450 3273,104167 3283,0937
    72 3600 3317,333333 3327,3989
    73 3600 3371,270833 3379,1912
    74 3600 3416,75 3426,7078
    75 3750 3460,083333 3468,1819
    76 3750 3504,6875 3512,6289
    77 3750 3551,729167 3561,6292
    78 3750 3596,770833 3606,7086
    79 3900 3647,854167 3655,8567
    80 3900 3696,729167 3706,641
    81 3900 3737,729167 3747,6335
    82 4000 3786,708333 3794,6446
    83 4000 3830,791667 3840,7645
    84 4000 3880,8125 3888,8916
    85 4000 3926,854167 3934,9296
    86 4000 3974,75 3984,6784
    87 4000 4022,791667 4030,7311

    Meine Empfehlung wäre

    statt

    Code
    SceneTriggerManager.getInstance().getSceneTriggers<TimecodeSceneTrigger>().ForEach<TimecodeSceneTrigger>((Action<TimecodeSceneTrigger>) (t => t.Timecode = (long) blockAlignedStream.CurrentTime.TotalMilliseconds));

    lieber

    Code
    double wavePositionMs = WaveOut.GetPosition() * 1000.0 / WaveFormat.BitsPerSample / WaveFormat.Channels * 8 / WaveFormat.SampleRate;
    SceneTriggerManager.getInstance().getSceneTriggers<TimecodeSceneTrigger>().ForEach<TimecodeSceneTrigger>((Action<TimecodeSceneTrigger>) (t => t.Timecode = (long) wavePositionMs));


    Dann ist der Timestamp perfekt ohne Abweichung vom abspielen.


    Fazit:

    Mit dem aktuellen Code wird eine Genauigkeit von ~8 FPS (~120ms) erzielt wobei es eigentlich ja 40ms mit einem TImecode von 25 FPS wäre


    Wenn ihr mir jetzt immer noch nicht glaubt dann weiß ich auch nicht mehr :P


    Bitte überzeugt euch selbst im Anhang

    Das ist eher ein bisschen der Punkt, wie DMXControl 3 eine Cuelist wiedergibt. Hierzu haben wir auf unserem YouTube-Kanal auch ein extra Video, dass die Zusammenhänge nochmal genau erklärt. Dem folgend, ist das Verhalten in dem Sinne genau richtig. Die Cuelist wird von oben nach unten abgearbeitet. Und da die Cue 5 mit dem Timecode für 10 Sekunden vor der Cue 7 mit der erneuten Zeit für 17 Frames kommt, wird die Cue 7 nicht mehr wiedergegeben, da der Timecode schon längst abgelaufen ist.

    Gut ich habe in dem fall tatsächlich ein blödes Beispiel gefliefert und ja so macht das ganze sinn.


    Ich versuche das problem jetzt nochmal etwas genauer zu beschreiben


    vs

    Beide Werden exakt gleich ausgeführt. Das delay zwischen den einzelnen (Lampe 100% und Lampe 0%) ist immer der gleiche.

    Man sieht auch das beide an der gleichen stelle stoppen (weil die audiodatei zu ende ist OBWOHL der Timecode der eingegeben wurde vor dem ende des Sounds war)

    Hier einmal in Audacity die Tonspur. Man sieht unten das sie .15 lang ist.

    Die Videos zum Thema Trigger und advanced Trigger habe ich mir bereits angeschaut.



    Das untere müsste doch logischerweise Sehr schnell hintereinander abgespielt werden und deutlich schneller als das obrige sein oder verstehe ich da was falsch?

    Die weitere Frage ist: was geben die Cues wieder? Vielleicht lässt sich dies auch mit einem Effekt und dann mit nur einer Cue realisieren. Da wäre dann ggf. mal interessant, dein Projekt zu sehen, damit das am "lebenden Objekt" nachvollzogen werden kann. Ist bestimmt einfacher, als das in viele Worte zu packen. Bzw. umgekehrt: du formulierst dein gewünschtes Ergebnis und wir schauen gemeinsam, wie das sich im Ideallfall umsetzen lässt.

    Die Cues setzen lediglich die Helligkeit auf 100% und auf 0% (manuelles strobo quasi).

    Der sound ist ein lautes Türklopfen von "Fbi open up" und möchte gerne das bei jedem Schlag das licht aufblinkt.

    Natürlich könnte man ein Strobo effekt nehmen allerdings löst das nicht das Grundproblem, da die sounds nicht immer einen Rythmus haben wie bei Musik. Z.b ein lautes Türklopfen hat ungefähr den gleichen rythmus wo das ganze noch gehen würde bei unrythmichen sounds leider nicht.

    Gerne teile ich heute Abend mein Projekt (es ist eigentlich sogut wie leer außer diese eine Cuelist zum testen). Vielen dank für die Hilfe bis jetzt!

    öhm ich weiß ja nicht, was und wie du das getestet hast, aber Cues hören tatsächlich absolut auf Timecodes und nicht relativ, so wie du das hier in deinem Bild aufgebaut hast. So wie in deinem Bild kann das also nicht funktionieren ;) Gib allen Cues einen absoluten Timecode als Startpunkt an und dann musst du einen Timecode in DMXC 3 produzieren. Dies geht am besten mit einem Audiofile, was du in einer (z.B. anderen) Cue startest. Der Timecode dieser laufenden Audiodatei triggert dann die Cues. Mit deiner relativen Angabe der Cue-Zeiten (wenn du also tatsächlich alle zum selben Zeitpunkt triggerst) müsstest du die minimal technische Triggerzeit zwischen zwei Cues innerhalb einer Cuelist sehen (müsste mir das aber nochmal genauer im Code anschauen).

    Mein test sah genau so aus

    Wenn das ganze absolut wäre, würden die unteren Aktionen trotzdem ausgeführt werden. Der Timecode "geber" ist in dem falle eine Audio die als aller erstes abspielt wird.

    Vielleicht liegt es auch an einer falschen Einstellung welche ich übersehe aber wie man im Screenshot sehen kann warten die unteren Aktionen darauf das der obere Timecode fertig wird.


    Bevor du das machst, damit einiges an eigener Entwicklungszeit verbrätst und etwas doppelt machst, was es teilweise schon gibt: Was willst du denn überhaupt am Ende erreichen, also was ist deine Anwendung? Klar kann man versuchen, Dinge selbst noch einmal "besser" zu implementieren als die Entwickler, die auch die Innereien der Software kennen ;) . Das hängt aber eben auch von einigen Randbedingungen ab, die man vielleicht nicht auf den ersten Blick sieht. Aber vielleicht gibt es ja auch andere, einfachere Wege, das zu erreichen, was du möchtest :) . Und wenn es da wirklich Probleme gibt, kann man sich die nochmal anschauen und fixen.

    Ich möchte nichts "besser" entwickeln sondern etwas was mein genau meinen Anforderungen entspricht. Aber deswegen frage ich genau hier nach um zu schauen ob es ein echtes Problem ist oder nur User error :)

    Natürlich kann ich nichts "besser" implementieren als die Entwickler. Ich habe legitlich eine andere vorstellen davon wie das funktionieren soll (wie gesagt kann ja auch einfach eine einstellungssache sein)

    Genau genommen möchte ich auf ein soundboard für meinen twitch kanal haben welche dann neben dem sound eine kleine lichtshow abspielt. Z.b bei einem Flashbang sound effekt alle lichter 100% und auf weiß

    Heißt quasi eine art Soundboard welche den abgespielten Sound nochmal mittels Licht unterstreicht.


    P.s Das ganze soll in keinster weise eine Kritik sein ich find super was ihr hier geschaffen! Mir gefällt besonders gut das man einen Server hat welcher die ganze arbeit macht und man einfach mit einem seperaten Client verbindet. Das ganze noch Linux kompatible und den Kernel Open Source und die welt ist perfekt ^^

    Hey :)

    Gerade gesehen das dieser auf 10% stand. Ich hätte allerdings erwartet das dieser Wert nichts aussagt wenn man überall 0ms als Fade stehen hat :D

    Hier nochmal ein screenshot wie das gerade mit den timecodes aussieht.


    Egal ob ich nun 10% oder 1000% einstelle es wird beim Timecode gleich schnell abgespielt (was ja prinzipiell sinn macht)

    Leider gibt es trotzdem keinen unterschied zwischen 00:00:00.10 und 00:00:00.01

    Gibt es eine Möglichkeit das die trigger auch auf dem Timecode direkt hören und nicht der Timecode als eine art "delay" dient?


    Nach meinen tests verhält sich das ganze nämlich relativ und nicht absolut was schon sehr schade ist.

    Gerne schaue ich mir deine Berichte an um noch mehr zu lernen, da ich selber noch ziemlich neu in der Software und allgemein das Thema DMX bin. Hast du diesbezüglich ein Konkretes Video oder ein anderen Link für mich?

    Ich bin aber hauptsächlich mehr an der Entwicklung und Automatisierung interessiert weshalb ich aktuell ein "timecode+" Plugin schreibe (was ziemlich anstregend ist ohne ein funzel an Dokumentation :P ) welches dann im besten falle 40 FPS unterstützt um noch genauer zu sein

    Hallo,

    generell kann man schon sagen, dass DMXControl 3 recht genau triggert. Aber irgendwo sind tatsächlich die technischen Grenzen. Alles unter 100ms-150ms (jenachdem, welche Aktion es ist) wird schon sehr schwierig. Das liegt aber auch daran, dass wir auf einem Windows-System arbeiten, also definitiv einem nicht echtzeitfähigen Betriebssystem. Wenn das eben gerade wichtigere Aufgaben hat, kommt DMXControl erst verspätet dran und kann dann eben auch erst verspätet starten. Nur der Vollständigkeit halber: Auf einem Echtzeitbetriebssystem sind die Delays, also die zeitlichen Verzögerungen sogar noch größer, aber sie sind exakter, planbarer und haben weniger Jitter (zeitliche Ungenauigkeit)). Dieses Problem haben prinzipiell alle Programme auf Windows (und normalen Linuxen). Auch andere Faktoren in der gesamten Ansteuerungskette wie z.B. das Interface und die Kommunikation dahin spielen eine Rolle. Das technische Delay von einigen ms an dieser Stelle und den Jitter von bestimmt auch einigen ms wirst du aber nur sehr sehr schwer und mit spezieller, sich aktiv synchronisierender Hardware deutlich drücken können. Wenn du jetzt also einen Strobe auf exakt gewisse Frames haben möchtest, dann wird das ziemlich sicher nicht funktionieren. Das wirst du aber vermutlich auch mit anderen Lichtsteuerungsprogrammen nicht hinbekommen.

    Viele Grüße

    JP

    Hey,

    vielen dank für deine ausführliche Antwort!

    Da meine Anforderung von ein "paar" ms (5 FPS = 200ms) definitiv kein Echtzeitbetriebssytem benötigt denke ich eher das es ein anderes Problem sein muss.

    Vorallem weil gerade DAWS oder Videoschnittprogramme perfekt funktionieren und auch kein hör oder sichtbaren jitter haben.

    Ich glaube eher das DMXC3 wohl die zeit ganz falsch Interpretiert (jegliche delays, fadings sind auf 0ms gesetzt)

    Wenn ich bis 100 zähle komme ich nicht bei 1000 raus :D

    Gleiches problem hier. 10 Sekunden statt 1 Sekunde

    Ich vermute das wird beim Timecode wohl genau das gleiche Problem sein

    Leider habe ich das Problem das ich keine frame perfect Ausgabe erzielen kann. Ich muss den Dimmer alle paar frames ändern was nach meinem testen einfach nicht möglich ist. Die cue wird gleich schnell abgespielt egal ob 00:00:00.01 oder 00:00:00.10. Bin ich da der einzige der das Problem hat?