This Friday evening will be streaming to APO33's Audioblast Festival #7 in Nantes. Times are for France, for UTC/GMT subtract one hour.

]]>From Friday 22nd to Sunday 24th February

Festival of sound creation using the INTERNET as a venue for diffusing LIVE experimental, drone, noise, field recordings, sound poetry, electronic, contemporary music…. (concerts, retransmissions and performances).

- Friday
- 8:00 : Sébastien Job & Janusz Brudniewicz
- 9:00 : Rémy Carré
- 10:00 : Osvaldo Cibils
- 11:00 : Laura Netz – Mathr
- Saturday
- 2:00 : OFFAL
- 4:00 : Radio Noise Collective
- 5:00 : Les Lumières
- 6:30 : Les Lumières & Guilhem All
- 7:00 : a30t
- 8:00 : STM
- 9:00 : The Manta
- 10:00 : Sebastian Ernesto Pafundo
- Sunday
- 2:00 : Solar Return
- 4:00 : Bot Mix V2.0
- 6:00 : JRF
- 7:00 : Corpse Etanum
The festival is streamed live online and in a quadraphonic sound system at the venue “La Plateforme Intermédia” in Nantes, France.

This year’s theme is : SonoMorphoTectural / MorphoSonicEctural Transformation of bodies, context and architecture by sound.

“I do not hear the world, I suffer it!”

My hand-drawn animation Lumberjackass has been selected for the One-Off Moving Image Festival on the theme of humans vs nature.

65 one second movies

10 60 seconds movies

Movies are screening february 18-24, 2019 in public spaces in Valencia(ES) and Gol(Norway) in addition to the net, using QR-codes and offline wifi-spots to access with smart devices.

Participating artists:

Agne Petrulenaite, Alan Sondheim, Alexander Ness, Anne Fehres, Antonello Matarazzo, Bach Nguyen, Benna G. Maris, Brade Brace, Bubu Mosiashvili, Chih-Yang Chen, Claude Heiland-Allen, Dan Arenzon, Elaine Crowe, Elle Thorkveld, Eric van Zuilen, Eylul Dogruel, Fabian Heller, Fair Brane, Gyula Kovacs, Jaime Orlando Vera Zarate, Jeppe Lange, Jessica Gomula, Joonas Westerlund, Jorge Benet, Joseph Moore, Julia Dyck, Jun-Yuan Hong, Juno, Jurgen Trautwein, Kevin A. Perrin, Khalil Charif, Kirsten Carina Geisser and Ines Christine Geisser, Klaus Pinter, Lin Li, Luke Conroy, Maria-Leena Raihala, Michel Heen, Natallia Sakalova, Nico Vassilakis, Nigel Roberts, Oonagh Shaw, Paul Wiegerinck, Robin Vollmar, Sara Koppel, Sidsel Winther, Silvia Nonnenmacher, Stefanie Reling-Burns, Tatsunori Hosoi, Theodora Prassa, Tija Place, Tivon Rice, Vivian Cintra, Vreneli Harborth, Ynfab Bruno, Yuqi Wang, Zhu HusselWe're collaborating with 60Seconds Festival in Copenhagen(DK) taking place in parallel, to screen a selection of the 1 sec movies mixed with 1 minute movies in Copenhagen, Frederiksberg, Køge and Helsingør during the festival week.

In addition, all 1 second movies will be included in the next Leap Second Festival, an irregular x-ennale lasting one second.

Media: 4B pencil, 2H pencil, layout paper, flatbed scanner, GIMP. No sound.

]]>Sonics Immersive Media Lab (SIML), Room G05, Hatcham Building, Goldsmiths, 25 St James's, SE14 6AD, London, UK (the old church)

Feb 15th 2019, doors 6:15pm, start 6:30pm, end 10:30pm

mathr / Deerful / Luuma / Cassiel / Lil Data / BITPRINT / rumblesan / lnfiniteMonkeys

Part of an international multi-day streaming celebration of 15 years of live-coding.

]]>A recent post by matty686 on fractalforums about Photoshop IFS fractals got me interested. I didn't manage to do it in GIMP 2.8.18, but succeeded with Inkscape 0.92.4. The process needs two PNG images, I didn't succeed with only one. Once you have set up the transformed linked images that reference "bitmap.png", repeatedly export the page to "bitmap2.png" (pressing return in the box with the filename does this quickly) and in a terminal "mv bitmap2.png bitmap.png" when the export has finished. Here are some explanatory screenshots:

This could probably be scripted within Inkscape so you don't have to do so much manual repetitive work at the end: this is just a proof of concept.

]]>In the #supercollider channel on talk.lurk.org, there was recently
discussion about a "DJ filter" that transitions smoothly between low-pass
and high-pass filters. This made me curious to see if I could make one.
I found Miller Puckette's book section on
Butterworth filters,
but figure 8.18 is not quite there yet for my purposes: the normalization
is off for "shelf 2" (it would be better if the Nyquist gain was 1, instead
of having the DC gain as 1). The figure has 3 poles and 3 zeroes, but for
simplicity of implementing with 2 cascaded biquad sections I went with a
**4-pole** filter design.

