Live recording into tidal - getting audio input working

Hi there. Does anyone know how would I record live sound from a microphone into tidal? In non computing language if possible, please (layman here). Thank you!

1 Like

If I understand you correctly, you are looking for this GitHub - thgrund/tidal-looper: Different looper variants for SuperDirt to provide live sampling in TidalCycles. :slight_smile:
And is discussed here: Sampling within Tidal - #35 by mrreason

And feel free to ask if you have any problems with it.

3 Likes

hey, thanks. looks like what I need. how do I actually get the sound into the computer though?

Hi!
One of the main ways is to use something called an "audio interface", which is typically a little box you plug into your computer that allows you to plug microphones and instruments directly in. There are lots of them at various price ranges and capabilities depending on what you need/budget.

There are also USB microphones, and even the little microphone within most computers, both of which are capable of recording (and I suspect the build-in mic would be the default microphone with the Tidal Looper)

I hope that is helpful!

1 Like

What @mncmncmnc says is absolutely correct. There is even a thread about audio interfaces here in the forum https://club.tidalcycles.org/t/gear-talk-usb-audio-interface/1477

But whether you use an USB microphone, a webcam, an onboard microphone or an audio interface, the audio device must be available in SuperCollider. I also believe (hope) that the default device is used without further configuration. You can check this as follows:

  1. Open SuperCollider
  2. Start the server
  3. Open under Server -> Show Server Meter a window with the inputs and outputs

Now you can speak into your microphone and should be able to see an audio level (in green) like this:

Bildschirmfoto 2021-01-03 um 23.16.29

In the above example I have an input signal on port 1 and need to specify the input number in TidalCycles like

d1 $ s "looper" # linput "1"
2 Likes

That's it, thank you so much! Do you have any good recommendations for cheap but decent interfaces? As in max £50..... Want to avoid buying a crappy one if poss. Thanks again

Thanks for the info. Think I'm missing something. Have tried running

linput = pI "linput"
lname = pS "lname"

then running this as you said -

d1 $ s "looper" # linput "1"

then -

once $ s "looper" 
  • which as it says "writes one cycle to the loop buffer and uses the input port 0 and the sample number 0" on documentation - which I assume it is recording when I run that?

then I ran -

d1 $ slow 5 $ s "loop"
  • which I assume stops the recording and starts playback (although nothing for me)? and I slowed it down by 5 to make sure I was getting the full recording in (just using my laptop mic by the way).

Is this how it should work?

Only other thing I can think of maybe the 'tidal-looper-master' folder isn't in the right place, where should that be?

Apologies if this is unclear, and for my slowness. Thanks again

Hmmm this is not how it will work. I'll try to illustrate a procedure that should work.

First things first: Did you execute the SuperCollider code in Looper.scd (https://github.com/thgrund/tidal-looper/blob/master/Looper.scd)?

Then you should try the following code and see if the recording works and keep it running:

d1 $ stack [
    s "looper" # n "<0 1 2 3>",
    s "loop" # n "[0,1,2,3]",
    s "808 cp!3"
]

Now I try to explain what's happened with your code.

Basically you control the recording with the pattern with s "looper". This will record a sample under the name loop.

This records a buffer with a length of one cycle:

d1 $ s "looper"

And this records a buffer with a length of four cycle:

d1 $ slow 4 $ s "looper"

When the pattern starts from the beginning, the previous recording is overwritten.

The function once just plays one cycle of a pattern (https://tidalcycles.org/once). This will immediately starts a recording and stops it automatically after one cycle:

once $ s "looper"

And you determine everything via pattern therefore the following is equivalent to once $ s "looper" because 0 is the default input port:

once $ s "looper" # linput "0"

So much for the recording. Playback is separated from this and a recorded sample works just like any other sample.

This means that the recording starts from the beginning after each cycle with this pattern:

d1 $ s "loop"

And this starts the sample after four cycles:

d1 $ slow 4 $ s "loop"

So if you record a recording of the length of one cycle, then a playback pattern of the length one is sufficient to hear a result.

I hope I could help :slight_smile:

4 Likes

Thanks so much for this I'm slowly getting it. something is definitely happening. If I run -

d1 $ slow 4 $ s "looper" # linput "0"

then clap 4 times and try to listen to it back using -

d1 $ slow 4 $ s "loop" # gain 2.5

I seem to only hear the first clap?

Or you may hear the end of the last clap. I also think that is what is happening here.

With this you overwrite your old buffer after 4 cycles:

d1 $ slow 4 $ s "looper" # linput "0"

But what you can try with pleasure is this

d1 $ slow 4 $ s "olooper" # linput "0"

With this you start the looper in overdub mode and the buffer is never overwritten. This way you don't have to struggle with the buffer being recreated.

1 Like

For a decent audio interface for £50 or under I think the only real option is Behringer.. E.g. Behringer U-Phoria UM2, or Behringer XENYX 302 USB.

Hi thanks so much. I have bought an interface (Behringer U-PHORIA UMC404HD). I have no idea how to use it with supercollider. I've plugged in a microphone to "input 1" on the interface. Shouldn't this just automatically play in supercollider as input 1? It seems to still be the computer microphone picking up the sound.

What operating system are you using? E.g. on a Mac you could just set it as default in system preferences, and then restart supercollider and it should pick it up. Under linux you could select it with qjackctl. I'm unsure about windows.

Directed here from @mrreason but not seeing info that addresses my question. I have an audio interface, a MOTU Ultralite AVB, that I can get running through SuperCollider but I have no idea how to set up its inputs to record my synths for live sampling.

Any wisdom would be appreciated.

I just thought something like this could be helpful for you:

I think we need your operating system for helping you first.

And I mentioned something like this

Ah, I'm on a Mac - Catalina OS. The MOTU is recognized by SC, but not on the server meter side of things. My Tidal output is coming out of it immediately though.

EDIT: Sorry, I'm not super familiar with SC or TidalCycles really - so maybe punching above my weight here. :slight_smile:

Absolutely no problem :slight_smile: But I think it's always worth to solve such issues. And other can learn from it too maybe!

One possible issue could be, that your interface is not set as the default device for recording. You could check this under "Audio-MIDI-Setup" (something like this).

For me this option looks like this:

1 Like

Ah, thank you!

So that's one step further than I was - it wasn't set up to be my default input. So the next step is how I set which of the 8 inputs for the live sampling?

This is the moment when the server meter comes into the game. You can check the input port number with you current input signal there.

If you applied the looper code in SuperCollider and you executed linput = pI "linput" in TidalCycles, then you can determine the input port in the code like:

d1 $ s "oloop" # linput "5"

Or even so:

d1 $ s "oloop" # linput "<0 5 7 4>"

Unfortunately my Digitone is being picked up by the Ultralite, but the server meter doesn't reveal anything differently.