sc3+teensy 녹음기 만들기

워크샵때 한 노브 두개와 버튼 하나로 만든 녹음기를 sc3로 만들었어요.
버퍼의 사용과 미디통신에 대한 코드가 되겠네요.
sc3 저처럼 가물가물하신분들 보면서 복습을!!

teensy 업로드코드는 저번 MaxMSP랑 같아요. 업로드코드 아래에서 받으실수 있습니다.

다운로드


// 4초짜리 버퍼만들기
b = Buffer.alloc(s, 44100 * 4.0, 1);   

// 녹음할 신스데프 
(
SynthDef(\recBuf,{ arg out=0, bufnum=0;
	var in;
	in = AudioIn.ar(1);
	RecordBuf.ar(in, bufnum);
}).load(s);
)

// 재생할 신스데프
(
SynthDef(\player1,{ arg out=0,bufnum=0, rate=0, nob2=0; 
	var playbuf, trig;
	trig = Impulse.kr(nob2);  
	playbuf = PlayBuf.ar(1,bufnum,BufRateScale.kr(bufnum) * rate,trig,0, 1);
	FreeSelfWhenDone.kr(playbuf); 
   Out.ar(out, playbuf);
}).add;
)

// 포스트창에 틴지가 뜨는지 확인 
(
MIDIClient.init;
MIDIClient.sources.size.do({ |i|
		MIDIIn.connect(i, MIDIClient.sources[i]);
});
)

// 틴지와 미디통신
(
      var noba, nobb; // 노브 2개
      var but1; // 버튼 하나 
      var r1, r2, m1, m2;
    
// 노브1은 재생 신스데프 rate의 연결되어 있다
m1 = ControlSpec(-1, 2, \lin); 
r1 = CCResponder({ |src, chan, num, val|
	  if(num==1) {
     val = val / 127;
     z.set(\rate, m1.map(val));
} }, nil, nil, nil);  

// 노브2은 재생 신스데프 nob2와 연결되어 있다
m2 = ControlSpec(0.0, 3.0, \lin); 
r2 = CCResponder({ |src, chan, num, val|
    if(num==2) {
    val = val / 127;
    z.set(\nob2, m2.map(val));
}}, nil, nil, nil);  

// 버튼 누르고 있는 상태를 유지하면서 녹음4초, 떼면 녹음 끝 
MIDIIn.noteOn = { | port, chan, num, val |
	if (num ==60)
	 {  x = Synth(\recBuf, [\out, 0, \bufnum, b.bufnum]);
	    z = Synth(\player1); }
	 };
MIDIIn.noteOff = { | port, chan, num, val |
	if (num ==60)
	 { x.free; }    
    }
)

Advertisements