• myQwil

    Similar to Pd's timer object but with the following additional methods:

    • [ lap ( - sending this message to the 1st inlet sends the lap time and total time as a list through the 2nd outlet

    • [ pause ( - pauses/resumes the timer.

    • [ push $1 ( - shifts the elapsed time. If the value is negative, the elapsed time can be shifted before the time of initialization and result in a countdown effect.

      • You can also send a float to the 1st inlet to reset the timer with a push offset.

    Included is a pomodoro abstraction, which alternates between 25min and 5min countdowns. during the 25min period, there will be a ticking sound, which stops for the 5min period. If you're running KDE, there's an added bonus of desktop notifications telling you when a new countdown has begun and what iteration it is.


    posted in extra~ read more
  • myQwil

    While working with square and pulse waves, I found that certain frequencies produce a sort of overlapping effect, which I believe happens when the frequency and the precision level of a float don't mix well together. In any case, it can be remedied by adding a slope between value changes.

    Much like tabread4~ and tabosc4~, these objects work best with tables whose size is a power of 2, plus three. Linear interpolation really only requires 1 additional point, such that the first and last points are the same value, but for the sake of compatibility, the wave starts at index 1, while index 0 is just ignored. Pd's 4-point interpolation has 1 look-behind point and expects the beginning of the wave to be at index 1. Messages like sinesum and cosinesum generate arrays with this in mind.

    The 2nd inlet is a signal inlet and it adjusts the interpolation threshold, which can be thought of as the percentage of each point that should remain as the original value. So if the threshold is 0.9, that means that only the last 10% of the point will be dedicated to interpolation.

    The zip comes with help files and Linux/Windows/Mac builds of the externals.

    posted in extra~ read more
  • myQwil

    The FFmpeg libraries are dynamically linked to the builds provided, which means that you'll need a local installation of these libraries in order for the external to work.
    A package manager is probably the ideal way to install them. Otherwise, they are available at ffmpeg.org/download.html, just be sure to get the "Shared" builds, and place them in a location where the external is able to find them.

    Includes the following features:

    • play/pause and seek functionality
    • changing the speed of playback
    • reading and iterating through m3u playlists
    • opening files from http urls.
    • retrieving metadata
    • specifying additional channels as creation args for files with surround sound.

    EDIT: changes in playback speed should now have smoother transitions
    EDIT2: forgot to add ufloat.h to the .zip


    posted in extra~ read more
  • myQwil

    @shreeswifty For potpourri, try this out: lyonpotpourri.zip

    posted in extra~ read more
  • myQwil

    Just thought I'd point out that the difference between mod and % is how they handle negative values.

    posted in technical issues read more
  • myQwil

    This library overrides Pd's f, i, and binop objects to give them a couple of extra features:

    • A creation arg that ends with an exclamation point tells the object to loadbang the result. The loadbang occurs either upon instantiation or when a patch initially opens, depending on which version of Pd you're running.
      Some examples:
      • [ f 5! ] outputs 5 as a loadbang
      • [ - 8! ] sets the 2nd inlet to 8 and outputs -8 as a loadbang, since the calculation would be 0 minus 8.
      • [ + 1 2 ] sets the 1st and 2nd inlets respectively
        • sending a bang to the 1st inlet would output 3
      • [ / 1 4! ] outputs 0.25 as a loadbang
    • Binop objects also have the following additional methods:
      • [ f2 $1 ( - sets the 2nd inlet.
      • [ . $1 ( - sets the 2nd inlet and outputs the result of the calculation.

    Note: Older versions of Pd don't support the overriding of built-in objects, so for the sake of backward compatibility, the objects have an additional creator method with the general rule being to put a grave accent ( ` ) in front of the object's name (ex: [`f ], [`+ ], [`- ], etc. )


    posted in extra~ read more
  • myQwil

    Did you get this working? I have a very quick and dirty solution for you. pd-lib-builder takes care of just about everything when you run make but you'll still need to link Helmholtz and helmholtz~ together manually. It'll probably look something like this:

    g++ -static-libgcc -static-libstdc++ -shared -Wl,--enable-auto-import "C:\Program Files/Pd/bin/pd.dll"    -o helmholtz~.dll helmholtz~.o Helmholtz.o

    That's pretty much all pd-lib-builder, with the one manual part being the Helmholtz.o at the end of the statement.

    Anyways, here's a zip of that project folder, where you'll also find a 64-bit build. I haven't really played around with it much but it seems to be working just fine.


    Just as an addendum, you can probably get pd-lib-builder to link the files on its own by removing helmholtz~.cpp from class.sources and adding:

    make-lib-executable = yes
    lib.setup.sources = helmholtz~.cpp

    posted in extra~ read more
  • myQwil

    They act similar to delay and line objects, but when they're in the middle of a delay or a ramp, the message "pause" will act as a toggle between pausing and resuming.

    The delay object, delp, has two additional outlets. The remaining time passes through the 2nd outlet whenever a pause occurs, and the toggle's current state passes through the 3rd outlet.

    These objects all use timers to calculate their remaining time and ramp state, which means that linp will be precise regardless of what its time grain is set to. On the other hand, it also means that linp~ will sound inaccurate if there's any discrepancy between your audio server's sample rate and pd's sample rate because discrepancies of that kind, in general, result in the audio's timing being either too fast or too slow in relation to Pd's system timing.

    Included is an example where these objects help with playback control, with linp displaying the remaining time, linp~ handling the fade-out effect, and delp triggering the fade-out and end of playback.


    posted in abstract~ read more
  • myQwil

    @alfonso.santimone Sorry it took so long. I finally got around to making win64 builds of my externals. They're all up on my Github page but here's gme(s)~ for the sake of convenience:


    posted in extra~ read more
  • myQwil

    @deframmentazione-geometrica It looks like your select box is trying to prevent repeat values from getting through, so when random outputs the same value as it did previously, select will keep telling random to produce another value until it's different, then it'll assign that to the single number box on the right. The two number boxes at the bottom will retain the duplicate value and continue to reassign the value to each other until it's caught by the stack overflow error.

    Then again, how everything plays out will depend on whether you create the select box before or after creating the looped number boxes at the bottom, because that'll determine what gets triggered first. If you create the select box last, then the number boxes at the bottom will change and it may never even get to the number box on the right.

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!