2. 마이크로파이선 명령어 알아보기1(음악, 버튼)
이 활동은 마이크로파이선의 다양한 명령어 중 청각적 실행을 위한 명령어인 음악과 버튼 명령어를 알아보기 위한 활동 차시이다. 이 활동을 통해 여러분들은 마이크로파이선의 음악과 버튼 명령어 대해 이해하고 이를 어떻게 활용해야 할지 생각해 볼 수 있게 될 것이다.
【활동목표】
1. 마이크로파이선의 다양한 명령어에 대해 알 수 있다.
2. 예제를 통해 음악(Music) 명령어의 기능을 알 수 있다.
3. 예제를 통해 버튼(Button) 명령어의 기능을 알 수 있다.
1뮤직(Music)
뮤직(Music) 명령어는 마이크로비트에 내장된 멜로디와 음표, 톤 등을 실행시키는 명령어이다. 1차시에서 제시된 환경이 구축되었다면 여러분들은 다음의 활동을 통해 내장된 멜로디와 음표 작성을 통한 동요 만들기, 톤 작성을 통한 화음 만들기 활동을 할 수 있을 것이다. 또한 친구와의 코드 작성을 통해화음이 들어간 노래도 실행할 수 있을 것이다.
- micro:bit 1 set(1set는 마이크로비트 본체 1개, micro USB(5핀) to USB 선 1개로 구성)
- 악어 클립 전선 2개
- 이어폰 혹은 피에조 버저 1개(다른 사람과 함께 화음을 연주하기 위해서는 피에조 버저를 준비한다.)
가. 내장된 멜로디 연주하기
마이크로비트에는 다양한 내장되어 있는 노래들이 있다.
내장되어 있는 멜로디를 입력하기 위한 프로그램은 다음과 같다.
from microbit import *
import music
music.play(music.NYAN)
1차시에서 마이크로파이선 명령어 입력 방법을 연습할 때 사용한 코드와 같다. 다른 것은 4번째 코드 줄의 (music.NYAN)만 다르다. 마이크로비트에 내장되어 있는 내장 멜로디를 실행시키기 위해서는 마지막 코드 줄의 music. 뒤에 멜로디 제목만 바꿔 주면 된다.
마이크로비트에 내장되어 있는 멜로디 록은 다음과 같으니 한 번씩 실행해 보길 추천한다.
music.DADADADUM
music.ENTERTAINER
music.PRELUDE
music.ODE
music.NYAN
music.RINGTONE
music.FUNK
music.BLUE
music.BIRTHDAY
music.WEDDING
music.FUNERAL
music.PUNCHLINE
music.PYTHON
music.BADDY
music.CHASE
music.BA_DING
music.WAWAWAWAA
music.JUMP_UP
music.JUMP_DOWN
music.POWER_UP
music.POWER_DOWN
나. 나만의 음악 만들기(음정)
이번에는 기존에 내장된 멜로디가 아닌 나만의 음악을 만들어 보고자 한다. 음정을 활용한 나만의 만들기를 하고자 한다. 음정은 두 음의 높이의 간격을 말한다. 이는 여러분이 알고 있는 음표들을 통해 음표들의 높이와 간격을 이용한 음악 만들기이다. 음악은 음표로 구성되어 있다. 각 음표에는 계이름(예. C# 또는 F)과 옥타브(MicroPython에 음을 높이거나 낮추라고 말함) 및 지속시간(시간이 얼마나 오래지속되는지)이 있다.
그럼 마이크로파이선에서 음표의 구성요소인 계이름과 옥타브, 지속시간이 어떻게 실행되는지 알아보겠다.
① 계이름은 다음과 같이 제시된다.
: 도는 C, 레는 D, 미는 E, 파는 F, 솔은 G, 라는 H, 시는 I이다.
② 옥타브는 숫자로 표시된다.
: 0은 가장 낮은 옥타브이다. 4는 중간 C를 포함하고 8은 가장 높은 음이다.
③ 지속시간은 숫자로 표시된다.
: 기간의 값이 높을수록 지속 시간이 길어진다. 이러한 값은 서로 관련되어 있다. 예를 들어 기간 4는 기간 2만큼의 두배가 지속된다. (지속시간은 2의 n승으로 표시한다. 예를 들어 2, 4, 8, 16, 32, 64, 128…)
그렇다면 마이크로파이선에서 음표의 형태에 대해 알아보자.
각 음표는 다음과 같이 일련의 문자로 표현된다.
"[음표][옥타브]:[지속시간]"
예를 들어, “C4:4”는 “도”음이 중간음의 높이로 4동안 지속되는 음표라는 뜻이다.
그렇다면 다음의 멜로디를 만들어 보도록 하자.(옥타브는 중간으로 지속시간은 (숫자)로 지정)
도(4), 레(4), 미(4), 도(4), 도(4), 레(4), 미(4), 도(4), 미(4), 파(4), 솔(8), 미(4), 파(4), 솔(8)
멜로디를 잘 작성하였는가? 다음의 정답과 비교해 보기를 바란다.
"C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4", "E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"
그렇다면 위의 코드를 마이크로비트에서 실행시키기 위한 마이크로파이선 코드에 대해 알아보도록 하자.
마이크로비트에서 실행시키기 위한 마이크로파이선의 프로그램 코드는 다음과 같다.
from microbit import *
import music
tune=["C4:4", "D4:4", "E4:4", "C4:4", "C4:4", "D4:4", "E4:4", "C4:4", "E4:4", "F4:4", "G4:8", "E4:4", "F4:4", "G4:8"]
music.play(tune)
내장된 멜로디 코드와 같지만 음표의 경우 일정한 문자에 저장을 시키고 이를 music.play(문자)의 형태로 실행시켜야 한다. 여기에서는 tune이라는 문자로 저장하고 실행시켰다.
<주의할 점>
마이크로파이선은 이러한 멜로디를 단순화하는 데 도움을 준다. Tune의 처음과 끝에 옥타브와 지속시간 값을 제시하면 그 사이에 있는 멜로디는 옥타브와 지속시간 값을 기억한다. 결과적으로 위의 예는 다음과 같이 다시 작성할 수 있다.
import music
tune=["C4:4", "D", "E", "C", "C", "D", "E", "C", "E", "F", "G", "E", "F", "G:8"]
music.play(tune)
옥타브와 지속시간 값이 어떻게 변할 때만 변하는지 주목하자. 타이핑이 훨씬 간단하고 읽기가 더 쉽다.
1
다음의 동요를 마이크로비트로 만들어 보아라.(옥타브는 4로 표현하며, 지속시간은 4분음표는 4, 2분음표는 8로 표시한다.)
[그림 06] 반짝반짝 작은 별 악보
1
코드 정답 예시from microbit import *
import music
tune=["C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "G4:4", "G4:4", "F4:4", "F4:4", "E4:4", "E4:4", "D4:8", "C4:4", "C4:4", "G4:4", "G4:4", "H4:4", "H4:4", "G4:8", "F4:4", "F4:4", "E4:4", "E4:4", "D4:4", "D4:4", "C4:8"]
music.play(tune)
이번에는 음정이 아닌 음조을 만들 수 있다. 음조는 소리의 높낮이와 길이의 어울림을 의미한다. 예를 들어, 경찰 사이렌 효과를 만드는 방법은 다음과 같다.
from microbit import *
import music
while True:
for freq in range(880, 1760, 16):
music.pitch(freq, 6)
for freq in range(1760, 880, -16):
music.pitch(freq, 6)
프로그램을 실행해 보았나? 경찰 사이렌이 소리가 들리는가? 그렇다면 위의 코드가 어려울 수도 있는데 이에 대한 설명은 다음과 같다. 위의 예제에서 range 함수는 숫자 값 범위를 생성하는 데 사용된다. 이 숫자는 소리의 음조를 정의하는 데 사용된다. 범위 함수의 세 숫자는 시작 값, 끝 값 및 단계 크기이다. 그러므로 범위의 첫 번째 시작은 “880~1760 사이의 숫자 범위를 16단계로 생성”한다. 범위의 두 번째 용도는 “1760에서 880 사이의 값 범위를 -16단계로 생성한다.”이다. 이것은 우리가 사이렌과 같은 음조로 위아래로 움직이는 다양한 주파수를 얻는 방법이라고 할 수 있다. 그리고 사이렌은 영원히 지속되어야 하기 때문에 반복 함수(while)에 싸여 있다.
여기서 중요한 부분은 반복 함수(while)에 새로운 종류의 반복 함수(for)를 넣었다. 이는 “반복되는 함수의 범위 내에서 일부 활동을 수행하라는 의미”이다. 위의 예제에서는 “지정된 주파수 범위의 각 주파수에 대해 해당 주파수의 음조를 6밀리 초 동안 재생한다”라고 의미하고 있다.
2버튼(Button)
버튼(Button) 명령어는 마이크로비트에 있는 a 버튼과 b 버튼을 입력하는 수단으로 사용하기 위한 명령어이다. 마이크로파이선의 코드를 마이크로비트로 옮겼을 때 바로 실행되는 것이 아닌 입력장치를 통해 입력이 되었을 때 실행될 수 있도록 하기 위한 명령어이다.
- micro:bit 1 set(1set는 마이크로비트 본체 1개, micro USB(5핀) to USB 선 1개로 구성)
- 악어 클립 전선 2개
- 이어폰 혹은 피에조 버저 1개(다른사람과 함께 화음을 연주하기 위해서는 피에조 버저를 준비한다.)
지금까지 우리는 마이크로비트가 무언가를 하도록 만드는 코드를 만들었다. 이를 출력이라고 한다. 그러나 우리는 마이크로비트에 반응하는 장치가 필요하다. 그런 것들을 입력이라고 한다. 기억하기는 쉽다. 출력은 장치가 현실로 나오게 하는 것인데 입력은 현실의 행동이 장치로 들어가는 것이라고 생각 하면 된다. 마이크로비트 입력의 가장 확실한 방법은 A와 B로 표시된 두 개의 버튼이다. 어쨌든 버튼을 누르는 활동에 반응하기 위해서는 마이크로파이선이 필요하다.
내장된 멜로디를 이용하여 다음과 같이 프로그램을 작성해 보도록 하자.
from microbit import *
import music
while True:
if button_a.is_pressed():
music.play(music.WEDDING)
elif button_b.is_pressed():
music.play(music.BIRTHDAY)
sleep(100)
입력과 출력을 위해서는 반복 함수(while)이 필요하다.
파이선 명령어에서도 배웠지만 반복 함수에는 while과 for가 있다. 파이선에서 for 함수는 “~동안 반복하여 실행하라”라는 의미이고, while 함수는 “해당되는 조건 ‘무엇’을 반복하여 실행하라”라는 의미였듯이 마이크로파이선에서도 두 함수는 같은 의미의 명령어라고 생각하면 된다.
while 명령의 기본 구조는 다음과 같다.
while 판단조건:
반복 실행할 내용
while 명령 구조에 의해 위의 예제는 “판단 조건(버튼 a를 누른다면)이 True인 경우 판단 조건을 반복한다.”라는 의미이다. 그렇기 때문에 버튼 a를 누를 때 웨딩 음악이 나오게 된다.
9번째 라인의 elif의 경우 위의 내용이 아니라면 다음의 조건을 실행하라는 명령이다. 그렇기 때문에 버튼 a를 누르지 않았다면 버튼 b를 눌렀을 때 생일파티 음악이 나오게 된다.
그렇기 때문에 위와 같이 내장된 멜로디를 활용하여 버튼 A를 눌렀을 때 웨딩 음악이 나오도록 버튼 B를 눌렀을 때 생일파티 음악이 나오도록 제시하였다.
1
a 버튼에 “C4:4”, b 버튼에 “C4:16”을 입력시켜 모스부호 SOS를 완성시켜라.
(SOS 모스부호는 짧은 버저 3번, 긴 버저 3번, 짧은 버저 3번이다.)
[그림 07] 모스부호 해독표
from microbit import *
import music
tune1=["C4:4"]
tune2=["C4:16"]
while True:
if button_a.is_pressed():
music.play(tune1)
elif button_b.is_pressed():
music.play(tune2)
sleep(100)
위와 같이 프로그램을 작성한 뒤 a 버튼을 3번, b 버튼을 3번, a 버튼을 3번 누르게 되면 SOS 모스부호가 입력된다.