콘텐츠로 이동

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)       # 잠깐 쉬기


✅ 점검하기

  1. "도"의 주파수는 몇 Hz인가요?
정답 확인262Hz입니다.
  1. 리스트의 음을 하나씩 연주하려면 어떤 문법을 사용하나요?
정답 확인for 반복문을 사용합니다. `for note in melody:`
  1. 좋아하는 멜로디를 연주하려면 무엇을 바꾸면 될까요?
정답 확인리스트 안의 주파수 값들을 원하는 음의 숫자로 바꾸면 됩니다!

🔗 다음 장 미리보기

축하합니다! 🎉 다음 시간에는 나만의 악기 프로젝트를 만들어봅니다. 버튼을 누르면 각각 다른 음이 나오는 미니 피아노, 어떨까요?