MSP Tut.14 Sampling: Playback with loops

Tutorial 14
Sampling: Playback with loops

Playing samples with groove~

groove~ object 는 buffer~를 통하여 소리를 재생할 때 아주 유용하게 쓰입니다. buffer~ 를 읽기 위하여 starting point, playback speed (앞뒤로) 그리고 샘플 내에서 반복구간의 설정등을 할수 있습니다. groove~ 는 buffer~ 로부터 패치의 연결없이 buffer~에 쓰인 이름으로 소리를 전달받습니다.

위의 예에서 토글 아래의 loop 1 은 looping을 작동시키며, playback speed 1 은 정상속도로 앞으로 연주하게 합니다.
loop start 와 end times 은groove~ 가860 milliseconds지점에 닿았을 때   572 ms 지점으로 돌아가 looping합니다.start time 은 반드시 음수나 양수로 되어야 하며 playback speed
는signal이어야만 합니다.  이것은 speed 가 계속적으로 왼쪽 inlet에 signal에 의해 변화한다는 것을 뜻합니다..
새로운 start time 이 받아질 때 마다 , groove~ 는 즉시 buffer~ 에 있는 시간지점으로 가서 계속 연주합니다.   groove~ 가 loop 1 을 받거나 startloop 를 받을 때, loop의 시작지접으로 가서 같은속도로 연주를 시작합니다. 이때 loop points 는 groove~ 가 거꾸로 연주될때에는 무시됩니다. 따라서 playback speed 가 음수로 주어질때에는 작동하지 않습니다. groove~ 를 멈추는 방법은 buffer~ 의 끝에 도달했을 때와 0의 속도를 입력받았을 때 입니다. tutorial patch에서 3개의 다른 buffer~ object가 AIFF 로 불러들여지기 때문에 하나의 groove~ object 는 샘플을 바꾸어가며 연주할 수 있습니다. buffer~에 주어진 이름이 바뀌면 groove~ 는 즉각적으로 들어오는 buffer~를 바꿉니다.

– preset 을 눌러 다른방법으로 샘플을 재생해 봅니다. 처음 preset은 “Off” button으로서 작용하며,다음의 3개의 presets 은 3개의 buffer~를 looping없이 원래의 속도로 재생합니다. Presets은 다른 속도, 버터 파일, 루핑의 선택등을 다양하게 선택할 수 있도록 해 줍니다.
– 자기 자신만의 패치를 직접 만들어 다양한 변화를 줄 수 있습니다.

groove~를 가지고 부드러운 loop을 만들고 싶다면 , loopinterp message 를 사용하여 loop의 끝을 crossfades 로 연결할 수 있습니다. (groove~ 의 help 를 참고하세요) 만약buffer~ 에 들어온 AIFF file 이 파일 자체의 loop points를 가지고 있다면 info~ object 를 통해서AIFF file 에 포함되어있는 loop points 의 정보를 받아서groove~로 직접 loop 의 start 와 end times 을 보낼 수 있습니다.

MSP Tut.13 Sampling: Recording and playback

1Tutorial 13
Sampling: Recording and playback

Sound input: adc~
Adc~는analog-to-digital conversion object입니다.  Dac~에서 우리는 ezdac~이라고 하는 interface를 사용하였는데, adc에서는 ezadc~를 사용합니다.

Adc~라 함은, 오디오 입력잭으로부터 소리를 받아(cd, tape, 마이크 등의 라인으로부터), 시그널로 출력해 보냅니다.
-Adc~오브젝트를 더블클릭하면, input source메뉴에서 원하는 장치를 선택할 수 있습니다.
-그림에서 토글박스를 활성화하면 오디오를 키게 됩니다. 다음그림에서는 원하는 레벨로 소리를 듣기 위하여 숫자박스를 적용시킨 것을 보여줍니다. (아울러 실험할때에 마이크와 스피커 간의 피드백이 생기지 않도록 주의하세요)

Recording a sound: record~
녹음을 하기 위해서는 buffer가 필요합니다. Buffer~는 녹음테입과 같은 역할을 한다고 생각하면 됩니다. 저장소이죠. Record~도 같은 역할을 하게됩니다. 녹음하는 소리가 record~의 inlet으로 들어가도록 설정해야합니다.(그림참조)

record~는 0이 아닌수가 들어오면 녹음을 시작하며, 0이 들어오면 끝냅니다. (토글) 위의 그림에서 buffer뒤에 쓰여져 있는 2000이란 숫자는 녹음의 길이를 결정해줍니다. 또한 Record에 있는 두개의 오른쪽 inlet에 시작과 끝지점을 직접 입력할 수 있습니다. 하지만 길이는 buffer~에서 정해진 숫자에 의해 판가름되지요. (즉. 만약 우리가 tape에 소리를 녹음하는데 60분짜리 테이프에 120분 녹음할수 없다는 뜻입니다.) 2000이란 숫자에서 2초동안 녹음이 가능하다는 것을 알수 있지요.

