______________________________________________________________________________________________________________________________
매일 아두이노 코딩이나 하는 주제에 무슨 음악 얘기냐고 의아해 할 수도 있을 것이다. 하지만 사람들간에 음악에 대한 능력 차이는 있겠지만 그래도 사람이라면 다 조금씩은 음악에 대한 감각은 어느 정도 있다고 볼 수 있을 것이다. 여기에 소개하는 연주법을 알게 된 것도 비록 하루 전이지만 도대체 누가 이런 연주법을 왜 창안하게 되었는지 체크해 보게 되었다.
Wikipedia를 검색해 본 결과 Steven Reich 라는 1936년생의 미국의 유명 작곡가임이 체크되었다. 음악에 대해서 다소 무식하기 때문에 고작 아는 음악가라곤 청소차 후진 송의 작곡가인 베토벤 정도인데 Steven Reich는 현대 미국 음악의 현존하는 명인으로서 일종의 프로세스적인 기법으로 유명하다.
Steven Reich 가 창안했다고 하는 PianoPhase 라는 기법은 쉽게 말해서 두 명의 피아노 연주자가 각각 조금 차이나는 템포로 동일 곡을 연주하게 됨에 따라 일어나는 음악 효과에 관한 것이다. 템포 차이를 미묘할 정도로 작게 두어야 함에 유의하여 실제 코드에서 분당 템포를 80과 81로 두고 2회 반복하였다.
즉 아두이노 또는 Processing에서 동요를 코딩해서 들어보면 대단히 단조로운 느낌을 떨칠 수 없다. 비록 단순한 연주를 위한 코딩 작업이긴 하지만 Processing 의 sound.cipher에서 제공하는 PlayPhase와 아울러 Steven Reich 의 PianoPhase 라는 기법을 적용해 감상해 보기로 하자. 비록 음악 분야에서 무지하긴 하지만 나 자신이 들어봐도 완전히 다른 음악 연주를 듣고 있다는 느낌을 지울 수 없는 듯하다.
물론 sound.cipher 라이브러리에 PianoPhase 라는 예제가 있긴 하지만 음악에 대한 기초가 부족한 관계로 연주 효과를 체크하기가 어려웠다는 느낌이 들었는데 이 코드에 엄마야∼ 누나야∼ 곡을 넣고 들어본 결과 아하! 라는 느낌이 들었다. 일단 유튜브 동영상을 통해 감상해보기로 하자.
코드는 사이트에 첨부해 두었으니 각자 실행해 보고 수정해 보기 바란다.
//PianoPhase_Mother_Sister_01
import arb.soundcipher.*;
SoundCipher part1 = new SoundCipher(this);
SoundCipher part2 = new SoundCipher(this);
void setup() {
size(800,800);
part1.tempo(80);
part2.tempo(81);
part1.repeat(2);
part2.repeat(2);
part1.pan(10);
part2.pan(120);
float[] pitches = { 62, 67, 65, 67, 65, 67, 62, 62, 60, 62, 65, 60, 62, 67, 70, 69, 67, 72, 70, 69, 67, 65, 62, 65, 67, 67, 55, 62, 62, 60, 67, 62, 67, 69, 70, 69, 67, 65, 67, 62, 67, 72, 70, 69,67, 65, 62, 65, 69, 65, 67};
//float[] dynamics ={100,120,100,100,100,120,100,100,100,120,100,100,100,120,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100 , 100,100,100,100,100,100,100,100,100,100,100,100,100,100};
float[] durations={ 1,0.5,0.5, 1,0.5,0.5, 1, 1,1.5,0.5,0.5,0.5, 3, 1,0.5,0.5, 1,0.5,0.5, 1, 1,1.5,0.5,0.5,0.5, 3, 1, 1, 1, 1, 1, 1,0.5,0.5,0.5,0.5,0.33,0.33,0.33, 3, 1, 1, 1, 1, 1, 1,1.5,0.5, 0.5,0.5, 3};
float[] dynamics = new float[pitches.length];
//float[] durations = new float[pitches.length];
for(int i=0; i<pitches.length; i++) {
dynamics[i] = random(40) + 70;
// durations[i] = 0.25;
}
part1.playPhrase(pitches, dynamics, durations);
part2.playPhrase(pitches, dynamics, durations);
}
void draw() {
fill(color(random(256), random (256), random(256)));
rect(random(800), random(900), random(400), random(400));
delay(1000);
}
void stop() {
part1.stop();
part2.stop();
}//End
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
클레멘타인 Processing sound.cipher용 편곡,연주 Random Visualization (0) | 2018.07.17 |
---|---|
Processing sound.cipher 그래픽 건반 예제 (0) | 2018.07.17 |
엄마야∼ 누나야 Processing sound.cipher용 편곡,연주 Random Visualization (0) | 2018.07.15 |
Processing 클라이언트에 의한 Ethernet 웹서버 Red & Blue LED analogWrite 밝기 제어 (0) | 2018.07.12 |
Processing 클라이언트에 의한 Ethernet 웹서버 Red & Green LED ON OFF (0) | 2018.07.11 |