r/HowlApp

Remote API

Greetings.

First of all, thanks for the application. The best it could have been for Coyote.

Is it possible to extend the remote API? I'm trying to make something like a joi controller for howl using activities in this application. Can you add API calls for BJ, HJ, and other Activities with additional settings so that you can call Manual control on these Activities via the API? Because now you can only start and stop activities, but I would like to make buttons in my interface, or even templates for a suitable scenario, where manual control calls would make my ideas more controllable for my scenarios.

I know that to implement my idea you can just cut funscripts, but howl activities deliver a much better, and less predictable experience.

reddit.com
u/German00 — 6 days ago
▲ 52 r/HowlApp+1 crossposts

Howl 2.0 release. Loads of changes, including multiple output support.

Howl v2.0

This is a major update with a large number of changes. The APK is available from the usual Github page.

Multiple output devices

You can now use multiple estim devices at the same time. A new "Outputs" panel has been added to the UI to list and manage all of your output devices.

Many settings that used to be global are now set per-device, and have been moved to the new output settings dialog. This includes the frequency range, calibration settings and player special effects (which were renamed to "tweaks").

Bluetooth devices are now connected and disconnected by tapping the Bluetooth icon for your device in the output list. The colour of the icon shows connection status, turning green when your device is successfully connected.

New funscript meters

When a funscript is being played, the player will display meters that show the current position of all axes. For example in a typical single axis funscript, a meter shows the current position of the "stroker". Multi-axis funscripts can display up to 6 different meters, including fancy rotational ones with a different design.

Improved power meters

Howl's animated power meters now use the background of the power controls instead of dedicated bars, for a more streamlined design.

Improved charts

The pulse charts now have 4 different display modes, which the usual chart button toggles between.

  • Off.
  • Single: Shows one large chart including information from both channels.
  • Dual: Separate charts for each channel.
  • Quad: Separate charts for each channel, and separate charts for amplitude and frequency.

The X axis always denotes time. Y position signifies amplitude generally, or frequency for the specific frequency charts in quad mode. Colour signifies the channel and gives a rough guide to the frequency (with darker hues being lower frequencies).

In the dual and quad formats, charts related to channel A are displayed on the left, and charts related to channel B on the right. This brings them in line with how most users intuitively expected them to work, since they now appear below their respective channel controls. Some basic labels have also been added to make the function of each chart clearer.

A new "Chart style" setting has been added, which controls whether to display the charts in point or line mode.

Updated settings UI

The settings page has been broken up into tabbed sections, making it much easier to navigate. Quick options have been added to reset certain sections to their default values. There is also a global settings reset (under "Misc") that resets everything except remote access options. The reason for this exception is simply to help users avoid the nuisance of having to type their API key into other apps like the Kodi add-on again.

Funscript algorithm settings have been moved from the player settings dialog into their own dedicated tab on the main settings page, reducing clutter.

Additional UI improvements

  • A different layout is now used when in landscape mode, with the main controls and tab interface appearing in separate columns.
  • Scrolling behaviour has changed in the portrait mode layout so that the main controls section at the top is always fixed, and only the active tab content scrolls.
  • The highlight colour for activated buttons in the dark mode UI is a slightly different shade of pink, making it easier to differentiate between on and off states.
  • Several colours were changed in the light mode UI to make it slightly less awful (but dark mode is still better).
  • Images were removed from the main tab bar for a cleaner look and to save vertical screen space.

Core timing adjustments

This release makes some key changes deep in the bowels of the app to how Howl counts time. The main loop previously ran 10 times per second and would look into the future to calculate the correct output for devices, which could have any update rate. This was very flexible, but made some of the core logic quite convoluted. For example, because we calculated a batch of output pulses at a time, we had to do a bunch of extra work to "fake" smoothness for the charts and meters and make them look as if they were being produced one-by-one.

