Category Archives: misc

Tidal 1.0.0 refactor

TidalCycles (aka Tidal) is a Haskell DSL for making (usually musical) pattern.

I’ve put a lot of time into Tidal the last couple of months, starting with preparation for an advanced tidal workshop in Tokyo, but things got out of hand and ended with a rewrite of its innards, solving some long-standing issues. It feels like I’ve only recently grown to understand what tidal really is in the process of writing (and rewriting) it over many years, and I’ve finally got to put that understanding into action. I’ve had some really useful feedback from the Haskell community in the past and so thought I’d write this post as an effort at getting feedback on this latest iteration.

Tidal is all about pattern. I’ve tried to explain what this means in terms of types in this wiki page – What is a pattern?

That page talks through the first bit of Sound.Tidal.Pattern, which also contains applicative and monad instances for patterns. The previous attempt at these didn’t conform to the applicative and monad laws, but these new versions hopefully are much closer to the mark. I’ve found though that <*> and join aren’t enough for Tidal. I also need <* for where pattern structure comes from the left, and *> for where it comes from the right, where <*> comes from both sides. Similarly, as well as join (which I’m calling unwrap) I needed to make innerJoin and outerJoin. You could have a look at the Combining pattern structure wiki page to get an insight into why these are needed.

Other modules I invite you to look at include Sound.Tidal.Core, Sound.Tidal.Control, Sound.Tidal.UI, and the rest, roughly in that order.

Tidal is my only real haskell project and I’ve learned haskell through (admittedly many years) of writing/rewriting it, so all insights much appreciated!

There has been a couple of instances where Haskell fans have been immediately turned off by Tidal, I think because of the large amount of strings used in Tidal code. These strings are actually overloaded, a parser in Sound.Tidal.ParseBP silently turns them into well-typed patterns (which are functions of time, and not strings or lists). Anything in those strings could be expressed in Haskell code, but with a _lot_ more keypresses. This mini-language is heavily influenced by the representation of cyclic structures Indian classical music (i.e. Bernard Bel’s BP2). I’d really like to get to the bottom of why people don’t like the look of these strings though, and whether there is a better alternative.

All feedback, suggestions and criticism much appreciated!

Getting things on Wikipedia

I’m a big fan of wikipedia. It’s by no means perfect, but it’s undeniably a fantastically useful resource, created by people giving their time for free, to share and enjoy. There are of course hidden barriers to participation, but in theory anyone can make an edit or create a page (as long as it’s not about themselves – that’s considered bad form and can backfire spectacularly).

Here’s a quick guide to creating a new page on wikipedia:

  • Although you don’t have to create an account to edit a page, you do have to create an account to create a page. This actually makes you more anonymous – otherwise your net connection’s IP address will be shown publically. That’s as long as you choose a name that doesn’t identify you (I do, but probably should – I’ve received legal threats for my edits in the past!).
  • I advise not using the article creation wizard. In my experience, that’s a hotline to a well-meaning person, who will however not have any domain knowledge, and will likely be looking for pedantic reasons not to accept your article rather than for reasons to accept it. This makes for a very slow and frustrating experience, and not a joyful sharing of knowledge.
  • Instead – just create the page! You can do this by going to the URL for it. For example, if you want to create a page about “blue widgets”, go to
    • Well, if this is your first page, that’s probably a bad idea, create it in draft form first by going to Once you’re happy with it, copy the contents across to the real thing.
    • It’s a good idea to find a page similar to your topic, click edit, copy the contents, and then paste it into your new draft as a starting point.
  • It’s worth noting that once you start contributing to wikipedia, you are part of it! Wikipedia is not a separate entity from you; likely all the people you’ll interact with will be working in a voluntary capacity, just like you, and decisions about notability and so on are made by consensus.
  • However! Unless you’re careful, your new page will likely be ‘speedy deleted’ for not being notable. Despite what some believe, there are no hard rules about what makes something notable, but there are a lot of guidelines.
  • So at first, your page will probably not really be about the thing, but instead about how notable the thing is. You can flesh it out with more useful stuff later. For example, here’s the current (at the time of writing) version of an article I just created. The first sentence briefly says who the subject is, and the sentence says why they are notable. Importantly, there’s links to three or four mainstream media articles directly about the subject. Without these, someone will probably speedy-delete the page. You could look into the notability guidelines, but as long as you have some decent mainstream media and book references, you’ll likely be safe. Look on google news and google books to find them.
    • (If you can’t find such references, then probably the subject isn’t notable by wikipedia’s definition of the word, and you might be wasting your time with this one)
  • Adding references like this is actually really easy – just click the ‘cite’ button in the editor, paste in the URL to a webpage representing the thing you want, and make sure you both confirm and add what it gives you (this involves pressing a button twice, otherwise you lose it – I do this every. single. time.). Apart from that you just have to add a reference section to the end.
  • Once you’ve created your page, it’s definitely worth keeping an eye on it (e.g. via your ‘watchlist’), so that you can contest nominations for deletion and so on.