After fixing the order, the next variable is the **center frequency**
\(\beta = 2 \pi f_c / SR\), which determines \(r = \tan(\beta/2)\).
Using the formula from the above link gives the pole locations:

\[ \frac{(1 - r^2) \pm \mathbf{i} (2 r \sin(\alpha)) }{ 1 + r^2 + 2 r \cos(\alpha))} \]

For a 4-pole filter, \(\alpha \in \{ \frac{\pi}{8}, \frac{3 \pi}{8} \} \).

The **hi/lo** control \(o\) is conveniently expressed in octaves relative
to the center frequency. It controls the stop band gain, which levels
off after \(o\)-many octaves (so these are really shelving filters).
The \(o\) control fixes the location of the zeroes of the filter, the
formula is the same as above but with \(r\) modified using
\(r_Z = \frac{r_P}{2^o}\).

The filter is normalized so that the pass-band gain (at DC for low-pass and Nyquist for high-pass) is unity. Then the gain in the stop band is \(-24 o\) dB, the transition slope is fixed by the order, and the center frequency gain is about \(-3\)dB when \(o\) is away from \(0\). This can be done by computing the gain of the unnormalized filter at \(\pm 1\) (sign chosen as appropriate). Computing the gain of a filter specified by poles and zeroes is simple: multiply by the distance to each zero and divide by the distance to each pole (phase response is left as an exercise).

The poles and zeroes come in conjugate pairs, which are easy to transform to biquad coefficients (see my previous post about biquad conversions). I put the gain normalization in the first biquad of the chain, not sure if this is optimal. The filters should be stable as long as the center frequency is not DC or Nyquist, as the poles are inside the unit circle. But modulating the filter may cause blowups - to be investigated.

You can browse my implementation.

]]>Tomorrow, an afternoon of live coding at New River Studios:

Right on the heels of the International Conference on Live Coding and an Algorave at Access Space in Sheffield, livecodenyc in exile presents an afternoon of live coding at New River Studios.

Come join us to jam and hang out.

Featuring performances from:

- Codie (Sarah Groff Hennigh-Palermo and Melody Loveless, nyc) - @hi_codie
- Ulysses Popple (nyc) - @ulysses_le_sees
- Deerful - @deer_ful
- BITLIP (Evan Raskob, London) - pixelist.info
- Visor (Jack Purvis, New Zealand) - jackvpurvis.com
- mathr - mathr.co.uk
See you there!

New River Studios is at Ground Floor Unit E, 199 Eade Road, N4 1DN London.

]]>I modified Pure-data and libpd just enough to compile it with Emscripten. See microsite here:

mathr.co.uk/empd

Not user friendly yet, maybe someone else will contribute that stuff...

]]>meshwalk-3.0 is a 360 animation of animated Voronoi cells on the surface of a sphere. Rapid acceleration is highlighted visually and sonified spatially. The movement of the dynamic mesh in this version is partly based on the idea of potential wells for crystal formation, and is realized efficiently by updating a collection of nearest neighbours to each node using the neighbours of neighbours (and hoping that it doesn't move so fast that the algorithm would break).

At each time step, after updating the positions of each node (which depends on attraction and repulsion between neighbouring cells), the neighbour list of each cell is updating by choosing the 8 nearest cells among the neighbours and neighbours of neighbours. As the nodes are moving, a neighbour of neighbour might now be nearer than the previous neighbours, so the mesh is dynamically changing. The number 8 can be changed at compile time, too high and it slows down, too low and it breaks (the mesh splits apart and can overlap itself without rejoining).

This mesh algorithm is O(N B^2), where N is the number of nodes and B is the number of neighbours to keep track of. As B is typically a small constant, this reduces to O(N). A naive algorithm is O(N^2) considering all nodes for each node, which I do do in the one-time initialization of the neighbour data. A spatial data structure could probably reduce this cost to O(N log N), but for a few hundred nodes on a sphere it isn't too slow. The Vornoi cell rendering is O(N W H), my GPU is fast so it isn't an issue.

]]>In yesterday's post I showed how dividing by unwanted roots leads to better stability when finding periodic nuclei \(c\) that satisfy \(f_c^p(0) = 0\) where \(f_c(z) = z^2 + c\). Today I'll show how two techniques can bring this gain to finding periodic cycles \(z_0\) that satisfy \(f_c^p(z_0) = z_0\) for a given \(c\).

The first attempt is just to do the Newton's iterations without any wrong root division, unsurprisingly it isn't very successful. The second attempt divides by wrong period roots, and is a bit better. The third algorithm is much more involved, thus slower, but is much more stable (in terms of larger Newton basins around the desired roots).

Here are some images, each row corresponds to an algorithm as introduced. The colouring is based on lifted domain colouring of the derivative of the limit cycle: \(\left|\frac{\partial}{\partial z}f_c^p(z_0)\right| \le 1\) in the interior of hyperbolic components, and acts as conformal interior coordinates which do extend a bit into the exterior.

