Updates from 1월, 2012 댓글 스레드 토글 전환 | 키보드 단축키

  • morogado January 5, 2012 7:57 pm 퍼머링크 | 응답  

    슈콜녹음2 

    
    // 2초짜리 버퍼만들기 
    
    b = Buffer.alloc(s, 44100 * 2.0, 1);   //객체  
    
    b.plot;
    b.bufnum;
    b.numFrames;
    b.close;
    b.free;
    
    // 녹음할 신스데프 
    (
    SynthDef(\recBuf,{ arg bufnum=0;
    	var in;
    	in = AudioIn.ar(1);
    	
       RecordBuf.ar(in, bufnum, doneAction:2, loop:0);
    }).play;
    )
    
    
    // 재생할 신스데프
    (
    SynthDef(\player1,{ arg out=0, bufnum=0, rate=1; 
    	var playbuf;
       playbuf = PlayBuf.ar(1,bufnum, BufRateScale.kr(bufnum) * rate, loop:0);
    	FreeSelfWhenDone.kr(playbuf);
       Out.ar(out, playbuf);
    }).play;
    )
    
    // 파일로 저장
    b.write("/Users/anibae/Desktop/bbb.wav", 'WAV', 'int24')
    
    // 신스데프 폴더  ~/Library/Application Support/Supercollider/synthdefs/
    // 신스데프 뒤에 붙는 메세지에 대해서
    // load : 파일로 만들고 서버에 보낸다.
    //  send : 파일로 만들지는 않고 보낸다.
    // play : 아예 신스를 만든다. 
    
    
     
  • morogado January 5, 2012 7:46 pm 퍼머링크 | 응답  

    슈콜녹음1 

    //하드에다 녹음하기 
    //맥의 경우 ~/Music/SuperCollider Recordings 에 자동저장됨.
    
    Server
    s.prepareForRecord("/Users/anibae/Desktop/recotest/abc.aiff");
    s.recSampleFormat = "int 16";
    s.recChannels = 1;
    //sc 지원하는 샘플포맷
    // "int8", "int16", "int24", "int32", "float", "double", "mulaw", "alaw"
    //sc 지원하는 파일포맷
    //"aiff", "next", "wav", "ircam"", "raw"
    
    
    //목소리 받기위한 신스데프 
    (
    SynthDef(\myvoice,{ arg out=0;
    	Out.ar(out,
    		AudioIn.ar(1)
    	)
    }).load(s);
    )
    
    v = Synth(\myvoice)
    v.free;
    
    // 녹음버튼을 이용하기 누르면 됨
    
    
    // 코드로 녹음하기 
    
    (
    Server.local.record;
    v = Synth(\myvoice)
    )
    
    (
    v.free;
    Server.local.stopRecording;
    )
    
    
     
  • joynimm December 10, 2011 11:55 am 퍼머링크 | 응답
    태그: JITlib,   

    Just in Time (기초반 2) 

    
    신스를 만드는 방법 두가지
    1) function.play
    {SinOsc.ar !2}.play // 실행시키면
    //post창에 신스가 하나 생겼음을 나타난다.
    
    우리가 function.play로 신스를 만들라고 요청하면
    서버(신스 만드는 공장)는 만든다
    
    방금 만든 신스는 뭘까...
    스팸깡통처럼 생긴 신스가 있다고 해보자.
    한번 생기면 밖에서 조절할 수 있는 단추도 없는...
    하물며 끄는 단추도 없다...
    
    변수에 저장하면 끄거나 할 수 있다.
    x={SinOsc.ar!2}.play; 
    x.run(false)
    x.run(true)
    x.free
    x.run(true)
    
    x.release(2)//느리게 끄거나
    
    이 신스에 단추와 노브를 달아서 소리 높낮이, 크기를 조절하고 싶으면 매개변수(argument)를 
    넣어서 만들어 달라고 해야한다.
    x={|frequency=3, amp=0.2|	SinOsc.ar(frequency*100,0,amp)!2}.play
    
    x.set(\frequency,5, \amp, 1 )
    x.set(\frequency,3, \amp, 0.1 )
    
    x.release(2)
    
    요약) {SinOsc.ar}.play  라는 것은 "소리를 내주세요"가 아니라 신스를 만들라고 신스공장(서버)에 주문하는 것입니다.
    밖에서 조절하고 싶으면 argument를 넣어주어야 합니다.
    아규먼트는 set 메시지로 정해줍니다.
    
    2) Synth.new
    Synth.new(\default,[freq: 900])//new는 생략가능
    SynthDef라는 설계도가 신스공장에 있기 때문에 모델명(신스이름)만 불러주면 바로 만들어줍니다.
    
    많이 재사용되는 신스는 신스데프로 정의해 놓고 쓰면 편리합니다. 본질적으로 1번 방법(function.play)과 같습니다.
    
    ===========
    
    x={|nopi=440,kugi=0.05| LFSaw.ar(nopi,0,kugi)!2}.play;
    x.free;
    크기에 LFO를 걸어보자
    
    x={|nopi=440,kugi =0.1|                                  LFSaw.ar(nopi,0,SinOsc.ar(1,0,kugi))!2}.play;
    	
    x.set(\nopi,1000)
    x.set(\nopi,1100)
    x.set(\nopi,1200)
    x.set(\kugi,0.01)
    x.set(\kugi,0.2)
    이렇게 해서 만들어진 신스로는 크기에 걸린 lfo의 크기를 바꾸는 볼륨은 있어도 그 파형을 바꿀 수 없다.
    스팸캔 같이 생긴 박스에 볼륨 두개... 하나는 높이, 다른하나는 크기를 바꿀 수 있다.
    
    x={|nopi=440,kugi=0.1| 
    LFSaw.ar(nopi,0,kugi)!2}.play;
    실행하면 에러다. 아규먼트에 오실레이터를 사용할 수 없다.
    
    요점 : {SinOsc.ar}.play는 서버에게 하나의 신스를 만들어달라는 방법중에 하나이다.
    위의 신스는 아무런 단추없어서 밖에서는 조절할 수 없다.
    밖에서 조절하려면 arg를 달아야한다.
    arg를 달아서 외부에서 조종해도 박스내부의 배선은 바꿀 수 없다.
    
    굳이 하려면 이렇게 해야 하는데...
    1) Bus로 여러 신스를 연결하여 컨트롤
    Bus는 오디오신호나 컨트롤신호를 날라다 주는 것... 일단 전선으로 생각하시길...
    s.meter
    y = { Out.kr(10, SinOsc.ar(1)*400)}.play
    y = { Out.kr(11, LFNoise0.ar(4)*400)}.play
    y = { Out.kr(12, LFSaw.ar(1)*400)}.play
    y = { Out.kr(13, LFTri.ar(1)*400)}.play
    y.free
    x = {  | inputBus=10 |  LFSaw.ar(In.kr(inputBus))/10!2}.play
    
    x.set(\inputBus,10)
    x.set(\inputBus,11)
    x.set(\inputBus,12)
    x.set(\inputBus,13)
    
    2) 보다 빠르고 다이나믹하게 하려면 NodeProxy를 사용한다.(Just-in-time library)
     Proxy는 대리인이라는 실제 존재하지 않는 것을 사용하기위해 미리 자리 맡음하는 개념이다.
    
     제대로 공부하려면 꽤 양이 많지만 간단히 사용하여 코딩의 효율성을 높여보자.
     
     NodeProxy를 쉽게 사용하려면 ProxySpace로 들어가야한다.
     
     그전에 먼저 변수의 종류에 대해서 알아보자
     전역변수 : a, b, c, d,....
     로칼변수: var source...
     환경변수 : ~out (전역변수처럼 행동한다.)
    
     currentEnvironment.postln; // anEnvironment
    ~x; // access the enironment: there is nothing stored: nil
    ~x = 9; // store something
    ~x; 	// now 9 is stored
    ~x=~x + 100; // calculate with it
     currentEnvironment.postln; // anEnvironment
    
     p = ProxySpace.push(s)// proxyspace로 들어간다.
                   p.pop // 나올때는 pop
    ~out // ~를 붙이면 기존에는 환경변수가 되었으나 ProxySpace로 가면 NodeProxy로 인식된다.
    s.meter
    
    ~o.play
    ~o = {Pulse.ar([500,501])}
    
    ~o={LFSaw.ar(~f)*0.1}
    ~f={LFSaw.kr(1/5)*1199}
    p.fadeTime =1
    ~o.release
    
    ================ NodeProxy는 여러개의 오브젝트를 동시에 표현할 수도 있다.
    ~z.play
    ~z[0..3] = [ {SinOsc.ar(220) * 0.1 },
     { SinOsc.ar(220*2) * 0.08 }, 
     { SinOsc.ar(220*3) * 0.08 }, 
     { SinOsc.ar(220*4) * 0.04 }];
    
    ~z.stop
    ~z.play
    ~z.pause
    ~z.resume
    
    ~z[0]=nil
    ~z[1]=nil
    ~z[2]=nil
    ~z[3]=nil
    ~z=nil
    z.play
    ================시간 맞추기
    ~x.play
    ~y.play
    
    ~x={Pulse.ar(2)*SinOsc.ar(440)/10}
    ~y={Pulse.ar(3)*SinOsc.ar(880)/10}
    ==== 안맞아 시간이...
    ~x.stop;~y.stop
    ~x.clock = TempoClock.default; ~x.quant = 1.0;
    ~y.clock = TempoClock.default; ~y.quant = 1.0;
    위 실행후 다시하면 맞아...
    //p.clock = TempoClock.default; p.quant = 1.0; 이걸실행하면 전체 space에서 맞춰진다... 시간이...
    p.clear; // 모두지우기.
    
    //======= offset을 줄수도 잇다 [quant,offset]
    ~z.play; ~y.play;
    ~z = { Ringz.ar(Impulse.ar(2), exprand(300, 3400 ! 2), 0.08).dup * 0.2 };
    ~y.quant = [1, 0.3]; // offset of 0.3, quant of 1.0
    ~y = { Ringz.ar(Impulse.ar(1), 600, 0.05).dup };
    ~y.quant = [2, 1/3]; // offset of 1/3, quant of 2.0
    ~y = { Ringz.ar(Impulse.ar(0.5), 600, 0.05).dup };
    //==================================본인자체를 참조하기
    ~a.play// 
    ~a = { SinOsc.ar(~a.ar * 700 * 10+ [100, 102]*~c, 0, 0.1) };
    ~c=1
    ~c ={MouseX.kr(0.1, 10.10)}
    ~m={LFSaw.ar(0.1,mul:3.3).round(0.5)+(SinOsc.ar(0.003)*7)}
    ~a= { SinOsc.ar(~a.ar * 6000 * MouseX.kr(1, 2.10) + [100, 104], 0, 0.1) };//기존방법으로는 에러난다.
    p.pop
     
    
    
     
  • joynimm November 25, 2011 1:43 pm 퍼머링크 | 응답
    태그: JIT, ,   

    sc3 기초반 1 후기 

    오늘은 참석자가 저조했지만 새로오신 분이 와서 반가왔습니다.

    창균이형의 신스데프가 멋졌구요.
    ——————————————-
    SynthDef 복습과 Pbind를 이용해서 구린음악 만들기를 했습니다.

    아래가 기본형이고요.
    SynthDef(
    \이름,
    {Out.ar(버스번호,소리를 내는 함수)}
    )

    아규먼트(매개변수 또는 인자)는 외부에서 신스를 부를 때 높이나 크기등을 지정할 수 있는 것을 말합니다.
    이것을 넣으려면 arg를 사용합니다.
    또한 함수내에서 보기 편하게 하기 위해서 변수를 사용하는 법을 배웠습니다.
    ——————————————-

    Pattern은 슈콜의 꽃이라고 합니다.
    패턴을 쉽게 사용하는 것이 Pbind라는 것인데…
    Pattern을 Bind한다는 뜻인 듯…

    Pbind( \심벌, 값).play.
    이것이 기본형입니다.
    \심벌은 \키라고도 하는데
    음높이, 음길이, 음크기… 둥을 나타내고요…
    값은 말 그대로 값을 나타내는 것입니다.
    Pbind(\주파수, 400)
    이러면 주파수의 값이 400헤르쯔라는 것이고요.
    Pbind(\음길이, 1)
    이러면 음길이가 1초라는 것입니다.

    ——————————————–
    Pbind().play
    이렇게 해도 소리는 나는데요
    심벌과 값을 지정해주지 않으면 기본값이 적용됩니다.

    아래는 어제 배운 예제에요…

    =============================

    다음주는 각자 만든 신스데프하고
    아래의 Pbind예제를 변형해서
    구린 곡을 하나씩 만들어서 발표하는 시간을 갖겠습니다.

    ============================
    원래는 여기까지만 하고

    초보반의 관심사항을 순서를 정해서
    진행하려 했습니다만…

    다음주에는 just in time 비술을 알려드리고
    저의 강의는 끝맺을까합니다.

    just in time이란 sc에서 라이브 코딩을 보다 편하게 하기 위한 라이브러리인데요.
    원래는 고급반 내용입니다.

    바로 바로 소리를 바꿀 수 있기 때문에
    신스의 구성을 바로 바로 만들어 보거나
    곡의 진행을 바로 바꾸면서 효율성을 올릴 수 있기
    초보부터 알아두면 요긴하겠지요?

    예습은
    http://doc.sccode.org/Tutorials/JITLib/proxyspace_examples.html
    를 실행해보고 올 것…

     
    • ohnena 11월 26, 2011 12:06 오후 퍼머링크 | 응답

      감사합니다 이거 보면서 혼자 해봐야겠네요 ㅜ

    • joynimm 11월 26, 2011 12:34 오후 퍼머링크 | 응답

      승기님! 밑의 Pbind도 자습해보시고 구린거 하나 만들어보세요

      • ohnena 11월 26, 2011 12:47 오후 퍼머링크 | 응답

        네!! (근데 아래건 안구리네요 ㅎ) 알겠습니다

    • joynimm 11월 26, 2011 1:08 오후 퍼머링크 | 응답

      //======== Pbind key 기본값
      Pbind에서 심벌(key)의 값을 별도로 지정해주지 않았을 때의 적용되는 값 들입니다. 맨날 찾아놓고 어딨는지 찾곤했지요…

      \amp = 0.1, \db = -20, \degree = 0, \dur = 1, \freq = 261.62, \legato = 0.8, \midinote = 60,
      \note = 0, \octave = 5, \out = 0, \pan = 0, \root = 0, \scale = [0, 2, 4, 5, 7, 9, 11], \server =
      default, \velocity = 64, \instrument = default, \out = 0, \group = 0

  • joynimm November 24, 2011 8:07 pm 퍼머링크 | 응답
    태그: ,   

    Pbind와 구린음악 

    
    (
     SynthDef(
      \name, 
      { arg freq = 400;
    	  var signal;
    	  signal = LFSaw.ar([freq])*0.1;
         signal = signal * EnvGen.ar(Env.perc(0.01,1.5), doneAction:2);
         signal = Pan2.ar(signal, SinOsc.ar(10*SinOsc.kr(1/3)) );
    	  Out.ar(0,signal);
    	}
     ).play
    )
    
    x = Synth(\name, [\freq,500])
    
    /////////////////////////////////////
    
    (a = Pbind(
     //  \freq, Prand([400,500,600,700]*2,inf)
     // \note, 1
       \degree, Prand([1,2,3,4,5,6,7,8]-1, inf)
     , \dur, Pseq([1,2])
      //\instrument, \name
     , \strum,0.251
    );)
    
    a.play
    
    //////////////////////////////////
    //c = Prand([ [1,2,3,5,8,12,15] ]-1,1)
    c = [1,2,3,5,8,12,15,2+14,3+14,5+14];
    c.mirror2
    (
    Pseq(
    [
     Pbindf(a, \degree, c)
    //,Pbindf(a, \degree, c, \mtranspose, 7-1)
    ,Pbindf(a, \degree, c.mirror1, \mtranspose, 2-1)
    ,Pbindf(a, \degree, c.scramble, \mtranspose, 5-1)
    ,Pbindf(a, \degree, c.scramble.mirror2, \mtranspose, 2-1)
    ,Pbindf(a, \degree, c.scramble, \mtranspose, 5-1)
    ],inf
    ).play)
    
    
     
  • morogado November 24, 2011 3:05 pm 퍼머링크 | 응답
    태그:   

    Synthdef와 MIDI 연결하기 

    오늘 기초반때 할 것입니다. 신스데프를 미디키보드에 연결해서 한번 쳐보겠습니다.
    초간단한 트레몰로 사인 신스!!

    (
    SynthDef(\sine, {arg freq=440, trig;
    	var osc1, osc2, env, signal;
       osc1 = SinOsc.ar(freq,0,0.5);
       osc2 = SinOsc.ar(10,0,0.5);
       env = EnvGen.kr(Env.perc(0.3),trig);
       signal = (osc1*osc2)*env;
       Out.ar(0,signal!2);
       }).send(s);         		
    )
    
    
    MIDIClient.init; //현재 미디포트확인 
    MIDIIn.connect(1, MIDIClient.sources.at(1)); //두번째 연결된 것을 사용할것임
    
    (
    a=Synth(\sine);  
    MIDIIn.noteOn = {arg src, chan, num, vel;
    				a.set(\freq, num.midicps);
    				a.set(\trig, vel / 127 );
    			
    			};
    MIDIIn.noteOff = { arg src,chan,num,vel;
    				a.set(\trig, 0.0);
    			};
    			)
    
    
     
  • joynimm November 19, 2011 7:29 pm 퍼머링크 | 응답
    태그:   

    sc3 기초반 0 수업 후기 

    그제 배운 것
    1) 용법 : object.method(argument)
    2) 헬프창 여는 것
    3) 포스트창 보는 법
    4) Synth란?
    5) Ugen이란?
    6) SynthDef란?

    숙제
    1) Ugen을 이용해서 SynthDef하나 만들어보기

    • argument로 주파수 (freq)는 꼭 넣어봅시다.

    다음주 배울 것

    1) Pattern이란? Pseq
    2) Pbind란? 음높이, 길이, 세기 등을 어떤 값과 쌍으로 연결해 주는 것
    ex) (주파수, 400, 길이, 0.5)—> Pbind(\freq, 400, \dur, 0.5).play;
    요지는 값을 패턴으로 넣을 수 있다는 점
    3) 각자 만든 SynthDef를 손본다음에… 패턴을 이용해 구린 곡을 만들기

    —————————————–
    그 이후는 기초반이 스케줄을 잡고 돌아가면서 발표하면 좋겠습니다.

     
    • joynimm 11월 21, 2011 12:38 오전 퍼머링크 | 응답

      합정역과 망원역 사이입니다.
      메일주소 보내주시면 약도 보내드리겠습니다.
      6시 5분에 시작입니다.

  • morogado November 6, 2011 10:08 pm 퍼머링크 | 응답  

    sc3 튜토리얼 문서 3개 

    1. 조이랜드님 정리문서 (처음 입문할때 좋음,한글)
    2. ixi(주제별로 실용적 코드중심)
    3. 코틀(부연설명이 많고 많은 주제를 다루지는 않았음)

    이렇게 3개 문서파일입니다.
    다운로드

     
    • ohnena 11월 7, 2011 6:41 오후 퍼머링크 | 응답

      감사합니다~~!

      • joynimm 11월 10, 2011 2:17 오후 퍼머링크 | 응답

        ohenena님은 어떤 분이신지 궁금합니다.

        • ohnena 11월 11, 2011 4:59 오후 퍼머링크

          정승기입니다~~ 전에 모바일로 댓글을 몇개 적었는데 다 안올라갔었네요 ;

  • morogado November 5, 2011 1:51 pm 퍼머링크 | 응답
    태그:   

    Nick Collins’s Workshop 

    조금 된 자료지만 링크합니다.
    sc3 관련해서 무언가 찾으려 하면
    항상 이분이 쓰신 것들이 자주 나오네요.
    주제별 분류가 잘 되어 있습니다.
    실제 워크샵 자료니까 도움될것 같네요.
    언제가 우리도 sc3 워크샵을 할수밖에 없는 날이 오겠지요.

    http://www.informatics.sussex.ac.uk/users/nc81/courses/cm1/workshop.html

     
    • soundlake 11월 6, 2011 6:38 오후 퍼머링크 | 응답

      서브 페이지들 링크가 다 죽어 있는데요? ㅠㅠ
      워크샵의 구조는 굉장히 체계적이라는 느낌입니다.

      감사합니다. 🙂

      • morogado 11월 6, 2011 10:04 오후 퍼머링크 | 응답

        어 지금 메인페이지조차도 안열리네요. 얼마전까지 다 열렸는데.. 아깝네요.

        • joynimm 11월 10, 2011 2:25 오후 퍼머링크

          지금은 열리네요.

          전 웬지 닉의 것은 별로 땡기지 않네요
          개인적으로
          1) cottle
          2) ixi
          3) hutchins 내용은 부실하시지만 친절한 개념 설명
          http://sc3howto.blogspot.com/

        • joynimm 11월 10, 2011 2:26 오후 퍼머링크

          일본사람이 쓴 슈퍼콜리더일기도 좋은 것 같아요
          크롬 번역기로 돌려서 봄…

  • morogado October 31, 2011 5:30 pm 퍼머링크 | 응답  

    Quarks.gui 사용하기 

    몇 달전에 모임에서 아두이노와 sc3 통신을 한번 짧게 한적 있었지요.
    ArduinoSMS라는 것을 사용하기 무언가를 설치했어야 하는데요.
    그 때 등장한 Quarks를 기억하시나요?

    Quarks에는 sc3 기본설치외에 추가시키는 확장팩들을 모아둔 폴더라고 말할수 있는데요.
    다른 사람들이 뚜렷한 목적이 있는 것을 만들어 둔 것을 가져다가 쓸 수 있으니
    사용하면 좋을거 같아서 이번 기회에 한번 차분히 설치해 보았습니다(맥만 테스트해봤어요)

    1. 다운로드
    http://quarks.sourceforge.net
    여기가셔서 맨 아래에 Download GNU tarball를 클릭해서
    압축을 풉니다.

    2. 이 폴더를 그대로 이동합니다.
    저는 여기지만 Users/anibae/Library/Application Support/SuperCollider
    사람마다 틀립니다.자신의 홈폴더 Library/Application Support/SuperCollider
    정 모르겠으면 sc3에서 Platform.userAppSupportDir 실행하면 경로가 나옵니다.

    3. sc창에서 Quarks.gui 실행하면 드디어 창이 커다랗게 뜹니다.
    (조금 시각이 걸릴수 있음)

    4. 이제 그 중에서 자기가 원하는 것을 설치합니다.
    저는 서킷밴딩 효과가 나는 중간쯤에 있는 Bending을 선택하고 눌렀습니다.
    파란색이 되면 오른쪽 위쪽에 있는 save를 눌러줍니다.
    녹색으로 바뀝니다. 그러면 you should now recompile scaling 이라고 뜹니다.
    우리는 선택만 했지 그게 딱 설치가 되는게 아니라서 다시 sc3을 시작해야 합니다.
    서버만 껐다켜면 안되고요.
    사과키+Q 해서 sc3가 재시작하는 메세지가 post창에 뜨게 해야 합니다.
    (컴파일하기 위해서죠)

    5. 아래 그림에 보시면 옆에 help 버튼 누르고 코드 나오면 실행시킵니다.

    재미있는 소리가 나네요. 심심하실때 한번 해보시길~

     
c
새 글 작성
j
다음 글/다음 댓글
k
이전 글/이전 댓글
r
응답
e
편집
o
댓글 표시/숨기기
t
상위로 가기
l
로그인하기
h
도움말 표시/숨기기
shift + esc
취소