Category: misc
Routing voice and hifi stereo audio from Jack into zoom under linux mint
Mostly a note to self, but maybe this is useful for someone else trying to get hifi audio from jack into zoom using linux mint or similar, so I thought I’d make it a blog post.
Zoom processes voice separately from desktop audio. So to send music and voice separately, while jack audio is running, you have to have two feeds going from jack to pulseaudio.
I already have jack set up to connect to pulse, so desktop audio works as normal. I think this was just a case of installing the `pulseaudio-module-jack` package, and configuring jack to run `pacmd set-default-sink jack_out` after startup.
To add a separate stereo channel out of jack into pulseaudio, I ran
pacmd load-module module-jack-source channels=2
Then the new jack sink appears in qjackctl and I can connect up my music sound source (supercollider) to that.
In zoom I then share a window, with stereo hifi audio switched on. `pavucontrol` is super useful at this point, you can see zoom is listening separately for voice and desktop audio, which appears as zoom_combine_device
. Unfortunately I couldn’t simply connect the zoom_combine_device
to the new jack source, don’t know why. However it’s possible to create a ‘loopback’ device for connecting sources to sinks in pulseaudio. I tried with this:
pacmd load-module module-loopback channels=2
Now I expected to have to more in pavucontrol to connect this up to zoom_combine_device, but somehow it did this automatically. I think I had to connect it to the second jack source but everything else ‘just worked’ somehow. Lucky me.
With a bit of experimentation I can hear that as expected, supercollider sounds different, depending on whether I connect it to the voice or desktop audio input into zoom. I’ve only tested by recording a solo zoom session so far, and can hear there’s more dynamic range with desktop audio. However I can’t hear it in stereo, which is really what I’m after. I’m hoping that’s just zoom recording in mono for some reason, and that in practice it will be in stereo.. After further tests, it all works very well, with hifi, stereo audio from supercollider, and voice treated as voice. So be aware that the record function in zoom does not have the same audio as the other person hears.. Great! I think though that both sides need to have stereo enabled in the zoom settings for the other party to hear it in stereo – I’m not 100% sure that this is the case, but it’s what I’ve read..
AI as collective performance
I’m excited to be working with some ace people planning a new project “AI as collective performance”, namely Mika Satomi (artist and designer), Berit Greinke (Universität der Künste Berlin and Einstein Center Digital Future) , Juan Felipe Amaya Gonzalez (performance artist) and Deva Schubert (freelance choreographer). We’re part of a cohort of ten projects, exploring the intersection on AI and culture, jointly funded by Stiftung Niedersachsen and VolkswagenStiftung.
Here’s the blurb so far:
The project “AI as collective performance” deals with the explainability of algorithms and artificial intelligence. The goal is to develop a collaborative performance in which the processes behind AI become visible through choreography, interactive costumes, and live coding. Each person represents a node of the network that grows, changes, breaks patterns and creates new ones again. In this project, the human body acts as a processor. Here, a choreographer is also a programmer. By translating AI into physical movements, the complex technology becomes tangible and perceivable.
How to withdraw from Facebook
Facebook is a problem.. They happily show political adverts, heavily targeted and very under-regulated, as well as being slow to act against white nationalism and so on.The worst thing for me it was facebook turns us into. It privileges easy controversy, so your feed will be full of people getting angry at other groups but often not dealing with difficult issues in a reasonable and thoughtful way. If by some chance an interesting discussion does start up on facebook, it’s not properly shared or archived. There’s a lot to like, and there’s a lot of hidden facebook mechanics which we don’t know enough about to dislike. Anyway, I’ve recently moved towards participating on smaller, semi-private social groups off facebook and it’s much more enjoyable and productive.
Still, you might not be ready to leave it, wanting to keep in touch with friends and family, promote events and so on.. Using facebook’s own tools to step away can cause a lot of upset, as it will appear to your friends that you’ve blocked them.
A good alternative is to unfollow everyone and every page. If you’re like me that would normally involve 1000’s of clicks to remove all the weird and local pages and random people you’ve somehow friended over a decade or so. Here’s a way to do that automatically, although it takes a while (one unfollow per 2 seconds, to avoid facebook detecting and stopping your plan..), it is hands-off.
Here’s how, in e.g. firefox or chrome:
* Click the Arrow in upper right
* Select “News feed preferences”
* Click “Unfollow people and groups to hide their posts”
Now the tricky bit – to open the “javascript console”. This is what facebook doesn’t want you to do, as getting access to the javascript running in your facebook window is exactly what scammers want to do. (I’m not a scammer, but don’t take my word for it!)
This might be slightly different on your computer/browser version, but.. In firefox, It’s under the ‘burger’ menu in the top right (click the three horizontal lines), then “Web Developer” (that’s you!), and then “Web console” (not browser console). Under chrome, it’s a similar menu but three dots, then “more tools”, “developer tools”, then in the new frame that opens up select ‘console’ in the menu along the top.
At this point you should see a healthy warning telling you not to paste in code. If you decide to trust me and go ahead anyway, click the commandline area (it should have a ‘>’ or ‘>>’ in front) and paste in the following:
var unfollowButtons =document.querySelectorAll('div[aria-pressed="false"]'); unfollowed = 0;for(var i=0;i<unfollowButtons.length;i++) {setTimeout(function(element){ element.click(); unfollowed ++;console.log('Total unfollowed ' + unfollowed + ' out of ' +unfollowButtons.length) }, i*2000, unfollowButtons[i]) }
The browser might get you to do something like type “allow pasting” first, to make doubly sure that you aren’t being scammed. If you do type something like that, you’ll need to delete those words again otherwise it’ll be part of the code and nothing will work..
You should see the displayed people and pages get unfollowed before you, one by one. It won’t do all of them though, just a couple of dozen that have loaded in that page.. To unfollow everyone and everything, you have to scroll down in the ‘unfollow people’ box until they’re all loaded up. Then run the code again.
Then you’ll have a nice calm facebook experience and hopefully will enjoy some improved mental health.
Hybrid live coding workshop
I’ve been working on the hybrid live coding interfaces research workshop with Shelly Knotts and Jack Armitage, happening online 28-29th July 2020. It was originally going to be colocated with NIME, but we decided to hold it a week later, and twice as long (six hours, spread over two days) so that we could include more people and make registration free.
The abstracts will be up soon, but you can already see the schedule and list of speakers on the website. There’s a really nice mix of talks, should be ace!
With all the responsibilities and stress of lockdown, we made it as quick and easy to propose something as possible. There’s no publication attached, but with it being a free event, and low-barrier to entry, we got loads of proposals. We’re using the very promising pubpub.org system from MIT to collect abstracts, which I highly recommend as a multi-user publishing tool supporting peer review and comments.
hellocatfood x yaxu
I’m really happy with this set with hellocatfood:
You can find some kind words about it over on the mighty CDM, including an exclusive talk-through of the performance between the two of us.
Accessible online courses
Warning – hurried, disorganised thoughts. I will very likely add to and tidy this up later!
I’ve started running a TidalCycles online course. I’m not a trained pedagogue or education researcher, but have run a lot of workshops over the years, and it seems to be going OK, with around 300 people signed up, as accessible as I could make it, while being financially sustainable for me. It’s felt a lot like setting up a space for a community – lots of micro-decisions that add up to the whole. Here’s what I’ve done, from a technical, financial and community perspective.
Firstly, I got people to register interest via this google form. To start with, this was just to collect information, to help me make the course as accessible as possible, work out how to structure it, and decide how much to charge.
I asked about barriers to entry, and the biggies were:
- (Human) language barrier – lots of people not fluent in English, worrying about that. In response I’ve edited subtitles for all my videos, as many people find reading easier than listening, and (as opposed to automatic transcription) the automatic translation seems usable if people want to read in their own language. I also set up automatic translation in the course forum.
- Time (working/caring responsibilities, formal education, timezone) – the amount of time commitment really varies, and people have joined from all around the world.. So a ‘live’ course wouldn’t work. Instead I’m making pre-prepared videos (which again allows decent subtitling), worksheets, and asking questions on the forum. I will have live q+a sessions, at different times to reach across timezones.
- Internet speed – A few worried about this and I haven’t thought enough about it. Probably trimming Tidal’s large library of default samples would make it accessible (actually someone also gave lack of disk space as a barrier). It’s also probably another argument for not relying on live video.
- Money – I live in the UK, which puts a large part of the world at a huge disadvantage in terms of exchange rate. I do need to get paid, though. Rather than a paywall, I settled on a Pay(-as-you-feel-)wall. I could have made it a student discount etc, or cheaper for certain countries, but there’s no real way to codify people’s ability to pay.. So I left it up to them, with the following guide, for a four week block of lessons:
- £0 – for those who wouldn’t be able to participate otherwise
- £12 (£3 per week) – standard
- £24 (£6 per week) – those with extra cash to spare
- £40+ (£10 per week) – those with institutional backing
- Installation worries – Tidal installation can go wrong in a way that is difficult to recover from. I allowed myself plenty time to walk people through the process on the forum. This has worked fairly well, and we now have a forum full of problems and solutions, that I need to organise for greater good!
It was a struggle to find a pay-as-you-feel system that let people name their own price. Crowdfunding platforms like patreon are really geared towards squeezing as much money as possible out of people, with tiers etc. I needed to give everyone the same access but leave it up to them to decide how much to pay, from £0 up. Eventually I used wordpress, with the woocommerce plugin to take payments (via paypal and stripe), “product open pricing” to add pay-as-you-feel functionality (including support for £0), and “advanced order export” to allow export of orders into a csv for import into the course forum. WordPress plugins either seem to be free, or super expensive with a recurring charge.. I’m doing just fine with the free functionality of these. I have my own virtual server for hosting them.
I looked around for e-courseware that could help host the course, but couldn’t find anything suitable. I’ve had nightmares with things like Moodle in the past, and have the feeling that they’re all based around assessment more than anything. Instead I went for a general purpose discourse forum, which I’ve grown to love. It’s free/open source, widely used, has loads of plugins etc available, and is thoughtfully designed around healthy community discussion. Again, I’m self-hosting it.
Having a PAYFwall has some unexpected results. I hardly had to promote it at all to fill it up. Actually with the PAYFwall I feel motivated not to promote it, because it creates a really delicate balance. I’ve noticed this before, with the (in-person) tidal “summer school” weekend course we’ve also run on a PAYF basis. The more I promote, the more ‘semi-interested’ people I seem to reach, and the average payment goes down.. Therefore making the whole thing less viable. At the same time, I’m really happy that people who can’t spare £3 a week (I’ve been there) don’t miss out on the course, or on essentials for them or their families. As things stand, the kind people who are able to pay extra mostly cover those who can’t pay, and it all works out. I’m not going to ‘repay’ the years of work I’ve put into Tidal, but that’s not my aim.. It does look like a serious contribution towards properly funding my ongoing work on Tidal though, maybe its development but definitely its documentation.
Because I don’t know how long it’ll take to get through everything, I’ve just done PAYF for the first four weeks. I think it’ll probably be around twelve weeks in total. I’m expecting some drop-off in participation and PAYF income later four-week cycles, it’ll be interesting to see what happens.. I’ll survey people at four weeks to see how things are going, anyway.
The forum seems to be working well. I’m aware that as ever there is strong “presence privilege” at hand.. For example overall participants seem fairly gender balanced, but men seem to be posting a lot more than others. This is a familiar story with online forums, I’ll have to think about how to keep the culture healthy (ideas welcome!). I also need to work out how to make the course materials easier to find. Currently they might be getting a bit lost in the threads – I think this is just a case of getting around the discourse software, which is nicely configurable.
I have absolute beginners in mind, but a lot of people have joined who have already being self-teaching themselves Tidal. I think they’re happy asking more advanced questions, and picking up on previously under-documented features as I get everyone up to speed.
In terms of the videos, I did have in mind to edit them down with youtuber-style ‘jump cuts’, maybe paying a pro to edit hem. Through feedback I’ve decided not to bother – people seem to like “ums” and “ahs”, giving them time to take in information. So I’m just recording them ‘as live’ with OBS, uploading to youtube, then hand-editing youtube’s automatic transcription.. Then adding a worksheet to match the video for people to go through hands-on. I’ll be working on reference material too. The videos are fairly unscripted, I might write out what I want to say, to think it through, but I don’t then read from that as a script. I’ve found that recording once to get things straight in my head, and re-recording it from scratch makes the result snappier and more logical.. and for a 6-10 minute video, doing a couple of ‘takes’ is a time-efficient way to do things, rather than agonising over a script. I also use a green screen I bought on ebay a while ago, so I can superimpose myself in the corner of my screen.
To give you an idea, here’s a general “intro to live coding” video I did for the Sheffield creative guild, just before starting work on the course videos:
I think an important thing at some point will be involving more instructors, to give different perspectives on using Tidal. I’ve been talking to Lucy Cheesman (aka Heavy Lifting) about this, we worked on the last Tidal Summerschool together and from the post-workshop survey the participants clearly appreciated her teaching skills (as someone who, unlike me, has actually learned Tidal herself!) and alternative point of view.
The final question I have to think about is what happens after. My default position is releasing everything as creative commons, and I certainly want everyone on the course to always have access to the material.. But this is something I have to think about. I will likely either re-run the course, or let people go through in their own time. I’ll probably make everything creative commons (cc-by), but keeping the PAYFwall up, to help sustain documentation and development into the future.. and eventually turn the material into a reference book.
Owning an electric vehicle

