본문 바로가기
파이썬

[파이썬] 파이썬으로 메트로놈 구현하기

by I!i어★떤☆날★에Ι!i 2023. 7. 15.
반응형

파이썬으로 음악 관련 프로그램을 공부해 보고 있다. 그중 하나로 메트로놈 제작을 스터디해 보았다. 메트로놈은 모두 알고 있듯이, 악기를 연주할 때 박자를 맞추는데 도움을  주는 기계이다. 일정한 리듬을 생성하여 연주자가 그 리즘에 맞춰 연주할 수 있도록 도와준다. 피아노 학원에서 많이 만날 수 있는 친구이다.

 

이러한 메트로놈을 파이썬으로 구현하는 방법을 알아보자.

 

* ChatGPT 이용 파이썬을 이용한 메트로놈

 

일단 chatGPT를 통해서 간단히 구현 코드를 받아 실행시켜 보았다. 자세히 물어볼 수록 원하는 정답을 더 잘 얻을 수 있다.

chatGPT_메트로놈코드_만들기
chatGPT 메트로놈코드 만들기

 

생각보다 잘 작동하는 것을 알수 있었다. 컴퓨터로 주파수를 발생시켜서 소리로 출력할 수 있도록 도와준다.

* 메트로놈 실행 파이썬 코드

import time
import winsound

def metronome(bpm, beats):
    interval = 60 / bpm  # 박자 간 시간 간격 계산

    for _ in range(beats):
        winsound.Beep(440, 100)  # 클릭 소리 발생 (440 Hz, 0.1초)
        time.sleep(interval - 0.1)  # 박자 간 시간 간격 대기

    print("메트로놈 종료")

# 테스트
bpm = 120  # 분당 박자 수
beats = 16  # 박자 수
metronome(bpm, beats)

 

소리가 조금 거슬리긴 하지만 잘 동작한다. 너무나 간단한 코드라서 음악 관련 라이브러리의 동작을 쉽게 이해할 수 있어서 좋았다. 하지만 비트를 바꿀 때마다 값을 일일이 코드에서 바꿔서 다시 실행해야 하는 것은 여간 불편한 일이 아니다.

 

 

반응형

 

  

 

* GUI가 포함된 메트로놈

 

인터넷 검색을 통해서 GUI로 구현된 메트로놈 코드를 확인할 수 있었다.

 

비프음으로 : https://github.com/Kwisses/Metronome/blob/master/main.py

 

GitHub - Kwisses/Metronome: Desktop metronome written in Python with Tkinter

Desktop metronome written in Python with Tkinter. Contribute to Kwisses/Metronome development by creating an account on GitHub.

github.com

 

실행시키면 tkinter를 이용하여 GUI를 구성해서 BPM 등을 수정할 수 있도록 만들어져 있다. 속도와 박자를 수정할 수 있어서 편리했다.

python_metronom
Python metronom 실행

 

지금까지 컴퓨터의 비프음을 통해서 메트로놈을 실행시키는 코드들에 대해서 알아보았다. 소리를 내주는 모듈에 주파수를 할당하고 분당 박자 속도를 설정하면 손쉽게 메트로놈을 구현할 수 있었다.

 

하지만 컴퓨터의 비프음은 기계적인 소리라서 조금 거슬린다. 이럴 경우에 직접 녹음한 소리를 이용하여 메트로놈을 구현하는 방법도 알아보자.

 

 

 * wav 파일을 이용한 메트로놈 

 

simpleaudio라는 모듈을 통해서 박자를 녹음한 웨이브 파일(. wav)을 재생(play)시키는 방식으로 구현되어 있다.

 

wav파일로 : https://medium.com/@jackhuang.wz/building-a-metronome-in-python-c8e16826fe4f

 

Building A Metronome In Python

Slow and steady. These are the most common words you heard from almost all tutors when you get started to learn guitar. As for me, keeping…

medium.com

 

 

조금 복잡하지만, 순차적으로 상세히 알려줘서 이해하기 좋았다. 앞으로 더 다양한 음악 관련 코드를 스터디해 보고 싶다.

 

 

반응형

댓글