1단계: 만들어 보세요.
프로젝트 소개
옥타브 음정을 전체적으로 올리거나 내리는 방법을 사용해서 micro:bit 전자 기타를 개선해 보세요.
설명
- 유선 헤드폰이나 스피커를 micro:bit 에 연결하면 소리를 들을 수 있습니다.
- 알루미늄 호일 조각을 micro:bit 의 핀들과 연결합니다. 전자 기타 1, 전자 기타 2 프로젝트에서 연결했던 것과 같은 방법으로 연결하면 됩니다.
- 이 번 프로그램에서는 출력할 음정과 박자를 하나 하나씩 순서대로 사용하는 것이 아니라, 멜로디에 들어있는 각 음정의 진동수(frequency)를 사용합니다. 음정의 진동수는 F(파), A(라), C(도), E(미) 등과 같은 변수에 정수값으로 저장됩니다.
- 1번 핀, 2번 핀, GND 핀에 연결된 알루미늄 호일에 손을 대면, 화음 코드를 구성하는 음들을 하나씩 순서대로 출력할 것입니다. 이번 프로젝트에서는 출력되는 화음 코드를, A 버튼을 눌러 (진동수를 1/2배로 만드는 방법으로) 한 옥타브씩 내려 저음으로 바꿔 출력하거나, B 버튼을 눌러 (진동수를 2배로 만드는 방법으로) 한 옥타브씩 올려 고음으로 바꿔 출력할 수 있습니다.
- 음정의 높이인 진동수(frequency)를 2배 올리면 한 옥타브씩 올라갑니다.: 예를 들어, 가운데 라(A) 음의 진동수는 440Hz(헤르츠) 이며, 높은 라(A)의 진동수는 880Hz 입니다. 헤르츠 단위는 1초에 진동하는 소리의 횟수를 의미하며, 440 Hz 는 1초에 440 번 소리가 진동한다는 것을 의미합니다. 이 원리는 기타 악보를 보고 음을 연주할 때에도 적용됩니다. 기타 목에 있는 여러 위치를 눌러 진동하는 기타 줄의 길이를 바꾸면, 기타 줄이 위 아래로 진동하는 진동수가 바뀌기 때문에 원하는 음으로 바꿔가며 출력할 수 있는 것입니다.
- A 버튼을 누르면 각각의 음정 변수에 저장되어있는 진동수 값들을 1/2배로 만들고, B 버튼을 누르면 각각의 음정 변수에 저장되어있는 진동수 값들을 2배로 만듭니다. 그렇게 하면, 모든 음정들을 전체적으로 한 옥타브씩 내리거나 한 옥타브씩 올리는 효과로 나타납니다.
준비물
- micro:bit 와 배터리 팩 (옵션)
- 유선 헤드폰, 부저, 앰프 스피커
- 악어 집게선 5개
- 전자 기타나 전자 키보드를 만들기 위해 필요한 종이 판지, 알루미늄 호일, 글루 건, 가위
2단계: 프로그래밍 해보세요.
1from microbit import *
2import music
3F = 349
4A = 440
5C = 523
6E = 659
7
8while True:
9 if pin1.is_touched():
10 music.pitch(int(F), 500)
11 music.pitch(int(A), 500)
12 music.pitch(int(C), 500)
13 if pin2.is_touched():
14 music.pitch(int(A), 500)
15 music.pitch(int(C), 500)
16 music.pitch(int(E), 500)
17 if button_a.was_pressed():
18 F = F / 2
19 A = A / 2
20 C = C / 2
21 E = E / 2
22 if button_b.was_pressed():
23 F = F * 2
24 A = A * 2
25 C = C * 2
26 E = E * 2
27
3단계: 더 좋게 만들어 보세요.
- 기타 악기 모양으로 판지를 잘라내고 거기에 micro:bit 를 붙이면, 마이크로비트 기타를 들고 서서 연주할 수 있습니다.
- 옥타브를 너무 높게 올리거나, 너무 낮게 낮추면 프로그램이 원하는 대로 제대로 동작하지 않을 수 있습니다. 너무 낮은 진동수의 소리나 너무 높은 진동수의 소리는 사람의 귀로 들을 수 없기 때문입니다. 그런 현상이 나타나지 않도록 프로그램을 수정해 보세요.
- micro:bit 를 기울이는 방법을 사용해서 빠르기(bpm)를 더 빠르게 하거나 느리게 만들어 보세요.
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.