13. 간단한 멜로디 연주하기¶
🎯 이 장에서 배우는 것¶
- [ ] 음계와 주파수의 관계를 이해할 수 있다
- [ ] 리스트로 여러 음을 저장할 수 있다
- [ ] for 반복문으로 멜로디를 연주할 수 있다
📚 핵심 개념¶
개념: 음계와 주파수¶
피아노 건반을 누르면 각 음마다 다른 높이의 소리가 나죠? 이 "높이"가 바로 주파수입니다.
도레미파솔라시도, 각 음에는 정해진 숫자가 있어요:
| 음 | 도 | 레 | 미 | 파 | 솔 | 라 | 시 | 높은도 |
|---|---|---|---|---|---|---|---|---|
| 주파수(Hz) | 262 | 294 | 330 | 349 | 392 | 440 | 494 | 523 |
숫자가 클수록 높은 음이 납니다. 이 숫자들을 리스트에 저장하고 for문으로 하나씩 연주하면 멜로디가 완성됩니다!
flowchart LR
A[리스트에 음 저장] --> B[for문으로 반복] --> C[🎵 멜로디 연주!]
🔨 따라하기¶
Step 1: 음계 리스트 만들기¶
"도레미파솔"을 저장해봅시다.
import machine
import time
buzzer = machine.PWM(machine.Pin(15))
# 도레미파솔 주파수를 리스트에 저장
melody = [262, 294, 330, 349, 392]
리스트 melody에 5개의 음이 순서대로 저장되었습니다!
Step 2: for문으로 연주하기¶
# 리스트의 음을 하나씩 꺼내서 연주
for note in melody:
buzzer.freq(note) # 음 높이 설정
buzzer.duty_u16(3000) # 소리 켜기
time.sleep(0.3) # 0.3초 유지
buzzer.duty_u16(0) # 소리 끄기
time.sleep(0.1) # 음 사이 간격
buzzer.deinit()
print("연주 완료!")
실행 결과:
🎵 도-레-미-파-솔 멜로디가 들립니다!
연주 완료!
📝 전체 코드¶
import machine
import time
buzzer = machine.PWM(machine.Pin(15))
# 학교종 앞부분: 솔솔라라 솔솔미
school_bell = [392, 392, 440, 440, 392, 392, 330]
for note in school_bell:
buzzer.freq(note)
buzzer.duty_u16(3000)
time.sleep(0.3)
buzzer.duty_u16(0)
time.sleep(0.1)
buzzer.deinit()
print("학교종이 땡땡땡!")
⚠️ 주의할 점¶
음 사이에 끊어주기를 잊지 마세요!
# ❌ 끊김 없이 연결되면 음 구분이 안 됨
buzzer.duty_u16(3000)
time.sleep(0.3)
# 바로 다음 음...
# ✅ 음 사이에 잠깐 쉬어주기
buzzer.duty_u16(0) # 소리 끄기
time.sleep(0.1) # 잠깐 쉬기
✅ 점검하기¶
- "도"의 주파수는 몇 Hz인가요?
정답 확인
262Hz입니다.- 리스트의 음을 하나씩 연주하려면 어떤 문법을 사용하나요?
정답 확인
for 반복문을 사용합니다. `for note in melody:`- 좋아하는 멜로디를 연주하려면 무엇을 바꾸면 될까요?
정답 확인
리스트 안의 주파수 값들을 원하는 음의 숫자로 바꾸면 됩니다!🔗 다음 장 미리보기¶
축하합니다! 🎉 다음 시간에는 나만의 악기 프로젝트를 만들어봅니다. 버튼을 누르면 각각 다른 음이 나오는 미니 피아노, 어떨까요?