• Hi Guest!

    We are extremely excited to announce the release of our first Beta1.1 and the first release of our Public AddonKit!
    To participate in the Beta, a subscription to the Entertainer or Creator Tier is required. For access to the Public AddonKit you must be a Creator tier member. Once subscribed, download instructions can be found here.

    Click here for information and guides regarding the VaM2 beta. Join our Discord server for more announcements and community discussion about VaM2.
  • Hi Guest!

    VaM2 Resource Categories have now been added to the Hub! For information on posting VaM2 resources and details about VaM2 related changes to our Community Forums, please see our official announcement here.
C&G-STUDIO Audio Visualizer Suite

Plugins + Scripts C&G-STUDIO Audio Visualizer Suite

Download [<1 MB]

Shadow Venom

Well-known member
Featured Contributor
Joined
Oct 10, 2022
Messages
300
Reactions
2,112
Shadow Venom submitted a new resource:

C&G-STUDIO Audio Visualizer Suite - DMX style lighting control system for VAM

View attachment 539624

🌟 Release Note — C&G-STUDIO Audio Visualizer Suite


The CG-Studio Audio Visualizer Suite is a complete modular system designed to bring real-world DMX-style lighting control into Virt-A-Mate — in the simplest and most user-friendly way possible.


This suite allows creators to build fully synchronized, music-driven lighting environments without the need for complex...

Read more about this resource...
 
Shadow Venom updated C&G-STUDIO Audio Visualizer Suite with a new update entry:

LEDEmissionFXController Performance Update

LEDEmissionFXController Performance Update​

  • Switched per-material Material.SetColor writes to MaterialPropertyBlock (MPB) per renderer, with per-renderer MPB caching.
  • Added update throttling via _updateInterval (default 1/60s) to cap live-update frequency.
  • Implemented per-frame batching with _maxRenderersPerFrame and a rolling _rendererCursor to spread large updates across frames.
  • Introduced color-change thresholding (NearlyEqualColor) to skip redundant...

Read the rest of this update entry...
 
Shadow Venom updated C&G-STUDIO Audio Visualizer Suite with a new update entry:

LEDEmissionFXController v1.2 Update

LEDEmissionFXController Bug Fix​

  • Fixed a minor bug where External Param list was empty after loading a saved scene. The plugin now correctly restores the selected external storable and parameter without requiring manual re-selection.
  • Improved initialization flow for external plugin and parameter lists.
  • Minor internal cleanup and stability improvements.

Read the rest of this update entry...
 
èż™çœŸæ˜Żć€ȘæŁ’äș†ïŒŒäœ çœŸæ˜Żć€Șć„œäș†ă€‚
 
Holy shit, I just figured out how powerful BPMIntervalTrigger is!
I can SYNC EVERYTHING.
I watched your tutorial video a few times but didn't really get it. I may have to entirely rebuild my template file around this. Thanks, really awesome work.
 
Holy shit, I just figured out how powerful BPMIntervalTrigger is!
I can SYNC EVERYTHING.
I watched your tutorial video a few times but didn't really get it. I may have to entirely rebuild my template file around this. Thanks, really awesome work.

Yeah, it gives you a ton of freedom and opens up so many possibilities. You can check out this video example, it shows how every element in a scene can be fully controlled by BPMIntervalTrigger, including the character’s movements.


In short, you can use it to create any level of riding-dance or dance-sex scene you want, and it’s incredibly efficient.
 
Last edited:
Yeah, it gives you a ton of freedom and opens up so many possibilities. You can check out this video example, it shows how every element in a scene can be fully controlled by BPMIntervalTrigger, including the character’s movements.


In short, you can use it to create any level of riding-dance or dance-sex scene you want, and it’s incredibly efficient.
I need to spend more time with it to get comfortable, but one thing I did notice is that it has trouble with lights when the BPM is shifting.

My planned use case still uses a slider to control the intensity (as my Missionary 2 & Rave night scenes do), and I was experimenting with adjusting the BPM using that slider and noticed that lights sync'd to BPM were 'pausing' until the adjustment was done. Not a big deal since I figured out a workaround (slider that controls the lights that is controlled by BPMIntervalTrigger plugin), but thought you might want to know.

I'm hoping I can adjust my workflow soon to use your plugin and release in a new scene soon.
 
I need to spend more time with it to get comfortable, but one thing I did notice is that it has trouble with lights when the BPM is shifting.

