Also I don't know anything about music theory so I got my boyfriend to write me some cheat sheets
Have you tried using toScale ? Works wonders, is super intuitive and flexible.
For instance, to have a C Maj scale :
d1 $ n (toScale [0,2,4,5,7,9,10] "0 1 2 3 4 5 6 7") # s "midi" # midichan 1
You can collide the melodic pattern with a rhythmic pattern using
struct (and it's so fun !) :
d1 $ struct "t([5 6],16,<0 [0 2]>)"$ n (toScale [0,2,4,5,7,9,10] "0 1 2 3 4 5 6 7") # s "midi" # midichan 1"
If I want to transpose it to D Maj,
|+2 will transpose the sequence 2 semitones up :
d1 $ struct "t([5 6],16,<0 [0 2]>)"$ n (toScale [0,2,4,5,7,9,10] "0 1 2 3 4 5 6 7") |+2 # s "midi" # midichan 1
Now what's immensely convinient is that you can swap values in the interval array (the bit after
toScale and create your own scales as well, or simply different scales (here, C Phrygian) :
d1 $ struct "t([5 6],16,<0 [0 2]>)"$ n (toScale [0,1,3,5,7,8,10] "0 1 2 3 4 5 6 7") # s "midi" # midichan 1
Say you want to directly play the sequence in E Phrygian, rather than adding 4 st (
|+4), you can start from 4 (as you already know, an E) rather than 0 (C) :
d1 $ struct "t([5 6],16,<0 [0 2]>)"$ n (toScale [4,5,7,9,11,12,14] "0 1 2 3 4 5 6 7") # s "midi" # midichan 1
Yes this is nice! I have to confess I just haven't really spent the time to learn much about the melodic features in Tidal. They changed some time ago and I never really caught up
I am also quite lazy and find it easier sometimes to have a list of midinotes I can use rather than to define anything
It's really worth the learning curve
tidal cycles now has scale function
d1 $ n (scale "minor" "0 1 2 3 4 5 6 7 ") # s "midi"
It has support for many scales as well
A full list of scales currently supported is here:
Thanks ! What I enjoy though with
toScale is that one can visualize and alter the intervals easily, making further experimentation super fun.
Listening to it right now, very cool stuff!!
I'd be interested in knowing a bit more about the workflow you used... E.g. you mentioned you used hardware synths, was that in conjunction with SuperDirt or was that done completely in hardware?
Also I imagine you had to record separate tracks e.g. one for the drums, one for guitar, one for vocal etc...? How did you set that up? How many separate channels did you record?
Well, that depends what you want to do.. I think it's good to focus on whatever aspects of music bring you joy, and a large section of the electronic music world disregards tonality entirely. Sometimes it worries me that (as far as I understand) I only really do stuff in c major, have never got into microtonal stuff etc.. But c major is a huge world of possibilities, and in truth I'm more interested in patterns of time and timbre than notes.. I find those constraints more interesting
So if I remember rightly it's like 95% hardware synths and drum machine, all controlled via midi (sent via superdirt). Theres a few samples being triggered by superdirt too, but I dont think i used any superdirt synths in the end. That was all recorded live with a separate track for each bit of hardware. (I did this at a studio - Tye Die Tapes - they ran each bit of gear into the desk for some EQ, then through outboard compression, gating and more EQ and then into Reaper). Nothing was prepared in advance of the session, I recorded many hours of improvisation and then I worked with the engineer to edit it down into more or less the final form.
Something I like about working this way with MIDI is that it's easy to set up patterns and then tweak all your sounds while they're running to get it all sounding perfect.
Vocals were overdubbed in another session onto the edited tracks. I've got a roland VT4 for the vocal processing. The guitar was also overdubbed (not by me, I'm horrible on guitar) using Waves GTR VST amp for the tone - I asked for "cheesy shred tone" and I think he nailed it.
I do send MIDI to the VT4 for the vocoder sometimes, but didnt in this instance.
Then it all went for final mixing (which was minor due to the use of outboard gear) and mastering. The whole thing took a few weeks, and was very much a collaborative effort between me and the engineer, I found it super helpful to have an outside person helping me with the sound and editing, it gave a perspective I really struggle with on my own.
If you want yet another example of melodic music in Tidal, my latest EP, Wilderness, pretty much fits the bill (maybe even too much, in the sense that I stuck too much to the classical music theory I know and did not experiment with other possibilities).
I was wondering, when you say
do you mean tweaking the sounds using the controls on the hardware synth (buttons knobs etc.)? Or can you control the external synth's parameters directly from a tidal pattern?
Also would something like that work with software synthesisers too? I'd really like to experiment with this stuff but I don't have any hardware synth (but I have some very cool VSTs I'd like to use!!)
I know we'll look at this in the next few weeks.. Just being curious here. Is there any material/tutorial I can start looking at in the meanwhile?
Well I meant tweaking knobs on the hardware BUT you could totally do that via Tidal if the parameters of your synth can be controlled by MIDI, e.g. using CC messages.
Certainly you could use all the same techniques with software synths. In fact I expect you would have even more flexibility over what you control from Tidal, since most DAWs will let you set up MIDI control however you want.
You will need an internal midi routing device on your computer - I'm on windows and use 'LoopBe internal midi' which is a virtual midi cable and it's great. I think on mac the built in midi routing is pretty good. There are plenty of options though.
As you say, we'll be covering all this soon, but by all means you can get a head start. Check out the instructions here and shout back if you get stuck. Basically there's a little bit of code you need to run in SuperCollider to get it to speak to your Midi device, but from there it should all be pretty recognisable stuff in tidal.
Is there a command I can type that will list a scale's definition? For example, If I'm running
d1 $ slow 2 $ n (scale "bhairav" "0 .. 6") # "superpiano"
and I want to change the scale on the fly, but I don't know how many notes are in a particular scale. Is there a command I can type that will display:
pelog = [0,1,3,7,8]
in the command pane so that I can count the number of notes in the scale and adjust accordingly?
d1 $ slow 2 $ n (scale "pelog" "0 .. 4") # "superpiano"
OK so I've sat down with this, and it is exactly the info that I was looking for - I've been trying to resolve in my head how to manage the different scales by preprogramming them but just transposing them from C is such a great solution (I did actually do something similar in my video earlier in the thread modulating the chord progression, just needed the toScale functionality to join the dots).
I think there's a small mistake in there though,
This is actually C Mixolydian (with the dominant/flat 7) - C Major is:
Indeed, thanks for noticing / correcting
thank you! I did the setup on Windows with 'LoopBe internal midi' and works perfectly!
Sorry to keep going off-topic here, but since you also are on Windows I was wondering: can you recommend any "virtual audio cable" software? I'd like to be able to route supercollider's output back into the DAW, possibly on separate channels; I think I know how to set this up on the supercollider/tidal side but I'm not sure what's a good option to route audio. I used to have soundflower on a mac but I'm not sure what's the best windows alternative (if any).
I use VB Virtual Audio Cable - always worked very well for me. Im pretty sure VB will only do stereo (I.e. 2 channels) though. For multichannel (I.e. if you want to send d1, d2 etc to separate channels in your DAW) you'll need a multichannel audio device. Nerds.de (the LoopBe people) make one, it's not free though (but it is cheap)
There is some discussion about this here.
I really love this thread, I would like to know if someone has experience with creating a list of chords from scratch, instead of using - the library of chords - I would like to explore other possibilities - adding some other notes and exploring stuff that I usually play on the guitar, actually that is something I would like to share, as part of my process, I usually play some chord progressions/melodies in the guitar and then translate that to tidal (the translation is never exact, which I really like, to see how code brings me somewhere else) - recently I recorded this track with tidal and vcv -
Thanks for all the inspiration and all the cool music!
You could do it with
mychords = inhabit [("hola", "[0,4,2]" :: Pattern Double), ("hello", "[0,5,7,12]") ] d1 $ n (mychords "hello hola") # s "superpiano"
You have to use
:: Pattern Double to tell haskell what kind of pattern you're making, but you only have to do that on one of the values, it can work out the rest.