How Do I Record 'Silently'?

Hi all,

I’m new to sc (see note below) and am currently trying to record incoming audio to disc. I have a question that is really basic, but a quick answer would save me ages trying to work it out from the docs. I play the audio coming in from a mic like this:

(
ServerOptions.inDevices.postln;  
s.meter;   
SynthDef(\helpAudioIn, { |out|
    var input = AudioIn.ar(2); 
    Out.ar(out, CombN.ar(input * -25.dbamp, 0.2, 0.2, 0.01))
}).play
)

You can see that I’m putting delays on the outputted signal. That’s to prevent feedback into the mic.
I then record the audio to disc something like this;

r = Recorder.new(s);
r.record(<path to file>, duration:30, numChannels:1)

My question is, what do I need to change so that the input is not outputted again but goes to a buffer, which is then used by Record to create the sampled recording on disc?

Later on I will be adding functions to play back the recordings from the disc in the usual way, piping the results to one of my output devices, but right now I need the audio coming in from the mic to go somewhere where it is available to record but isn’t one of the output devices.

Apologies if that seems really basic. I did work with Supercollider more than 15 years ago, and am just in the first few days of getting back into it, so any help would be greatly appreciated.

Andy

you want to use a bus that you’re not monitoring -

store a Bus

~recordBus = Bus.audio(s, numChannels:1)

play yr synth out that Bus:

Synth(\helpAudioIn, [ \out, ~recordBus.index ])

then record the output of that bus

r.record( <path>, bus: ~recordBus.index, numChannels:1)

(you may or may not need the .index anymore but I’m on my phone so can’t check!)

NB that is all for mono, for stereo or quad or whatever you need to change the values for numChannels when instantiating yr Bus and when calling record on yr Recorder.

Finally, check out help for DiskOut and RecordBuf

… and welcome to the Forum!

1 Like

Many thanks for this. It took me a little while to test it as I was having some hardware issues, but I’ve now done as you suggest and it works perfectly.

~recordBus = Bus.audio(s, 1);

SynthDef.new(\audioInForSampler, { | out |
    Out.ar(out, CombN.ar(SoundIn.ar() * -2.dbamp))
}).add;
~recordSynth = Synth(\audioInForSampler, [\out, ~recordBus.index]);

~recorder = Recorder.new(s, 1);
~recorder.record(p, bus: ~recordBus, duration:30, numChannels:1)

So thanks again !

1 Like