FOC Stim output - Amethyst-Sysadmin/Howl GitHub Wiki

Only the v4 design of the FOC Stim is supported, since Howl connects to it over WiFi. Your phone running Howl and your FOC Stim device both need to be connected to the same WiFi network.

Set up steps

  1. If you did not already do so, complete the initial FOC Stim WiFi setup process in Restim (you can't do that in Howl). Your FOC Stim needs to be connected to your WiFi network and showing an IP address on its screen before continuing.
  2. Add a "Foc Stim" output to the main "Outputs" section in Howl by pressing the plus icon and choosing it from the list.
  3. Go into the settings for the FOC Stim output you just added (using the cog icon). Navigate to the "Device" tab. Change the IP address in the "FOC IP address" box so that it exactly matches the one shown on the screen of your FOC Stim. Close the settings page.
  4. Connect Howl to the FOC Stim by tapping the red WiFi icon next to the FOC Stim output. When successfully connected, the icon should turn green, and the screen on the FOC should say "Playing".
  5. Use Howl as normal and play whatever content you want.

IMPORTANT The FOC Stim does not use Howl's power level controls, and is turned up or down using the physical knob on the device instead. When you are playing a pattern, output will be sent to the FOC even if the power level in Howl is set to zero.

Howl will keep the FOC in "Playing" mode the whole time it is connected, even when nothing is playing. I chose this design to avoid issues when swapping between patterns in Howl quickly, since the FOC takes a while to change state.

Electrode configuration and calibration

Only four phase mode (using all 4 connections on the FOC) is supported. You cannot use a triphase (3 electrode) configuration with Howl.

The expected electrode configuration is in ascending order from lowest (leftmost socket on the FOC) to highest (rightmost socket on the FOC).

I tested with the following setup (using Joanne's "Stairway to Heaven")

  • Low (1st socket) -> perineum pad
  • Mid-low (2nd socket) -> lowest loop on the stairway (around C + B)
  • Mid-high (3rd socket) -> 2nd loop on the stairway (base of C)
  • High (4th socket) -> top loop on the stairway ("sweet spot" just under tip of C)

Of course you can use any electrode configuration you like. But maintaining a similar "low to high" ordering is recommended, since any funscripts you play will be mapped accordingly.

Calibrate your electrodes as desired using the sliders in the "Device" tab (in the FOC Stim output's settings). They all start at maximum (0.0dB), and you should reduce any individual electrodes that feel too strong. You will typically not need to move the sliders very much, a reduction to -1 or -2 dB will often be enough.

I found it helpful to use the "Positional" conversion algorithm and play the pattern from the "Calibrate position" activity while adjusting the FOC's calibration sliders, since that produces smooth up and down strokes through all the electrodes. Don't actually do the positional calibration as it is not helpful on the FOC (leave it set to 0.5). It's just a useful test pattern.

Settings

Most useful settings for the FOC Stim can be found in the "Device" tab. The other tabs have general settings that Howl offers for all output devices. Some general settings don't function very intuitively on the FOC because of the way we're translating patterns for it.

All of the FOC Stim specific settings are explained below.

Pattern conversion algorithm

This is a key setting and controls how Howl converts its stereo patterns into four phase output for the FOC Stim. Three different choices of algorithm are available to experiment with.

Stereo emulation

This is the standard approach for converting stereo patterns to four phase, and tends to feel smooth and predictable. It works by treating the first two electrodes like channel A, and the second two electrodes like channel B. So electrodes 1 & 2 always have the same intensity, and electrodes 3 & 4 always have the same intensity. For some patterns it can feel a bit too simplistic, since it doesn't take advantage of the FOC's per electrode control.

Dynamic (default)

The dynamic algorithm starts with a similar concept to stereo emulation of having two electrodes represent each stereo channel. But instead of both electrodes always having the same intensity (like they would in a stereo device) we dynamically shift the balance around between them. The balance between electrodes 1 & 2 varies depending on the channel A frequency, and the balance between electrodes 3 & 4 varies depending on the channel B frequency.

This approach takes advantage of the fact that Howl's patterns often use different pulse frequencies on each channel. That works on stereo devices like the Coyote, but the FOC only outputs a single pulse frequency at a time and cannot fully reproduce that effect. However the FOC is capable of distributing current in many more ways than a stereo device, due to its per electrode control. So this strategy of turning some frequency effects into positional effects allows all our pattern parameters to be represented (if not necessarily in a technically correct way), and produces more interesting true four phase output.

A panning strength parameter is available to adjust when the dynamic algorithm is selected. This controls how strong the frequency based panning effect will be.

Positional (funscript specific)

The positional algorithm is designed specifically to be used with funscripts, and typically won't work well with other patterns. It's my attempt at implementing a more advanced positional effect specifically designed for the FOC that takes advantage of its individual electrode control.

A sensation width parameter is available when the positional algorithm is selected. This controls how wide the sensation feels. Low values touch only nearby electrodes, creating a more intense sensation that's very focused at the current position. Higher values spread the sensation out more, so that it also touches electrodes further away from the current position.

The positional algorithm is not necessarily always superior to dynamic for funscript use (I like both). Howl's funscript processing in general works best with "action based" funscripts. You might prefer Restim for "beat based" content.

Maximum output current (amps)

Adjust the intensity of the output. The maximum setting of 0.12 is roughly equivalent to 100% volume in Restim (if playing a pattern at maximum power). Lower settings cap the output at a lower level.

Carrier frequency (Hz)

The frequency of the carrier wave that the FOC will create pulses from. Lower frequencies will produce longer pulses (at a given width).

Base pulse width (carrier cycles)

How many carrier wave cycles long each pulse will be. This setting is used directly for pulse rates above 50Hz. Below that the width may be additionally increased based on "Low frequency thump".

Low frequency thump

Dynamically increases pulse width depending on the pulse frequency. Takes effect when the frequency is 1-50Hz. Lower frequencies will receive a much more significant boost.

The slider determines the overall strength of this boost effect. Higher values should give low frequency pulses a more "thumpy" sensation. When set to 0.0, no boost is applied and the base pulse width is used for all pulses.

Rise time (carrier cycles)

Determines the shape of pulses and how quickly they get to full amplitude. Individual pulses should feel punchier at lower values, and more gentle at higher values.

Known issues

Android OS power saving can cause the FOC to get disconnected when Howl is running in the background, or when browsing the player's "open file" dialog for more than a few seconds. This can typically be solved by disabling Android battery optimisations for Howl. On Samsung phones this option can be found under "Settings / Apps / Howl / Battery" -> set to "Unrestricted". Most Android devices will offer an equivalent setting, but it may be named or located differently.

Some things in the settings UI don't make a ton of sense because it was designed for simpler stereo devices with few built-in settings. For example all the FOC controls being crammed into the "Device" page, and electrode calibration being a device specific setting and not appearing under "Calibration".

Firmware note

My testing was done with FOC Stim firmware 1.3.2. The FOC firmware is still under active development, and newer major versions (e.g. 2.x.x) are expected to contain breaking changes. When a major firmware update is released, Howl will refuse to connect to it until I have done appropriate testing and updated the app accordingly.