This version switches to having a main loop that runs 40 times per second, and only looks at the present. Pulses are batched at the output level instead, and all outputs are required to use some divisor of the app's rate (e.g. 40Hz, 20Hz, 10Hz). The advantages of this simplified system are:

  • More consistent output timing.
  • The UI runs more smoothly.
  • New UI components (such as the funscript meters) are much easier to implement.
  • Real-time functionality like streaming is more feasible, as the logic doesn't have to know the future.

Rewritten Bluetooth logic

Howl's core Bluetooth handling code has been completely rewritten to be more robust. This is intended to solve annoyances like the initial connection process sometimes randomly failing when using a Coyote 3 device with the latest firmware.

Rewritten audio engine

The way audio outputs work has been adjusted to bring them in line with the core timing changes, and for better separation between our output specific code and generic Android audio handling code. The pattern that the app is generating should now be followed more cleanly, with fewer steps being skipped or doubled.

An "Always full volume" setting has been added to all audio outputs (in the "Device" tab). This makes them completely ignore Howl's main power level, and is more convenient for users who would rather use controls on their hardware device.

Experimental "multipulse" audio output

An experimental new output method for stereostim devices. It's inspired by the way pulse based devices work, but uses bursts of multiple pulses rather than individual ones.

This idea is at an early stage, so a very wide range of settings is available in the "Device" tab for testing purposes. It should be possible to adjust the feel a great deal using the provided settings.

I need some stereostim users to experiment with this output method and give me some feedback on what the optimal settings are, and whether it's worth including it in future releases or not.

Websocket remote API

A persistent websocket variant of the remote API has been added, running on port 4696 (when remote access is enabled). Developers should refer to the remote API wiki page for further details.

Pattern streaming functionality

Adds a streaming function, allowing developers to send patterns to Howl in real-time. Use this by first calling the start_stream API endpoint, which causes Howl to switch source to your stream. start_stream also offers various parameters such as update rate and buffer size which can be tuned for your use case. Once your stream is active, periodically call stream_pulse with pulse objects representing the pattern you want to play. The websocket API is recommended for this, since the REST API can only support low update rates due to the overhead of having to establish a new connection on every call to stream_pulse.

Other miscellaneous changes

  • The "Scale amplitude" per-channel effect was removed. For balancing out a very conductive electrode that feels too strong, the power balance calibration should be used instead (and is more intuitive to set).
  • An "Amplitude scaling" calibration was added. This affects both channels and is intended to allow for balancing between multiple output devices (leave it set to 1.0 if you have a single output).
  • The random amplitude and frequency noise special effects were removed. I didn't think they were useful enough to justify the screen space that their various settings required in the list.
  • Changing the frequency range was removed from the API. This is because it was made device specific, and the API does not provide methods to set device specific options.
  • The smoothing applied in manual mode can now be set to zero.
  • The recorder feature now records the initial pattern output (before calibrations etc.) instead of final output. This fixes a bug with 1.1 where if you had calibrations applied and recorded something, it would be different when playing it back (due to the calibration being recorded and then being applied a second time on top).
  • Added a 5 hour maximum time limit to the playback service. This prevents it running in the background forever (and consuming battery) if the user accidentally leaves the player running (thanks upbeat59 for reporting).
  • Fixed a bug that caused the "Opposites" activity to not randomly change speed during execution like it was intended to (thanks xkcd1234 for spotting and fixing that).
  • The file size of the release APK is now even smaller, as it's built with additional optimisations to remove unused library code and resources.

With this number of improvements, it is almost inevitable that there will also be some new bugs. If you notice any issues, please report them.

u/Amethyst_sysadmin — 11 days ago

Howl 2.0.1 release. Fix for Coyote 2 output.

This one is just a minor fix for a problem in 2.0 where Coyote 2 devices would have intermittent output.

There are no other changes - it's not necessary to update from 2.0 if you are not using a Coyote 2.

reddit.com
u/Amethyst_sysadmin — 7 days ago