I.have found that running fun scripts through Restim, and the level of fine tuning it allows, feels much better on my box(312B) than most CH/PMV estim mp3s particularly tri phase files that are intended to be run with common on head. This file feels pretty good, but I really like to try it though Re stim with its full suite of scripts.throwawayacct wrote: ↑Wed Mar 13, 2024 4:05 pmWhy on earth would you want to run a funscript for a suite that already includes a (quite masterful) estim track?samsonjude1776 wrote: ↑Fri Mar 08, 2024 10:52 pm Are there fun scripts for this release that can be played through ReStim?
[RELEASE] [ESTIM] Mistress and the Remote Control Box
Moderator: andyp
-
- Explorer
- Posts: 49
- Joined: Sun Feb 27, 2022 5:02 am
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
A simple 2-channel funscript lack the amount of information needed to reproduce the signal, but restim can read multiple funscripts and use these as channels. Given enough channels, you can reproduce the signal that's in the estim mp3 file quite precisely, as some of the main sensation in the track comes from restims encoding of phase. The estim track is sorta "less is more" in that it uses very few building blocks, so a reproduction is very much within the bounds of possibility.throwawayacct wrote: ↑Wed Mar 13, 2024 4:05 pm Why on earth would you want to run a funscript for a suite that already includes a (quite masterful) estim track?
I generated the track via SuperCollider. SuperCollider has a barrier to entry in that it's a software synth controlled through a programming language. If you "reverse engineer" the signals I generated into their underlying components, you can implement it all in restim, reading additional channels as inputs for each component. This opens up signal generation to a far larger community because there are already tools which lets you generate funscripts with UIs and such.
For development of new building blocks for estim, I think supercollider is an excellent tool because you have so much control over signal generation. If the best of those building blocks get implemented in restim, I have a hunch the quality of estim signals will improve as a whole.
It might be beneficial to have a different input format because something like restim allows us to render a signal specifically for a given power box, or do explicit electrode calibration. This means we can disable certain features of the signal if the power box can't cope with it. Or alter parts of the signal to make the power box pick it up easier.
Overall, I'm happy with this development. Restim is pushing the "Pareto Curve" of your typical estim experience by quite a lot, and people are creating estim tracks for existing experiences using the new tools.
- edger477
- Explorer At Heart
- Posts: 677
- Joined: Mon Nov 29, 2021 8:24 pm
- Gender: Male
- Sexual Orientation: Straight
- I am a: None of the above
- Location: Europe
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Thank you for this, I wanted to write it but didn't had the time this morning :)phx wrote: ↑Thu Mar 14, 2024 2:40 pmthrowawayacct wrote: ↑Wed Mar 13, 2024 4:05 pm Why on earth would you want to run a funscript for a suite that already includes a (quite masterful) estim track?
- Spoiler: show
my estim creations: https://mega.nz/folder/73pxmBBQ#X6ylDzRafzTt9wanZ0dacw
-
- Explorer At Heart
- Posts: 280
- Joined: Wed Jul 31, 2019 5:51 pm
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Except everyone who is a OSX user and not experienced in development tools/coding/programming is left on the outside looking in. While its great a system is being developed, I'd wager 40% of the stim users out there/here are excluded from such advancements.
BEFORE the inevitable "It's easy just use python/etc", *read my first line* and realize not everyone is a STEMlord or willing to muck about in a $2xxx.00 system they use for work, or don't have the time. You may as well be saying "It's easy just learn Mandarin Chinese".
OSX users are quite familiar with being left out of most development, which is insane to me given that it's the next largest PC user base. While it's all well and good that Diglet is putting in a lot of hours and work to make Restim...work, please recognize there are long time users who have no reasonable access and therefore no experience with this system.
- edger477
- Explorer At Heart
- Posts: 677
- Joined: Mon Nov 29, 2021 8:24 pm
- Gender: Male
- Sexual Orientation: Straight
- I am a: None of the above
- Location: Europe
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
I am not sure based on what users who account for 10% of PC sales are 40% of stim users? And even for those 10%, there is parallels, making it non-argument, plus restim has bake mp3 that creators will also provide so you can play the same content without calibration.throwawayacct wrote: ↑Fri Mar 15, 2024 5:30 pm Except everyone who is a OSX user and not experienced in development tools/coding/programming is left on the outside looking in. While its great a system is being developed, I'd wager 40% of the stim users out there/here are excluded from such advancements.
This type of rant should go towards Apple, not the developers who make open-source software for the benefit of everyone in community, and using a programming language that is supported on OSX. Of course developer who doesn't have OSX can't test how a software that needs access to drivers to produce sound works on OSX. This is something another developer with OSX should do for OSX users, and I will not feel sorry for OSX users because there is no developer among them willing to test/make pull request to create version that works there. You can't rant at diglet because of that, I am sorry, but this is just immature. You can't expect a developer to buy a 2000$ machine just to support 10% users when he can support 90% with 12 year old machine he already has.
my estim creations: https://mega.nz/folder/73pxmBBQ#X6ylDzRafzTt9wanZ0dacw
-
- Explorer At Heart
- Posts: 160
- Joined: Fri Aug 07, 2009 8:37 pm
- Sexual Orientation: Straight
- I am a: None of the above
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Greetings fellow mac user. I'm no stemlord but I do have some experience fiddling with macs. If you want I will pm you the 10 or so commands to run to install restim on Mac, once python is installed. (Doing that is probably a few more commands, but I would have to read up to find out how it is best done as I did it so long ago I forgot) .throwawayacct wrote: ↑Fri Mar 15, 2024 5:30 pmExcept everyone who is a OSX user and not experienced in development tools/coding/programming is left on the outside looking in. While its great a system is being developed, I'd wager 40% of the stim users out there/here are excluded from such advancements.
BEFORE the inevitable "It's easy just use python/etc", *read my first line* and realize not everyone is a STEMlord or willing to muck about in a $2xxx.00 system they use for work, or don't have the time. You may as well be saying "It's easy just learn Mandarin Chinese".
OSX users are quite familiar with being left out of most development, which is insane to me given that it's the next largest PC user base. While it's all well and good that Diglet is putting in a lot of hours and work to make Restim...work, please recognize there are long time users who have no reasonable access and therefore no experience with this system.
It's totally worth a try. But you do need to be willing to use the terminal, and have a basic idea of how that works, and install a few things using it. If your Mac experience is point and click on things then it's probably not going to work for you until someone packages it up nicely.
Alternatively, if you buy parallels and install windows you can run it on your mac. I've used / tried both options. If you choose this option, then all the other PC based funscripting stuff (e.g.) can be installed point and click.
Sorry if this is already all obvious, and just frustrates. I'm not skilled enough to know how to repackage restim to make it one click install I am afraid. Hopefull posting about this someone will come out of the woodwork
-
- Explorer
- Posts: 89
- Joined: Tue Jan 28, 2020 4:37 pm
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
I’m also on Mac.
I’ve been stimming for ages, in dual or triphase configuration.
When necessary, I use Audacity to adjust mp3 files to my preferences (I think every stimmer should learn the basics of Audacity)
And now comes Restim… which is supposed to work on OSX
I’m no software engineer… I struggled to install Python and make Restim running… but it works (couldn’t say how though )
Then I played with the calibration tab… and I ended with « 0 0 0 » for Neutral / Right / Center power settings : Restim confirmed to me that I was happy with my usual triphase configuration
All this to say that you won’t necessarily need to have Restim running on you computer to enjoy the work of your beloved creators.
For playing Edger477’s latest creations, I used Restim just to generate the mp3 (with 0 0 0 in calibration tab).
Of course there are undoubtedlyy many benefits to using Restim live while stimming.
But personally I’m happy with my mp3 player and TV screen
I am grateful to everyone involved in these new developments
I’ve been stimming for ages, in dual or triphase configuration.
When necessary, I use Audacity to adjust mp3 files to my preferences (I think every stimmer should learn the basics of Audacity)
And now comes Restim… which is supposed to work on OSX
I’m no software engineer… I struggled to install Python and make Restim running… but it works (couldn’t say how though )
Then I played with the calibration tab… and I ended with « 0 0 0 » for Neutral / Right / Center power settings : Restim confirmed to me that I was happy with my usual triphase configuration
All this to say that you won’t necessarily need to have Restim running on you computer to enjoy the work of your beloved creators.
For playing Edger477’s latest creations, I used Restim just to generate the mp3 (with 0 0 0 in calibration tab).
Of course there are undoubtedlyy many benefits to using Restim live while stimming.
But personally I’m happy with my mp3 player and TV screen
I am grateful to everyone involved in these new developments
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
All isn't lost.throwawayacct wrote: ↑Fri Mar 15, 2024 5:30 pm Except everyone who is a OSX user and not experienced in development tools/coding/programming is left on the outside looking in. While its great a system is being developed, I'd wager 40% of the stim users out there/here are excluded from such advancements.
Restim can now bake audio, i.e., generate an MP3 file. In a sense, this means you don't need the software to enjoy signals generated. It's only necessary if you want specific calibration or you want to do signal development.
It isn't uncommon you develop mainly for one platform first, then branch out to other platforms as you gain traction. SuperCollider started out as a Mac-only platform back in the 90'es for instance.
In any case, I like providing an mp3 file, at the very least as a fallback.
-
- Explorer At Heart
- Posts: 160
- Joined: Fri Aug 07, 2009 8:37 pm
- Sexual Orientation: Straight
- I am a: None of the above
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
OK I did it. Here is a guide to how to install restim on a Mac:
viewtopic.php?t=26854
I thought I would post it in a new thread to avoid this one being takeover by techie discussion.
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
I took another stab at creating funscripts for this video, this time I was more successful.
Get the funscripts here: https://mega.nz/folder/sPlSnIqb#MOazR7rcP_gkC0hOkFyDEQ
These funscripts are direct conversions from the original mp3, no manual edits.
Steps:
Get Restim v1.16 or later: https://github.com/diglet48/restim/releases
In preferences, set "pulse frequency" to 0 ... 200 and "pulse width" to 3..20
In the main screen, set frequency to 800 and rise time to 2. If you want a less aggressive signal, you can set the rise time higher (i.e. 5).
Other settings can be left at defaults.
I tested this funscript about 4 times and I would say it's almost identical to the original. If you liked the original and want to know how these signals are created, you can try viewing them in OpenFunScripter.
This release only works well with 800hz. If you want to use higher/lower frequencies, you need to scale up the pulse width limits (for 1600hz, use 2x the recommended pulse width min and max).
Configuring this is a bit cumbersome. In the future I'll add a way to read the config parameters from file, this way you don't have to change the settings every time you want to try a different release.
Get the funscripts here: https://mega.nz/folder/sPlSnIqb#MOazR7rcP_gkC0hOkFyDEQ
These funscripts are direct conversions from the original mp3, no manual edits.
Steps:
Get Restim v1.16 or later: https://github.com/diglet48/restim/releases
In preferences, set "pulse frequency" to 0 ... 200 and "pulse width" to 3..20
In the main screen, set frequency to 800 and rise time to 2. If you want a less aggressive signal, you can set the rise time higher (i.e. 5).
Other settings can be left at defaults.
I tested this funscript about 4 times and I would say it's almost identical to the original. If you liked the original and want to know how these signals are created, you can try viewing them in OpenFunScripter.
This release only works well with 800hz. If you want to use higher/lower frequencies, you need to scale up the pulse width limits (for 1600hz, use 2x the recommended pulse width min and max).
Configuring this is a bit cumbersome. In the future I'll add a way to read the config parameters from file, this way you don't have to change the settings every time you want to try a different release.
-
- Explorer
- Posts: 49
- Joined: Sun Feb 27, 2022 5:02 am
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Ran last night. It was fantastic. Thanks!took another stab at creating funscripts for this video, this time I was more successful.
Get the funscripts here: https://mega.nz/folder/sPlSnIqb#MOazR7rcP_gkC0hOkFyDEQ
These funscripts are direct conversions from the original mp3, no manual edits.
- Kelvinator
- Explorer At Heart
- Posts: 147
- Joined: Fri Aug 27, 2021 1:05 am
- Gender: Male
- Sexual Orientation: Straight
- I am a: Switch
- Location: US
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Ran it yesterday afternoon, and it was perfect! There is nothing like the first hour or so of a stim, gummy, popper session. Mistress Control Box with Diglet's custom funscript files and Restim 1.16 in pulse mode was smooth and sensuous in so many ways and locations. Had multiple dry HFO's. Thanks, K
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
Hello I made an alternate ending edit to MCB:
https://mega.nz/file/wsdGUQ4D#rgsEp9EXd ... daqhe1iimQ
https://mega.nz/file/wsdGUQ4D#rgsEp9EXd ... daqhe1iimQ
- Spoiler: show
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
I would like to know how you made the funscripts. How did you convert?diglet wrote: ↑Sun Mar 17, 2024 2:07 pm I took another stab at creating funscripts for this video, this time I was more successful.
Get the funscripts here: https://mega.nz/folder/sPlSnIqb#MOazR7rcP_gkC0hOkFyDEQ
These funscripts are direct conversions from the original mp3, no manual edits.
Re: [RELEASE] [ESTIM] Mistress and the Remote Control Box
I wrote some complicated signal analysis in python to perform the conversion.
First I transform the two audio channels into two components that are orthogonal to each other. In threephase there are really three channels (left, right and center) that are 120° offsets from each other, the analysis is easier when working with two channels at 90° (orthogonal) angle.
I use an Hilbert transform to extract the phase envelope of the two channels. There is some relationship between the phase envelope and the alpha and beta coordinates, I derived an explicit expression for that relationship and use that to find the alpha, beta and volume at audio sample resolution. This is the most complicated part of the process, this method only works well for supercollider files, for other files a lookuptable method with some pre-filtering works better.
Generating the alpha and beta funscripts from this information is easy, I apply a low-pass filter at 30hz, throw away any samples with low volume, and then run Ramer-Douglas-Peucker to reduce file size of the funscript down to manageable levels.
For the volume funscript I employ scipy.signal.find_peaks to find the maximum volume at 0.1s resolution. I call this the volume envelope.
To calculate the pulse frequency and pulse width, for each sample I determine whether signal is 'high' or 'low' based on a threshold of 50% of the volume envelope.
I calculate the time the pulse is 'high' and the time between two subsequent 'low to high' transitions. These are used to directly calculate the pulse width and pulse frequency.
This method for extracting the pulse width and pulse frequency is unlikely to work with other files.
This code isn't in the repository.
First I transform the two audio channels into two components that are orthogonal to each other. In threephase there are really three channels (left, right and center) that are 120° offsets from each other, the analysis is easier when working with two channels at 90° (orthogonal) angle.
I use an Hilbert transform to extract the phase envelope of the two channels. There is some relationship between the phase envelope and the alpha and beta coordinates, I derived an explicit expression for that relationship and use that to find the alpha, beta and volume at audio sample resolution. This is the most complicated part of the process, this method only works well for supercollider files, for other files a lookuptable method with some pre-filtering works better.
Code: Select all
t, (L, R), samplerate = load_wav('MistressAndControlBox-ESTIM-v3.wav', ...)
def algorithm_4(L, R):
"""
Calculate alpha, beta and volume from audio channels
Method:
Convert L, R into orthogonal X, Y
use hilbert transform on X, Y
use trig to obtain explicit expressions for position and volume.
"""
[x_in, y_in] = (ab_transform_inv @ potential_to_channel_matrix_inv)[:2, :2] @ (L, R)
print('hilbert')
h_x = scipy.signal.hilbert(x_in)
h_y = scipy.signal.hilbert(y_in)
print('other compute')
# basic equations
# x_in = a * cos(theta) + a * sin(theta) * i
# y_in = b * cos(theta + phi) + b * sin(theta + phi) * i
a = np.abs(h_x)
b = np.abs(h_y)
phi = np.angle(h_x / h_y)
# obtain expression for radius of <x_in, y_in>
# r**2 = a**2 * cos^2(theta) + b**2 * cos^2(theta + phi)
# r**2 * 2 = a**2 + b**2 + c * cos(2 * theta + psi)
# c ** 2 = a ** 4 + b ** 4 + 2 * a ** 2 * b ** 2 * cos(2 * phi)
# c ** 2 = a ** 4 + b ** 4 + 4 * a_b_cos(phi) ** 2 - 2 * a ** 2 * b ** 2
a_b_cos = np.real(h_x) * np.real(h_y) + np.imag(h_x) * np.imag(h_y) # = a * b * cos(phi)
c = np.sqrt(a ** 4 + b ** 4 + 2 * (2 * a_b_cos ** 2 - a ** 2 * b ** 2))
# find radius of (alpha, beta).
r_max = np.sqrt(0.5 * (a ** 2 + b ** 2 + c))
r_min = np.sqrt(0.5 * (a ** 2 + b ** 2 - c))
r = 1 - r_min / r_max
# calculate angle of max radius
a0 = np.pi * (1 / 2)
psi = np.arctan2(
(a ** 2 * np.sin(a0) + b ** 2 * np.sin(a0 + 2 * phi)),
(a ** 2 * np.cos(a0) + b ** 2 * np.cos(a0 + 2 * phi)),
)
psi = psi + 0.5 * np.pi + np.pi
theta = -psi / 2
alpha_max = a * np.cos(theta)
beta_max = b * np.cos(theta + phi)
r_max = np.linalg.norm((alpha_max, beta_max), axis=0)
alpha_min = a * np.sin(theta)
beta_min = b * np.sin(theta + phi)
r_min = np.linalg.norm((alpha_min, beta_min), axis=0)
r = 1 - r_min / r_max
max_angle = np.arctan2(beta_max, alpha_max)
theta = -max_angle * 2
alpha_out = r * np.cos(theta)
beta_out = r * np.sin(theta)
print('compute done')
return alpha_out, beta_out, r_max
a, b, vol = analysis.algorithm_4(L, R)
Code: Select all
vol = vol * 2
a = np.nan_to_num(a)
b = np.nan_to_num(b)
a = low_pass_filter_2(a, 30, samplerate)
b = low_pass_filter_2(b, 30, samplerate)
mask = vol > 0.05
t_alpha, a_rdp = pybind11_rdp.rdp(np.vstack((t, a)).T[mask][::50], epsilon=0.05).T
t_beta, b_rdp = pybind11_rdp.rdp(np.vstack((t, b)).T[mask][::50], epsilon=0.05).T
export_to_funscript("MistressAndControlBox.alpha.funscript", t_alpha, remap(a_rdp, -1, 1))
export_to_funscript("MistressAndControlBox.beta.funscript", t_beta, remap(b_rdp, -1, 1))
Code: Select all
peaks, peaks_info = scipy.signal.find_peaks(np.nan_to_num(vol), distance=int(0.1 * samplerate))
t_envelope, v_envelope = t[peaks], vol[peaks]
t_envelope, v_envelope = pybind11_rdp.rdp(np.vstack((t_envelope, v_envelope)).T, epsilon=0.005).T
export_to_funscript("MistressAndControlBox.volume.funscript", t_envelope, remap(v_envelope, 0, 1))
Code: Select all
peaks_interp = np.interp(t, t_envelope, v_envelope)
is_high = ((vol > (peaks_interp * 0.5)) * (peaks_interp > .05)).astype(float)
is_low = 1 - is_high
Code: Select all
low_to_high_indices = np.arange(1, len(is_high), 1)[(is_low[:-1] * (is_high[1:])).astype(bool)]
high_to_low_indices = np.arange(1, len(is_high), 1)[(is_high[:-1] * (is_low[1:])).astype(bool)]
if high_to_low_indices[0] < low_to_high_indices[0]:
high_to_low_indices = high_to_low_indices[1:]
if low_to_high_indices[-1] > high_to_low_indices[-1]:
low_to_high_indices = low_to_high_indices[:-1]
tt = t[low_to_high_indices][:-1]
high_span = high_to_low_indices - low_to_high_indices
high_span = high_span[:-1]
high_span = scipy.signal.convolve(high_span, np.ones(5), 'same') / 5 # moving average filter
carrier = 800
pw = high_span / float(samplerate) * 800
interval_span = low_to_high_indices[1:] - low_to_high_indices[:-1]
interval_span = scipy.signal.convolve(interval_span, np.ones(5), 'same') / 5 # moving average filter
pf = float(samplerate) / interval_span
continuous_indices = pw > 50
pw[continuous_indices] = 3
pf[continuous_indices] = 200
pw[np.roll(continuous_indices, 1)] = 3
pf[np.roll(continuous_indices, 1)] = 200
t_pw, pw_rdp = pybind11_rdp.rdp(np.vstack((tt, pw)).T, epsilon=0.2).T
pf = np.log(pf)
t_pf, pf_rdp = pybind11_rdp.rdp(np.vstack((tt, pf)).T, epsilon=0.02).T
pf_rdp = np.exp(pf_rdp)
export_to_funscript("MistressAndControlBox.pulse_frequency.funscript", t_pf, remap(pf_rdp, 0, 200))
export_to_funscript("MistressAndControlBox.pulse_width.funscript", t_pw, remap(pw_rdp, 3, 20))
This code isn't in the repository.
Who is online
Users browsing this forum: cfs6t08p, TwilightKenzie and 74 guests