아래 패치에서는  2초후에 토글을 닫아버리는 패치입니다. 따라서 우리가 정확하게 2초후에 record~의 토글을 클릭하여 닫지 않아도 자동으로 꺼지는 장치이지요.(저는 이런 장치를 자유롭게 만들 수 때문에 맥스 패치가 좋아요!)

녹음이 끝나셨다면, buffer~를 클릭하여 wave가 들어와있는지 확인하세요.

Reading through a buffer~: index~
만약 buffer~로 녹음을 하였다면 다음과 같은 일을 할수 있습니다.
1. buffer~에 write메시지를 보내서 오디오 파일로 저장할 수 있습니다. (메시지 박스 사용)
2. 513 샘플로 이루어진 wavetable을 만들어 cycle~에 적용시킬수 있지요. (투토리얼 3 참고)
3. 또한 이 중 어느 섹션을 택하여 transfer 기능을 위하여 lookup~ 을 사용할 수 있구요 (투토리얼 12참고)
4. 또한 직접적으로 dac~로 연결해서 바로 출력할수도 있구요. (투토리얼 14)

index~는 신호를 입력한 후 sample number를 보여줍니다. Buffer에 있는 샘플을 쭉 읽어드린다음, 값을 출력합니다. Count~는 계속적으로 증가하는 수의 연속으로서, index가 buffer의 샘플을 읽을 수 있도록 해줍니다.

-play버튼을 눌러 buffer~에 있는 소리를 들어봅니다. Count로 들어가는 숫자박스는 시작하는 샘플번호를 다르게 할수 있습니다.

Variable speed playback: play~
Play~는 buffer~에 있는 신호값을 소리로 출력합니다. Index~와 다른점은, buffer에 있는 두개의 샘플값을 받았을 때 두 값 사이를 내삽한다는 것입니다. (인덱스는 하나하나 받아들였지만, play는 두개를 받아들이지요?)
예를들어 buffer에서 받을 소리를 어떤 속도로든 읽을 수 있습니다.  내삽값 때문에 index보가 더 질이 좋은 소리를 얻어 낼 수도 있겠지요. 다음 패치에서 line을 통하여 선형적으로 연결하는 모습을 보여줍니다.

위의 그림에서 첫번째 박스는 0에서 2000을 2000ms동안 연주하여라. 입니다. 즉 보통의 속도가 되겠죠.
두번째는 0에서 2000사이를 4초동안 연주하라 하니 속도가 두배로 늘어나겠죠 (느려짐)
세번째는 2배 빨라지구요.

이로서 투토리얼 13을 마칩니닷!

MSP Tut.12 Synthesis: Waveshaping

Table lookup: lookup~
waveshaping synthesis에서audio signal은lookup table에 접근하는데 사용된다. Lookuptable은 shaping function을 가진다. 입력신호의 각각 샘플값은 table에 저장된 값(숫자의 배열)을 조사(look up)하는데에 사용된다. Lookup table은 순서에 관계없이 어떤 값들을 포함하고있기 때문에, 선형범위에서의 값을( 예를들면 -1 에서 1까지) 비 선형(lookup에 저장되어있는게 무엇이든 간에)으로 mapping하는데 유용하다. Table 오브젝트가 lookup table의 예이다. Input에 수를 받으면(0~127) table에 저장되어있는 값이 무엇이든 access하는데 사용된다.

lookup~은 buffer~에 저장된 샘플을 lookup table로 사용하게 해준다. Lookup table은 -1에서 1까지의 범위에서 access된다. 만약 512의 샘플이 사용된다면, input값 범위 -1~0이 처음 256값으로 map되며, 0~1이 그 다음 256값으로 map된다. Lookup~은 그 두 값사이에 필요에 따라서 내삽값을 줄수 있다.

Lookup~의 상세
right inlet으로 받은 tablesize에서(1미만으로 주어야함) left inlet으로 받는 signal(숫자)를 middle inlet으로 받는수를 offset으로 하여 읽는다. Argument값은 buffer~에서 들어오는 이름이 쓰이며(즉 이미 존재하는 waveform이 들어오는것임) default는 위에서 말한것처럼 512 samples이다.

1. by band. : 미리 보내진 gtr512 aiff가 55의 frequency로 나가고 있는 신호에서, line에서 100ms의 시간으로 직접 입력한 숫자에 의해 waveshaping된다. lookup위의 *는 amplitude를 결정한다. 즉, cycle~의 amplitude는 lookup table의 scanning range에 의해 결정되어진다. 그 후 *~에서는 또 다른 기본  amplitude와 결합 한 후 출력한다.
2, by envelope : function table에서 읽혀진 수들이 amplitude에 적용된다.
3. by modulating wave (0.15와 1을 대입한 경우) “ 1이 cycle에서 0.45 amplitude와 결합하고, 다시 0.5와 결합한 cycle이 0.15의 depth로 50 ms와 line으로 결합한다. 즉, 1은 modulation rate로, 0.15는 modulation depth로 적용된다.