My planned use case still uses a slider to control the intensity (as my Missionary 2 & Rave night scenes do), and I was experimenting with adjusting the BPM using that slider and noticed that lights sync'd to BPM were 'pausing' until the adjustment was done. Not a big deal since I figured out a workaround (slider that controls the lights that is controlled by BPMIntervalTrigger plugin), but thought you might want to know.

I'm hoping I can adjust my workflow soon to use your plugin and release in a new scene soon.
003 (1).png


When you need to adjust the BPM dynamically, for example, when using auto-BPM mode in RhythmReactor or changing the BPM through an external slider, you need to uncheck Reset Timer On Change. Otherwise, the timer will reset every time the value changes.
 
View attachment 542160

When you need to adjust the BPM dynamically, for example, when using auto-BPM mode in RhythmReactor or changing the BPM through an external slider, you need to uncheck Reset Timer On Change. Otherwise, the timer will reset every time the value changes.
That's great! I did not see that option. Thanks for the response!
 
Shadow Venom updated C&G-STUDIO Audio Visualizer Suite with a new update entry:

V1.3 Performance Optimization Update

Changelog: V1.3 Performance Optimization Update



Core Improvements
  • Reduced GC Pressure: Major refactoring across core scripts to eliminate per-frame memory allocations (gc), resulting in smoother frame rates and reduced stuttering during long sessions.
  • CPU Optimization: Optimized Update loops to remove unnecessary overhead.
Script Specifics
  • RhythmReactor
    • Fix: Implemented caching...

Read the rest of this update entry...
 
Any idea why event triggers set to use the timer and second point value might not be working for BPMIntervalTrigger? I can get transition triggers working just fine, such as changing the intensity of a light source for example, but if I try to change the intensity with an event trigger and use a timer or second point value, nothing happens.
 
Any idea why event triggers set to use the timer and second point value might not be working for BPMIntervalTrigger? I can get transition triggers working just fine, such as changing the intensity of a light source for example, but if I try to change the intensity with an event trigger and use a timer or second point value, nothing happens.

I’m not completely sure what exact problem you ran into, but I’ll try my best to explain. Each phase in BPMIntervalTrigger offers two types of triggers.

The first type is the event trigger. It fires once at the end of each phase cycle. For example, if your music BPM is 120 and Phase B is set to 2 beats, then it will fire once per second. If you want to use event-type triggers, this is where you should set them up.

The second type is the transitional trigger, which you’ve already tried.

If you set up an event trigger but don’t see any effect, based on the example you described, the most likely issue is this: you probably assigned an event trigger to change the light intensity, but at the same time you also have a transitional trigger controlling that same intensity. In that situation, the event trigger won’t produce any visible result, because its change is basically overwritten in the same frame by the transitional trigger’s value.

A simple way to check whether an event trigger is actually firing and what it’s doing is to test it with something very obvious. For example, create a new cube shape and set a “ToggleOn” trigger for it in a certain phase, then watch whether it repeatedly appears and disappears on the beat.

Or here’s another way to test it: (A setup method that follows the rhythmic logic while still creating a slight sense of randomness or drifting offset.)

Let’s say you have two phases, A and B.
Phase A has an interval of 2 beats, and Phase B has an interval of 3 beats.
You assign the light intensity to A’s transition trigger, and in A’s event trigger, you set the light color to red.
Then, in Phase B, you add another event trigger that changes the color to blue.


What you’ll see is this:

The light’s brightness keeps pulsing smoothly in sync with Phase A’s rhythm, while the color keeps switching between red and blue — but not in perfect timing, since A and B run on different intervals.
Every time their cycles overlap (every 6 beats), the two triggers line up for a moment, and the color pattern briefly resets before drifting out of sync again.

With this setup, on the sixth beat, and assuming there’s no trigger delay or frame-order variation, B will usually fire after A. VAM’s trigger system generally runs in list order or execution sequence, so the final result will end up being blue.

Visually, the light keeps flashing between red and blue, but because the two cycles aren’t aligned (2 beats vs. 3 beats), the color changes slowly fall out of sync. This creates a shifting loop rhythm, repeating roughly every six beats.

*** You should be aware that when using this kind of setup, you need to avoid situations where two phases have intervals that are exact multiples of each other, such as 2 and 4 or 3 and 6. In those cases, the event triggers line up perfectly every few cycles, and one phase, usually the one with the longer interval, will always overwrite the other phase’s color change right after it happens.

Even though both events are technically firing, the color gets replaced immediately, so visually you won’t see any change at all. The light will appear to stay locked on a single color.
 
