이번 장에서는 키보드로 연주할 수 있는 피아노를 만들어 보겠습니다. 악기와 볼륨을 선택할 수 있고 해당 건반이 선택되었을 때 음계를 보여 줍니다. 키보드는 a(도), s(레), d(미), f(파), g(솔), h(라), j(시), k(도)로 매치됩니다.

사용자 삽입 이미지


1. 스프라이트 생성

아래와 같이 피아노와 음계 스프라이트를 생성합니다. 이미지는 아래의 압축파일을 다운로드 받으신 후 사용하시면 됩니다.

사용자 삽입 이미지


각 음계 스프라이트들을 마우스로 드래그 하여 아래와 같이 해당 건반위에 위치하게 합니다.

사용자 삽입 이미지
 

2. 스크립트

1) 메시지 생성
사용자 삽입 이미지
이전 장에서 처럼 broadcast 블럭의 화살표를 클릭한 후, 'new..'를 선택하여 좌측과 같이 각 음계의 메시지를 생성합니다.

도는 높은 도와 낮은 도 두개가 있기 때문에 높은 도는 'do2'로 지정합니다.




2) 음계 스크립트
모든 음계 스크립트는 아래와 같이 동일합니다. 한가지 다른 점은  [when i receive [message]] 블럭의 메시지에 각 음계의 메시지(do, re, mi, pa...)가 들어 갑니다. 아래는 도 스크립트이며 각 음계마다 아래와 같이 스크립트를 작성하며 메시지(do, re, me..)를 음계에 맞게 수정합니다.
사용자 삽입 이미지

이 스크립트가 하는 일은 간단합니다. 시작되면 [hide]로 음계 이미지를 숨깁니다. 그런 후에 [when i receive [message]] 에서 각 건반의 메시지를 받을 경우에 0.5초간 보여 준 후 다시 숨깁니다. 위의 do 메시지는 사용자가 키보드에서 'a'를 눌렀을 경우에 발생 합니다.

3) 피아노 스크립트
a. 변수 생성
Varaibles의 [Make a variable]을 클릭하여 instrument, volume, oldInstrument, oldVolume 변수를 각각 생성합니다. instrument는 현재 선택된 악기를 저장하며, voloume은 말 그대로 현재 볼률을 저장합니다.

oldInstrument, oldVolume은 각각 이전의 볼륨과 악기를 저장합니다. 사용자에 의해 instrument, volume이 변경되었는지의 검사를 위해서 사용됩니다. 아래의 스크립트에서 forever 블럭 내부를 보시면 용도를 알 수 있습니다.

사용자 삽입 이미지

b. 시작시 초기화
[set volume to (50)] 현재 볼륨을 중간(50)으로 설정합니다.
[set instrument to (1)] 현재 악기를 1로 선택합니다.
[set oldVolume to (volume)] oldVolume을 Volume과 같게 만듭니다.
[set oldInstrument to (instrument)] oldInstrument를 Instrument와 같게 만듭니다.

사용자 삽입 이미지
[set instrument to [값]]의 입력창내의 화살표를 클릭하시면 좌측과 같이 128가지의 선택 가능한 악기들이 나옵니다. 이 악기중 하나를 선택할 수 있습니다.

이 프로그램에서는 1~100까지의 악기만 선택할 수 있습니다.


c. 무한루프
forever 내에서는 현재 볼륨(volume)과 악기(instrument)가 사용자에 의해서 변경되었을 경우 볼륨과 악기를 다시 설정합니다. 설정 후에는 변경된 값들을 다시 old 변수들에 저장하여 같은 값을 다시 지정하지 않도록 합니다.

d. 사용자 입력 처리
사용자가 건반에 해당되는 키를 눌렀을 때는 아래와 같은 명령이 실행됩니다.

