How to get that "burst" effect?

Hi!
So, I’ve recently been playing Deselmine’s Mage kanade’s futanari dungeon quest with the device integration and there is an option in the configuration file where if activated the signal will be motulated into a burst instead of the usual sin wave.

I think this is way more intresting for vibration-only toys such as the Max 2 by Lovense.

The intensity and speed of the bursts are function of the amplitude and frequency of the input wave.

I would have liked to know if there was a way to slap such a modulation onto a signal fed in MultiFunPlayer or if there is an easy way to convert and normal .funscript file to a “bursted”-style one.

Thank you very much.

Link to the article about the game

Hello,
I don’t think MultiFunPlayer or Intiface has such a mode. I looked for that before as well. However ScriptPlayer has a similar mode in the settings that you might try, although it’s different. It might be possible to convert a script.
For example positions A, B, C I set intensity and duration for position B:
newValueB = intensityMultiplier * (valueA - valueB) / (timeB - timeA)
duration = durationMultiplier * (timeC - timeB) (max. 800 ms or other value)
duationMultiplier = 0.8 or an arbitrary value
So in a conversion, you would insert a zero value after duration after every value to turn off. Then in MultiFunPlayer the step interpolation should achieve a similar effect

This python script will convert a given funscript to a down-burst-style script for vibration-type devices, same as in the game mod. To get the burst effect, the resulting funscript needs to be used with step interpolation, which is available in MultiFunPlayer. The filename can be provided in the script or as a command-line argument. There are some options at the top of the script, the most important being speed_factor (intensity) and duration_factor (length of a burst). It can optionally generate steps in the script with generate_steps for other players, but the results were not as good for me.

import json
import os
import sys

filename = "script.funscript"
if len(sys.argv) == 2:
    filename = sys.argv[1]
new_filename = "vib_" + filename
duration_factor = 1.1
min_duration = 100
max_duration = 800
speed_factor = 0.1
generate_steps = False

f = open(filename, "r")
data = json.load(f)
f.close()
count = len(data["actions"])
new_actions = []
for i in range(1, count-1):
    previous = data["actions"][i - 1]
    current = data["actions"][i]
    next = data["actions"][i + 1]
    pos_delta = previous["pos"] - current["pos"]
    if pos_delta <= 0:
        continue
    prev_t = previous["at"]
    curr_t = current["at"]
    next_t = next["at"]
    t_delta = curr_t - prev_t
    t_delta /= 1000.0
    speed = pos_delta / t_delta
    speed *= speed_factor
    duration = duration_factor * (next_t - curr_t)
    duration = max(min_duration, min(max_duration, duration))
    intensity = int(min(100, max(0, speed)))
    
    if generate_steps:
        hold_action = {}
        hold_action["at"] = int(curr_t - 10)
        hold_action["pos"] = 0
        new_actions.append(hold_action)
    on_action = {}
    on_action["at"] = int(curr_t)
    on_action["pos"] = intensity
    new_actions.append(on_action)
    if generate_steps:
        hold_action = {}
        hold_action["at"] = int(curr_t + duration - 10)
        hold_action["pos"] = intensity
        new_actions.append(hold_action)
    off_action = {}
    off_action["at"] = int(curr_t + duration)
    off_action["pos"] = 0
    new_actions.append(off_action)
    
data["actions"] = new_actions
if os.path.exists(new_filename):
    os.remove(new_filename)
f = open(new_filename, "w")
json.dump(data, f, indent=4)
f.close()

Thank you very much, I was trying to write a script myself but the results were less than optimal.
Gonna try yours and come back to you.