That’s it. Good luck!

Simple tidal

Here’s a quick demo of a ‘simple’ dialect of tidal. Basically it

  • avoids parenthesis, `#` etc, through a small, simple library of shortcuts (faster, slower, higher, lower, crunch, quieter, louder, skip, etc)
  • allows you to just put e.g. `”bd sn”` and it’ll assume you meant s "bd sn".
  • that’s it

I’ll be trying this out with a large number of 8 year olds soon..

Tidalbot is back

TidalBot is back! You can tweet tidal patterns to @tidalbot on twitter, and it will give you back an mp3 of the pattern, as well as a PDF with a visualisation of it.. Here’s a couple of examples:

As a bonus, the latest pattern is currently being projected into the shop window of Access Space Labs on Fitzalan Square in Sheffield.

The Golden Age of the Future

I was really happy to be interviewed by Dean Honer (of I Monster fame among others) as part of an article in the excellent Electronic Sound magazine, which you should immediately go and subscribe to. The article gets to “There’s also Alex McLean …” via an unlikely route of superheroes, I spent a few minutes out of my mind with hubris when I read it. Great to be featured also alongside Chris of CPU/Computer Club, Heavy Lifting and Blood Sport who are all putting a lot into Sheffield’s music scene.. The next issue is out now so hopefully no-one minds if I share these scans of the article.. It was a Sheffield special with loads of good stuff, still available on back issue although be quick if you want one as they do sell out!

Computer Club in Igloo magazine

A reflective review of Peak Cut EP in Igloo magazine, part of a feature on Computer Club:

Yaxu, Alex McLean, doesn’t just use programs to make his sound, he writes his own programs. The first result, Peak Cut, has been set to memory stick. The style, dubbed algorave, is a mix between breakbeat IDM and playful plink. The entirety was constructed using McLean’s Tidal software. McLean sounds like a bit of a programming fiend. During live shows the raw code he knocks out is displayed to give visual insight into what is happening behind the laptop lid. Now I’d be the first to raise a cynical eyebrow if this idea didn’t work, if this were little more than a gimmick. But, the music speaks for itself. I can feel the other eyebrow twitch. USB Stick?! But in the spirit that this LP has it is arguably the most universal physical format today. Charming sounds, sometimes chaotic, pour forth. Absorbing and complex this is a style that involves the listener in more ways than one. The release offers you the chance to try your hand at sonic sculpting with Tidal, the software being part of the release. As the price of vintage equipment soars over on eBay this is the other side of the synthesizer. Open source and available, an emancipation of electronic experimentation. Before my rhetoric gets a little too early 20th century I better get back to the album. Percussion rains down, clambering atop one another as keys stagger through a sonic storm in tracks like “Animals.” At points the fuzz, fizz and flicking can become frustrating, but that soon passes. Peak Cut needs a number of listens and is at times, well, puzzling. But pretension is not part of the formula, instead this is picking up where a certain past left off.

I’m not really a computer nut. Yeah, I know we all use em all the time but I’ve never really been into coding and stuff. I never really got past BASIC, or past the first few hours with it. Yet, I must admit, I always liked the egalitarian nature that a lot of coding has. The sharing of ideas and software. The freedom to build and construct in a new language, one that would communicate something new. Computer Club have captured some of that vibrancy, some of that desire to distribute and that keenness to create. Who says you need to buy vintage analog equipment for exorbitant prices? Some labels of Sheffield say otherwise, and the results are plain to enjoy.

full article