[play note [값] for (0.3) beats] note 다음에 오는 값은 음의 높이를 설정합니다. 48(낮은 도)부터 반음을 포함하여 1씩 증가 됩니다. beats 앞의 값은 음의 길이를 설정합니다. 여기서는 0.3으로 설정했습니다. 더 짧게 끝낼려면 0.3보다 작은 값을 입력합니다.

그후에 [broadcast [메시지]]를 이용하여 각각의 메시지를 보냅니다. 이 메시지를 받은 각 음계의 스프라이트들은 잠시 나타났다 사라지게 됩니다.

이제 완료되었습니다. 시작버튼을 클릭하여 테스트를 하여 봅니다.
사용자 삽입 이미지
캔버스 내의 instrument와 volume값을 변경하여 실행해 봅니다. 좌측 하단의 동그란 버튼을 드래그 하면 값들이 변경됩니다.

사용자 삽입 이미지
사용자 삽입 이미지
변수를 더블클릭하면 좌측과 같이 모양이 차례대로 변경됩니다.


모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. 홈피북스 2008.08.06 18:58  댓글주소  수정/삭제  댓글쓰기

    프로그램에 관심있는 어른이지만 따라하니까 너무 재밌습니다.
    그런데 왜 소리가 나지 않는지 궁금합니다. 제가 잘못했는지 싶어 올려놓은 파일을 다운받아 실행해도 역시 소리가 나지 않습니다.
    너무 귀찮게 하는 것은 아닌지?

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2008.08.07 10:50 신고  댓글주소  수정/삭제

      전혀 귀찮지 않습니다. :) 혹시 마우스로 클릭하신 것 아닌지요? a, s, d... 등 키보드 입력만 받기 때문에 마우스에는 반응하지 않습니다.

  2. 홈피북스 2008.08.13 17:50  댓글주소  수정/삭제  댓글쓰기

    아닙니다.
    마우스가 아닌 키보드를 이용해 연주하면 도레미파솔라시도 음계 표시는 나오지만 소리가 전혀 나오지 않습니다. 제 컴퓨터만 그런 것인지? 아니면 또 다른 이유가 있는지 궁금합니다.
    귀찮을 수도 있는 질문인데 친절한 답변에 감사드립니다.

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2008.08.14 11:50 신고  댓글주소  수정/삭제

      홈피북스님의 댓글을 보고 저도 윈도우와 다른 맥에서 실행을 해 보았는데 정상적으로 작동하였습니다. 그래서 홈피북스님의 컴퓨터에서 안되는 정확한 이유를 찾을 수가 없네요.

      혹시 캡스락이 켜져 있거나 키입력이 한글로 되어 있는지 확인해 보시고요. 그도 아니면 스크래치는 실행되는 해당 스크립트의 둘레에 하얀선이 생깁니다. 키를 눌러 보시고 각 부분별로 동작을 하는지 확인해 보셔야 할 것 같습니다.

  3. 홈피북스 2008.08.14 13:34  댓글주소  수정/삭제  댓글쓰기

    감사드립니다.
    문제로 지적한 내용을 모두 확인하면서 해 보았지만 여전히 소리는 나지 않습니다. 캡스락, 한글 키 입력에서 생기는 문제도 아니고, 또 해당 키를 눌렀을 때 해당하는 부분이 실행된다는 뜻으로 하얀 테두리까지 잘 생깁니다. 그런데 이상하게 소리만 안들리니 조금 답답하네요.
    제가 사용하는 컴퓨터만의 문제일 수 있으니 다른 컴퓨터로 테스트를 해 보겠습니다.
    좋은 강의에 감사드립니다.

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2008.08.15 16:01 신고  댓글주소  수정/삭제

      [play] 블럭 부분이 실행되는데 소리가 안나신다니 참 이상한 일이네요.

      로컬에서 실행하는 다른 스크래치 프로그램들도 다 소리가 안나는지 여부와 간단히 프로젝트를 만들어 [play] 명령에 소리가 나는지 확인해 보셔야 할 것 같습니다.

      꼭 성공하시길 바랍니다. :)