Bulk channel operations - mute all/some?

Hi all,
I'm really enjoying the course, even spending a little of my non-available free time doing some composing :smiley:

I'm sure I'm jumping ahead here, but a limitation I'm finding is the ability to perform non-destructive operations to multiple channels.
Example: I want to build up a series of cycles (d1-d4), then create a "drop" by:

  1. muting all channels
  2. starting d5 bass kick while all channels still muted
  3. unmute all channels with extra bass oomph

I'm not a dance music artist, I'm sure all my terminology is wrong, but I hope the description makes sense -

Is there options for me to do this? I've seen the 'mute' command, but it's a per channel thing, 'hush' doesn't let me bring everything back easily, the workaround I've tried is creating a d6 $ silence which I can solo and unsolo but I've got to be very nimble fingered on the keyboard to line everything up

Is there anything better suited?


Maybe try something like #gain (range 0 1$ slow 4 square) which would alternate the volume between 0 and 1 every 2 cycles. And if you wanted to bring back the elements gradually you could probably do something like:
#gain (range 0 1$ stack[square,saw])

I haven't actually tried any of this myself so take my answer with a grain of salt. https://tidalcycles.org/index.php/Oscillators. Maybe looking through this page would give you more ideas.

1 Like

If you want to carry out multiple actions at once, you can use do notation. To apply a function to everything you can use all:

do d5 $ sound "bd*4"
   solo 5


do unsolo 5
   all $ (# shape 0.8)

To take off that effect on all you'd then need to do

all id

It'd be good to have a good session or two on different ways of shaping a performance. The problem with solo and all etc is that you have to remember the state they're in. It really needs some UI so you can visually see what is solo'd, etc.

do d5 $ sound "bd*4"
   solo d5

something wrong there?

> parse error on input ‘solo’

1 Like

There was, that should be solo 5, fixed in the post..

Amazing, thankyou guys!

I went a little bit further, and found I can save my nimbleness plus build that wait by throwing in a setcps to half speed when I mute/solo the silent channel:

 do solo 6 -- my silence channel
     setcps 0.35

and bringing it back to 0.7 in my next do:

 do  d1 $ slow 2 $  n "[0 0] [~@0.4 0] [0 0] ~ " # s "bd"
     setcps 0.7     
     unsolo 6

Just got to be coscious of my own ability to keep time then :wink:

Here's what I've managed, little shout out to a @yaxu favourite at the end :stuck_out_tongue:


This is sick!

1 Like

Thanks! Needs some work on timing sections for sure, but the bones are there

The jux rev at the end was improvised, thought it'd get a laugh after Alex talked about it in the live stream the other night, but then it actually sounded awesome :stuck_out_tongue:

1 Like

I'd like to mute/unmute a group of channels. But something like mute [2,3,5] does not work. Is there a way of doing it in an easy form?

Thanks @yaxu for this
mutelist = mapM_ mute
mutelist [1,2,3]


cool thread :slight_smile:
so in theory this would work as an all fadeout workaround?

xfade [1,2,3,4,5,6,7] $ silence  

doesn't complain, but also doesn't execute
it'd be cool to be able to say xfade all $ silence
and it'd be cool to say xfade all over the next 12 cycles to silence

it's a mixing tool, like panning, level, reverb, etc...

You're right @abalone1969 that would be far better than a hard-mute! Or let's say: a good alternative...

1 Like

Ok here's a more relaxed version of hush that works on d1 .. d16

quieten = mapM_ (\i -> xfade i silence) [1 .. 16] 

Or if you want over a given number of cycles:

quietenIn t = mapM_ (\i -> xfadeIn i t silence) [1 .. 16]

The mapM_ function takes each number in the list [1 .. 16] and gives it to (\i -> xfadeIn i t silence). The \ is called 'lambda' and puts the number in the i variable. Then that gets used in the xfadeIn.


fantastic :slight_smile:
thank you, next level coding for me
is it possible to run it called this...

fadeOutIn t = mapM_ (\i -> xfadeIn i t silence) [1 .. 16]

then I can execute

 fadeOutIn 12

and it works fantastic

is it possible for me to put this code in my BootTidal.hs file
so it loads everytime?

and/or is it possible to include it in the next version of Tidal?

thanks again, great liveStream today

The name is an arbitrary variable (call it shutthehellupbutslowlyIn if you want :stuck_out_tongue: )

As a side note, fadeOutIn is more ambiguous than quietenIn to me: OutIn implies a cosine style volume shift ala ><

Whereas quietenIn is more clearly related to silencing over a number of cycles

1 Like

thinking about how to best put this in my BootTidal.hs file so it runs everytime
(until the next Tidal version :slight_smile:)
think I found BootTidal.hs with this info

ghc-pkg describe $(ghc-pkg latest tidal) | grep data-dir | cut -f2 -d' '

from here: https://github.com/tidalcycles/atom-tidalcycles/issues/60

is there anything else that needs to be included?
some of the other code that looks like this in the BootTidal.hs file (under let)
has tidal or i at the end
included as is, Tidal doesn't seem to re-load knowing this function
(BootTidal.hs from here ...

thanks for your help with this, sounds very musical
so cool

Hey I've been thinking the same, I watched this excellent video of @kindohm 's on the topic - he makes some interesting points about where to keep this stuff, and how - you can add it to your boottidal.hs, or you can just have it in a separate file.
My preference, at least initially, is to use the separate function file (for reference, here) for the main reason that these functions are all new to me and I'm still getting used to exactly how they work - so I like to keep that open for reference and occasional modification/addition as I'm going :slight_smile:
Putting it in the bootstrap file makes it a bit more permanent, and a bit more obfuscated (imo of course) - and any modifications require a reboot of tidal I believe, so I'll probably leave that for down the track a bit

PPS I found there's a vscode github gist extension that will let you create, open and save your gists directly to github... "Gist" by Ken Howard