From cfe4897f9696be99c6399abbb5b928f34a8424ef Mon Sep 17 00:00:00 2001 From: ktyl Date: Mon, 8 Aug 2022 01:31:01 +0100 Subject: [PATCH] wading into the tide --- blogs/2022/8/8/wading-into-tidal.md | 92 +++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 blogs/2022/8/8/wading-into-tidal.md diff --git a/blogs/2022/8/8/wading-into-tidal.md b/blogs/2022/8/8/wading-into-tidal.md new file mode 100644 index 0000000..59f2a84 --- /dev/null +++ b/blogs/2022/8/8/wading-into-tidal.md @@ -0,0 +1,92 @@ +# Wading into Tidal + +I stumbled across [TidalCycles](https://tidalcycles.org/) lately. +It exists at my happy cross-section of automation, rave music and open source software. +It's a [livecoding]() language/interpreter/instrument based on Haskell (in which I am also particularly interested!) and I decided to try it out. + +This is a short post explaining the steps I took and resources I used to install and get started playing with Tidal on Arch Linux using Neovim. + +# Realtime Scheduling + +First I had to . +Similarly to a DAW - I suppose Tidal is kind of a DAW? Audio engineers will squirm - it's important for Tidal to have high-precision timing, unlike most software. +This kind of control can be risky, so most systems don't make it available straight out the gate - Arch is one of them. +See [this post](https://jackaudio.org/faq/linux_rt_config.html) for a more detailed explanation, as well as a list of distributions which do enable realtime scheduling straight away. +In my case, I found a section on the [JACK ArchWiki page](https://wiki.archlinux.org/title/JACK_Audio_Connection_Kit#Realtime_scheduling_and_additional_resources) that provided an easier solution. +Install the `realtime-privileges` package and add your user to it: + +``` +sudo pacman -S realtime-privileges +sudo usermod -a -G realtime ktyl +``` + +As with all group changes, you'll need to re-log or reboot for changes to take effect. + +# Linux Audio + +There are three components to my local audio setup in the context of Tidal. +First is [JACK](https://wiki.archlinux.org/title/JACK_Audio_Connection_Kit#Realtime_scheduling_and_additional_resources), which is a low-latency audio daemon with a confusing number of implementations. +There is a list and comparison on the ArchWiki page, but I found the package I needed to install was `pipewire-jack` (as opposed to `jack` or `jack2`), which leads nicely into Pipewire, the second component. + +[Pipewire](https://wiki.archlinux.org/title/Pipewire) is a multimedia framework which aims to solve audio problems on Linux Once And For All. +It's an abstraction and doesn't directly play audio itself, rather deferring that responsibility further down the line. + +To actually play audio, I am using the [PulseAudio](https://wiki.archlinux.org/title/PulseAudio) which I already had installed. +However, this didn't work out of the box because Pulse and Pipewire had no idea about each other. +To resolve this, I had to install the `pipewire-pulse` package. + +# SuperCollider and SuperDirt + +Now we're getting to the fun stuff! +I mostly followed [this guide](https://roosnaflak.com/tech-and-research/install-tidal-cycles-on-arch-linux/), but I found I had to do a couple things a little differently - maybe it's a bit of a dated guide? - which I'll describe here. + +First I installed `haskell-tidal` from the AUR (I use the [`yay` AUR helper](https://github.com/Jguer/yay). +Then, as I wanted to use Neovim, I had to install the `tidalcycles/vim-tidal` plugin, using the [`vim-plug` plugin manager](https://github.com/junegunn/vim-plug), and remembering to run `:PlugUpdate`. + +The guide then describes steps to make the `tidal` binary available system-wide - however I found the path it describes didn't exist. +Instead, based on the path `vim-plug` installs to (`~/.local/share/nvim/` rather than `~/.config/nvim/`), I found my actual steps were: + +``` +cd ~/.local/share/nvim/plugged/vim-tidal +sudo make install +``` + +Next I opened SuperCollider with `scide` and installed SuperDirt. +Again the guide seemed a bit out of date in the version of SuperDirt it lists - I found I needed to use `"v1.7.2"` as the version string, rather than `v1.1.3` as listed. +By the time you're reading this, the version listed here may be out of date, so if you have trouble with this stage that's what I'd check first. + +``` +Quarks.checkForUpdates({Quarks.install("SuperDirt", "v1.7.2"); +thisProcess.recompile()}) +``` + +To run code in SuperCollider, select the block you'd like to execute and press `Ctrl + Enter`. + +At this stage, everything should be installed (notwithstanding any error messages, troubleshooting section not included) and we should be ready to go. + +Start SuperDirt up in SuperCollider: + +``` +SuperDirt.start; +``` + +Now, open a tidal file in Neovim: + +``` +nvim test.tidal +``` + +And enter a Tidal pattern! + +``` +d1 $ sound "bd sn" +``` + +To play it, put the cursor in the line and press `Ctrl + E`. +Neovim should open a new window containing a Tidal terminal, and find and connect to the runing Tidal instance. + +That's it! +Have fun making beats. +If you have any trouble with this guide, there's an off chance I've learned a bit more about in the interim, so feel free to [ping me an email](mailto:me@ktyl.dev)! +Or of course, ask the nice folk over at [Tidal Club](https://club.tidalcycles.org/). +