Recently I bought a fully electric powered car, second hand. It’s a 24kwh, Nissan Leaf Tekna with a 2015 number plate approaching 28k mileage, bought from a dealer for £9.5k (plus an ‘admin fee’, which I later found out was optional, bah!).
It was £700 off in a clearance sale which seemed genuine – it looks like it had been sitting around in the dealer for 8 months. This is a concern as if a electric car battery is on high charge, having it sitting around unused can be a bad thing, and general car dealers might well not know this.
The car was listed as having an onboard 3.3kw charger, but it has the expensive option of a 6.6kw charger, which allows it to be charged twice as fast on middling kinds of chargers. It’s apparently quite common for dealers to not know what they’re selling, and in this case I think it made the car a reasonable deal.
There are scare stories of having to replace the main car battery every five years, I think thanks to rumours spread by Top Gear (a UK entertainment show that pretends to be about cars). The battery on this one is completely fine, with the dash showing the maximum of 12 bars of battery health, despite approaching its fifth birthday. It is possible for dealers to reset this so you have to be careful, but it’s stayed at 12 so I think it’s good. You can get more detailed information by plugging in an ‘OBD-II dongle’ and reading data off the battery management system using an Android app. However despite buying two different dongles (a wifi and a bluetooth one) I still haven’t got this working..
[Update: I got the bluetooth dongle working finally, not sure what was wrong.. It’s showing 91.4% state of health, not bad!]
Driving range is heavily dependent on driving style and weather – you get to drive further on a single charge in summer, but it seems I can comfortably get 60 miles at the moment and still have 10-20 miles range on reserve for peace of mind. You need this because sometimes public chargers are out of action, or “ICEd” – occupied by a fossil fuel-driven car (ICE = internal combustion engine) using a charging spot as a parking space. There’s a lot of discussion about the people who do this (sometimes known as ICEholes) on the forums.
There’s also a lot of misinformation on the forums. If you do get a OBD-II dongle working you can get an accurate-looking percentage about battery state of health, and this goes up if you do a ‘rapid charge’. But in truth, the state of health number is a guess, and it seems that doing too many rapid charges are actually bad for your battery health. At least this article seems fairly evidence based, and instead says that resting your battery on low charge seems to help it recover.
So what does it feel like to drive? After my old ford fiesta, it’s absolutely amazing. It’s super quiet, which means it’s really great for listening to music (on the bose 2.1 system). It has heated seats and steering wheel (this is amazing, and also much more efficient than the main heating system, which shaves some miles off the range). Plus 360 camera for parking (top-down, early grand theft auto style), and so on.. I learned to drive late in life, but hired a lot of cars in the past and have never really enjoyed driving at all before. I’d still much prefer a nice train journey for longer distance, but this is actually not bad.
EV drivers talk about ‘range anxiety’, and it is real. The longest drive I did so far was to the arcade club in Leeds, which happened to have free vend EV charge spaces. Thanks to the 6.6kw charger it was fully charged during our 2-3 hour visit, ready for the return journey. That was a ‘destination charger’ on ‘fast charge’. At home I’ve been using trickle charge off a standard 3 pin plug, which takes longer but charges fully overnight (I’ve ordered a podpoint which will allow the full 6.6kw charge at home). We’re planning a longer trip to the south coast which will need a few charges on the way.. This is where those rapid charges come in, in my old 24kwh model (newer Leafs are up to 64kwh) this means stopping around every 50-60 miles to charge up for 20 minutes or so. You basically have to stop for X minutes in order to go X miles, so it doesn’t really take you any longer to stop more often, as long as the chargers are all on your route. For battery chemistry reasons you can only rapid charge up to 80%, then it goes slow enough to not be worth waiting around for.. Which means your first leg from 100% can be a bit longer, and you can probably get back up to 100% over lunch.. Lets see how that goes.
[Update: just did a drive from Sheffield to Manchester, didn’t quite have the charge for the return journey, and had a stressful half hour or so finding a spare place to charge.. Took a few attempts in city centre traffic, but got a (free!) charge in the end. Not convenient though, I should have just parked up anywhere and got a rapid charge on the motorway on the way home, or just taken the train..]
Running costs are super low. Without an ICE, there’s not much to go wrong, and these cars have proved reliable. ‘Fuel’ is often free, or at worst several times cheaper than petrol/diesel. There’s no vehicle tax (for now), and on-street parking and all the council car parks in Sheffield is free (you have to register first). If/when EV sales take off, this is all subject to change.. But electricity will always be cheaper than petrol.
In terms of local air pollution, they’re great. Brake pads are hardly used (the energy goes back into the battery via a generator), cutting down on airborne fine particulates. You tend to drive more smoothly to conserve energy, which I naively guess means less tyre wear in the air. Plus of course, there’s no exhaust. We use green energy at home (good energy), and the chargers tend to run off green energy too. (I realise it all comes via the national grid, but please save me that argument..)
In terms of impact on the climate, things are less clear. The impact of manufacturing a car and battery is very high. Probably better than a ‘conventional’ ICE, and they seem to be lasting longer too, but hey. EVs are not The Answer. But still, at least when you drive them you’re not contributing to illegal and extremely dangerous levels of local air pollution.
That said, electricity companies are currently experimenting with using EVs for energy storage. All those batteries could really help solve how to smooth out renewable but intermittent energy from wind and solar. They’re testing whether they can do this without causing early battery degradation. Definitely plausible.
In privacy terms it’s a bit of a disaster.. I didn’t have to sign up with Nissan, but now I have, they seem to know where my car is at all times. On the plus side so do I, and I can check its charge remotely, and get loads of stats and stuff.
Anyway, it seems good overall. Eventually the battery will show degradation, but nonetheless I have a feeling now is a good time to buy second hand. Electric motors don’t wear like combustion engines, and third parties are starting to replace EV batteries with new ones of higher capacity than the originals. EV batteries are currently made with limited materials such as cobalt, so it’s not guaranteed that they’ll get cheaper.. But maybe technology will soon advance to the point where we work around these dependencies, and I’ll be able to swap in a new one for relatively little. That glosses over the conflict and pollution around battery manufacture, but again, that probably works out considerably better than oil..
Pattern and decoration
I finally took some time to watch the video recordings of the AlgoMech Symposium on Dancing and Braiding, which I co-organised but couldn’t attend, because I was running around co-organising the rest of the Algomech festival at the time. I was struck by Berit Greinke asking the question “What more can repeat patterns do?” in the second talk in this panel shared with the Kate Sicchio and chaired by Victoria Mitchell. Later in response to a perceptive point from an unseen audience member (please shout if it’s you!) Berit points out that repeat patterns haven’t been in favour in textile design, being dismissed as “decorative” (see 53m30s). As an outsider, I found this surprising, isn’t textiles all about pattern? But it’s also the case in classical music, where music and pattern seem synonymous, but accusing a composer of making patterns would be extremely insulting. In a fantastic blog post Andrew Hugill notes that it “.. implies that you have nothing original to say and fall back on mechanical formulae.” It’s super interesting to me to see “mechanical formulae” as pejorative, which I can feel even though I run a whole festival celebrating algorithmic and mechanical movement!
Both Berit and Andrew are making the same point – that the word pattern means different things in different fields. But in a way it seems it isn’t taken seriously by the highbrow in any field. Andrew points out that designers talk about “depatterning” as important – you start with a pattern in order to get away from it. Berit is implying that once you link meanings of pattern across two or more fields, you get to see how it is misunderstood. You then see pattern as active structure, that is, after all, all around us.
I’m also reminded of Dave Griffiths demonstrating his incredible Fluxus live coding environment many years ago at an event in Rotterdam, with a recursive unfolding form of a fern-like structure, a standard Fluxus demo that just takes a couple of lines. A media design theorist in the audience gave a withering response by pointing out that the animated visual results were ‘decorative’. I suppose he partly meant that this technical demo wasn’t high minded conceptual art (which shouldn’t be surprising, introductory, technical demos rarely are), but I think there is something here about the rejection of fractals and other patterns because they come from an identifiable procedure. It’s as though if you can tell how something was made, then it is worthless. Running counter to this view, Dave’s work always has the principles of openness in its foundations..
I think that from the outside, almost anyone would argue that the fields of textiles and music are all about pattern. But from the inside, composers, textile design academics and media theorists alike reject pattern as decorative, and therefore besides the point and theoretically worthless. This is a disciplinary blindness. We have to rise above these fields to really see pattern for what it is – active structures of making, that allow us to reach beyond our imaginations.
Time spirals
I’ve long thought about time in Tidal as a spiral – where cycles develop over time. I don’t think I’ve really made the connection to vinyl before though. Alexandra posted a DJ battle between D-Styles and Qbert to fb, which lead me to watch this from D-Styles:
The whole thing is great but the one-step back two-steps forward bit from around 1m15s reminded me a lot of shifting patterns in Tidal. I think seeing this repeated gliding happening on a slower scale has really opened up the complexities of turntablism as a whole for me.
It’s also inspiring because it helps me see Tidal’s limitations. Tidal has a spiral timeline which you can manipulate, but not in the same way. When I’ve tried scratching in the past it’s super difficult, I don’t know anything about it really but it feels like you’re constantly managing the state of the record.. It’s one thing to scratch the record and totally another to recover from the needle ending up in a different point in the timeline. I could never work it out by myself.
Tidal doesn’t suffer from this problem because there is no state – you don’t move time, you jump between different manipulations of time. For example if you reverse time, it’s not like moving backwards from where you are. Instead you jump to a different reality when time was always reversed. This is clearer with e.g. slowing down time. If you halve time you might play half a cycle, but then if you double time Tidal won’t continue from halfway through the cycle.. It’ll act as if time always was doubled, and therefore continue from the start of a cycle some way into the future. In terms of a turntable, if you add slow 2
to a pattern, you’re not doing something like moving the pitch slider down, you’re doing something more like swapping the record with another one with the music recorded slower, and putting the needle on the same place as the original.. It’ll sound slower, but you’ll have jumped to a different part of the track. It’s hard to imagine DJing under these circumstances..
Watching this video it’s clear this ‘problem’ of state isn’t a problem at all, but fundamental to the music. It would be amazing if you could do something like this in Tidal – not slow down a pattern, but slow down the timeline.. I.e. add the ability to pattern changes to time, rather than jump around the timeline. I’ll have to think about this, it could be something easy to implement that I just have never thought about..
Patternuary
I’ve been making a video every day this month as part of ‘#jamuary’, got as far of the 12th so far, hoping to get the full set. The youtube playlist is above, and I’m also uploading to the Internet Archive.