Receives an arate signal that has been mixed onto a channel of a buss.
Note
Up to Csound 6, this opcode was called MixerReceive.
Syntax
asignal=mixerreceive(ibuss,ichannel)
asignalMixerReceiveibuss,ichannel
Initialization
ibuss -- The number of the buss, for example the number of the instrument receiving the signal.
ichannel -- The number of the channel. Each buss has nchnls channels.
Performance
asignal -- The signal that has been mixed onto the indicated channel of the buss.
Use of the mixer requires that instruments setting gains have smaller numbers than instruments sending signals, and that instruments sending signals have smaller numbers than instruments receiving those signals. However, an instrument may have any number of sends or receives. After the final signal is received, mixerclear must be invoked to reset the busses to 0 before the next kperiod.
Examples
instr220; Master output; It applies a bass enhancement, compression and fadeout; to the whole piece, outputs signals, and clears the mixer.a1=mixerreceive(220,0)a2=mixerreceive(220,1); Bass enhancemental1=butterlp(a1,100)al2=butterlp(a2,100)a1=al1*1.5+a1a2=al2*1.5+a2; Global amplitude shapeenv:k=linseg(0.0,p5/2.0,p4,p3-p5,p4,p5/2.0,0.0)a1*=enva2*=env; Compressiona1=dam(a1,5000,0.5,1,0.2,0.1)a2=dam(a2,5000,0.5,1,0.2,0.1); Remove DC biasblocked1:a=dcblock(a1)blocked2:a=dcblock(a2); Output signalsout(blocked1,blocked2)mixerclear()endin
Here is a complete example of the mixerreceive opcode. It uses the file Mixer-modern.csd
<CsoundSynthesizer><CsOptions>; Select audio/midi flags here according to platform; Audio out Audio in-odac ; -iadc ;;;RT audio out; For Non-realtime ouput leave only the line below:; -o Mixer.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1instr1att:k=expon(0.01,p3,1);create an attackOut:a=poscil(0.7,440)mixersetlevel(1,3,att);impose attack on the gain levelmixersend(Out,1,3,0);send to channel 0endininstr2Out:a=vco2(0.5,110);saw wavemixersetlevel(2,3,0.25);set level to .25 of vco2mixersend(Out,2,3,1);send to channel 1endininstr3;mix instr.1 and 2 with reverbgain1:k=mixergetlevel(1,3);get level form buss 3gain2:k=mixergetlevel(2,3);get level form buss 3a1=mixerreceive(3,0);receive channel 0a2=mixerreceive(3,1);receive channel 1Out:a=a1*gain1+a2*gain2;mix themoutL:a,outR:a=reverbsc(Out,Out,0.85,12000);add a nice reverbout(outL,outR)mixerclear()endin</CsInstruments><CsScore>;f1 0 4096 10 1i102i202i308;reverb stays on for 8 sec.e</CsScore></CsoundSynthesizer>
Here is a complete example of the MixerReceive opcode. It uses the file Mixer.csd
<CsoundSynthesizer><CsOptions>; Select audio/midi flags here according to platform; Audio out Audio in-odac ; -iadc ;;;RT audio out; For Non-realtime ouput leave only the line below:; -o Mixer.wav -W ;;; for file output any platform</CsOptions><CsInstruments>sr=44100ksmps=32nchnls=20dbfs=1instr1kattexpon0.01,p3,1;create an attackaoutposcil.7,440,1MixerSetLevel1,3,katt;impose attack on the gain levelMixerSendaout,1,3,0;send to channel 0endininstr2aoutvco2.5,110;saw waveMixerSetLevel2,3,.25;set level to .25 of vco2MixerSendaout,2,3,1;send to channel 1endininstr3;mix instr.1 and 2 with reverbkgain1MixerGetLevel1,3;get level form buss 3kgain2MixerGetLevel2,3;get level form buss 3a1MixerReceive3,0;receive channel 0a2MixerReceive3,1;receive channel 1aout=a1*kgain1+a2*kgain2;mix themaoutL,aoutRreverbscaout,aout,0.85,12000;add a nice reverboutsaoutL,aoutRMixerClearendin</CsInstruments><CsScore>f104096101i102i202i308;reverb stays on for 8 sec.e</CsScore></CsoundSynthesizer>