Last edited:
I’m not completely sure what exact problem you ran into, but I’ll try my best to explain. Each phase in BPMIntervalTrigger offers two types of triggers.

The first type is the event trigger. It fires once at the end of each phase cycle. For example, if your music BPM is 120 and Phase B is set to 2 beats, then it will fire once per second. If you want to use event-type triggers, this is where you should set them up.

The second type is the transitional trigger, which you’ve already tried.

If you set up an event trigger but don’t see any effect, based on the example you described, the most likely issue is this: you probably assigned an event trigger to change the light intensity, but at the same time you also have a transitional trigger controlling that same intensity. In that situation, the event trigger won’t produce any visible result, because its change is basically overwritten in the same frame by the transitional trigger’s value.

A simple way to check whether an event trigger is actually firing and what it’s doing is to test it with something very obvious. For example, create a new cube shape and set a “ToggleOn” trigger for it in a certain phase, then watch whether it repeatedly appears and disappears on the beat.

Or here’s another way to test it: (A setup method that follows the rhythmic logic while still creating a slight sense of randomness or drifting offset.)

Let’s say you have two phases, A and B.
Phase A has an interval of 2 beats, and Phase B has an interval of 3 beats.
You assign the light intensity to A’s transition trigger, and in A’s event trigger, you set the light color to red.
Then, in Phase B, you add another event trigger that changes the color to blue.


What you’ll see is this:

The light’s brightness keeps pulsing smoothly in sync with Phase A’s rhythm, while the color keeps switching between red and blue — but not in perfect timing, since A and B run on different intervals.
Every time their cycles overlap (every 6 beats), the two triggers line up for a moment, and the color pattern briefly resets before drifting out of sync again.

With this setup, on the sixth beat, and assuming there’s no trigger delay or frame-order variation, B will usually fire after A. VAM’s trigger system generally runs in list order or execution sequence, so the final result will end up being blue.

Visually, the light keeps flashing between red and blue, but because the two cycles aren’t aligned (2 beats vs. 3 beats), the color changes slowly fall out of sync. This creates a shifting loop rhythm, repeating roughly every six beats.

*** You should be aware that when using this kind of setup, you need to avoid situations where two phases have intervals that are exact multiples of each other, such as 2 and 4 or 3 and 6. In those cases, the event triggers line up perfectly every few cycles, and one phase, usually the one with the longer interval, will always overwrite the other phase’s color change right after it happens.

Even though both events are technically firing, the color gets replaced immediately, so visually you won’t see any change at all. The light will appear to stay locked on a single color.
Thanks for the response!

I checked, and I don't have a transitional trigger set to control the same light source intensity as my event trigger. I uploaded a video that illustrates my issue a bit better.

In the video, I have both a light set up with an event trigger in the same manner as I had previously mentioned, and an event trigger that triggers the "ToggleOn" trigger that you mentioned for testing. I also have a button set up the exact same way as the light intensity trigger I set in BPMIntervalTrigger to show how it should normally work. When BPMIntervalTrigger is running, the cube toggles on and off as expected, but the light does not change its intensity despite it working for the button. Notice how the event trigger for the light is set up; the only thing that should be making the light's intensity increase is the timer and second value setting, since the light's intensity starts and ends at zero. The intent in doing it this way is to create more of a flash bulb kind of effect since the light intensifies quickly and decays more slowly. The result I'm getting would be what I would expect if I had both the timer and second value settings turned off.

I'm guessing this is either a "user error" or "why would you do it like THAT" kind of scenario.
 
Last edited:
Thanks for the response!

I checked, and I don't have a transitional trigger set to control the same light source intensity as my event trigger. I uploaded a video that illustrates my issue a bit better.

In the video, I have both a light set up with an event trigger in the same manner as I had previously mentioned, and an event trigger that triggers the "ToggleOn" trigger that you mentioned for testing. I also have a button set up the exact same way as the light intensity trigger I set in BPMIntervalTrigger to show how it should normally work. When BPMIntervalTrigger is running, the cube toggles on and off as expected, but the light does not change its intensity despite it working for the button. Notice how the event trigger for the light is set up; the only thing that should be making the light's intensity increase is the timer and second value setting, since the light's intensity starts and ends at zero. The intent in doing it this way is to create more of a flash bulb kind of effect since the light intensifies quickly and decays more slowly. The result I'm getting would be what I would expect if I had both the timer and second value settings turned off.

I'm guessing this is either a "user error" or "why would you do it like THAT" kind of scenario.
Thanks for the video, it explained everything. I think I’ve found the problem.
 
Last edited:
Back
Top Bottom