The third algorithm works by first finding a \(c_0\) that is a periodic nucleus, then we know that a good \(z_0\) for this \(c_0\) is simply \(0\). Now move \(c_0\) a little bit in the direction of the real \(c\) that we wish to calculate, and use Newton's method with the previous \(z_0\) as the initial guess to find a good \(z_0\) for the moved \(c_0\). Repeat until \(c_0 \to c\) and hopefully the resulting \(z_0\) will be as hoped for, in the periodic cycle for \(c\).

Source code for Fragmentarium: 2018-11-18_newtons_method_for_periodic_cycles.frag.

]]>Previously on mathr: Newton's method for Misiurewicz points (2015). This week I applied the same "divide by undesired roots" technique to the periodic nucleus Newton iterations. I implemented it GLSL in Fragmentarium, which has a Complex.frag with dual numbers for automatic differentiation (this part of the frag is mostly my work, but I largely copy/pasted from C99 standard library manual pages for the transcendental functions, Wikipedia for basic properties of differentiation like product rule, quotient rule, chain rule...).

Here's the improved Newton's method, with the newly added lines in bold:

vec2 nucleus(vec2 c0, int period, int steps) { vec2 c = c0; for (int j = 0; j < steps; ++j) { vec4 G = cConst(1.0); vec4 z = cConst(0.0); for (int l = 1; l <= period; ++l) { z = cSqr(z) + cVar(c);if (l < period && period % l == 0) G = cMul(z, G);} G = cDiv(z, G); c -= cDiv(G.xy, G.zw); } return c; }

And some results, top half of the image is without the added lines, bottom half of the image is with the added line, from left to right the target periods are 2, 3, 4, 9, 12:

You can download the FragM source code for the images in this article: 2018-11-17_newtons_method_for_periodic_points.frag.

]]>I'm playing at ArtFutura in Stour Space next month! Screenings, talks, performances.

]]>## ArtFutura 2018 London

Stour Space

7 Roach Road, Hackney Wick, London E3 2PA

+44 (0) 2089857827## Thursday 22nd November 2018

- 19:30
- Doors
- 20:00
- Premiere (1h) + Behind the Scenes (30min)
- 21:30
- Artist talk - Paul Friedlander (1h)
- 22:30
- Live performance - Claude Heiland-Allen
## Friday 23rd November 2018

- 19:30
- Doors
- 20:00
- Estela Oliva presents CLON (30 min)
- 20:30
- 3D Futura show (1h)
- 21:30
- Futura graphics (1h)
- 22:30
- Live AV performance - Mowgli and the slate pipe banjo draggers
## Saturday 24rd November 2018

- 19:30
- Doors
- 20:00
- Artworks (40min)
- 21:00
- Schools (1h)
- 22:00
- Live AV performance - Christian Duka & Marco Maldarella

While evaluating whether to dive in and get a Bela single board computer for low latency processing of external inputs, that I would want to livecode in the C programming language using my clive system, I found that my initial attempts at cross-compiling into a network-shared folder were doomed, because my host system was running Debian Buster (current Testing, next Stable) and my device system (a Raspberry Pi Model 3 B) was running Raspbian Jessie (current OldStable). Jessie has an ancient glibc, the basic libraries that let C programs and libraries work, and my cross-compiled code needed a newer version.

So I installed Debian Buster arm64 from
unofficial unsupported sources.
After upgrading the system to my liking, I tried the audio through HDMI.
The `aplay` command could make some noise, but it was using a
Pulseaudio backend. Try as I might I couldn't get a raw ALSA backend
to make any sound, especially not with JACK (which output errors about
not supported hardware sample types). So I resorted to radical means.
I set up a JACK server using the dummy backend, and hooked Pulseaudio
to it with `pulseaudio-module-jack`. Then adding a loopback
Pulseaudio device to route the JACK sources/sinks to the hardware:

$ /usr/bin/jackd -ddummy & $ tail /etc/pulse/default.pa load-module module-jack-source load-module module-jack-sink set-default-sink jack_out set-default-source jack_in load-module module-loopback source=jack_in sink=alsa_output.platform-3f902000.hdmi.iec958-stereo $ mplayer -ao jack somefile.ogg -loop 0 & $ jack_connect "MPlayer [15406]:out_0" "PulseAudio JACK Source:front-left" $ jack_connect "MPlayer [15406]:out_1" "PulseAudio JACK Source:front-right"

Note: this is significantly different to the usual software -> Pulse -> JACK -> ALSA -> ears route, it's more like software -> JACK -> Pulse -> ALSA -> ears, though I don't really know what happens beyond Pulse in this setup... All I know is I hear sounds from JACK on the HDMI output, which is all that matters.

Now the last thing is figuring out how to disable the screensaver timeout on the lightdm greeter login prompt, when that kicks in all sound goes off. I can disable the screensaver if I login, but an automatically logged in session is a bit annoying. There is a greeter screensaver timeout variable, but that applies only to lock screen, not login screen. I want to make sounds through HDMI from a remote ssh session.

And another shiny thing would be automatically considering the PulseAudio JACK ports as physical and the JACK dummy system: ports as not, so that automatic connections work as expected (I hear nothing until I manually connect the ports as above).

]]>