필자는 예전에 부저장치를 이용한 라즈베리파이로 구동 하는 '부저 피아노' 를 연습용 프로그래밍 개발로 내놓은 적이 있다. [바로가기]

당시 포스팅의 목적은 라즈베리파이의 유용성과 파이썬 프로그래밍의 유용성을 알리기 위함이 목적 이었다면 이번 포스팅은 파이썬 그 자체만의 유용성을 알리고자 하는 목적이 될 것이다.

이번 프로그래밍 가이드는 순수히 파이썬만 활용하고 gui 디스플레이 기반의 유명한 교육용 게임 제작 모듈인 'pygame' 을 적극적으로 활용할 것이다.

그리고 해당 모듈을 활용하기 위해서는 모듈을 다운받아 파일 시스템에 적용 시켜야 한다.

pygame 모듈을 활용하여 키눌림과 키올라감을 감지하는 이벤트 처리와 동시에 음악을 재생하는 모듈도 pygame으로 활용하기로 한다. 

리눅스 우분투라면 간단히

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>



user@user-test:~$ sudo apt-get install python-pygame


-> 로써 모듈을 바로 설치하여 프로그래밍 할 수 있다.




혹은 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 에 접속하여 자신의 시스템에 맞는 모듈을 직접 다운받아

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


user@user-test:~$ sudo pip install <파일명.whl>


-> 로써 모듈을 설치 한다.




다음으로는 소리를 재생할 음악파일을 다운 받는다. 

음악소스 파일은 망태기님 블로그의 음원 http://blog.daum.net/_blog/BlogTypeView.do?blogid=0S5D7&articleno=854 을 그대로 활용한다.



-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 터미널에서 바로 파일명을 지정하여 다운받자.


user@user-test:~$ wget -O 1.mp3 https://t1.daumcdn.net/cfile/blog/186170454F44FE8911

user@user-test:~$ wget -O 2.mp3 https://t1.daumcdn.net/cfile/blog/156322454F44FE8A0F

user@user-test:~$ wget -O 3.mp3 https://t1.daumcdn.net/cfile/blog/1765AC454F44FE8B0C

user@user-test:~$ wget -O 4.mp3 https://t1.daumcdn.net/cfile/blog/116018454F44FE8C13

user@user-test:~$ wget -O 5.mp3 https://t1.daumcdn.net/cfile/blog/14605A454F44FE8D12

user@user-test:~$ wget -O 6.mp3 https://t1.daumcdn.net/cfile/blog/12586D454F44FE8E18

user@user-test:~$ wget -O 7.mp3 https://t1.daumcdn.net/cfile/blog/1658CC454F44FE8F1C

user@user-test:~$ wget -O 8.mp3 https://t1.daumcdn.net/cfile/blog/125876454F44FE901E



소스코드는 다음과 같다.

              Source_File name : py_piano.py           |           Type : python             |                        |           


# -*- coding:utf-8 -*-
import pygame, time

from pygame.locals import *
pygame.init()	#pygame 라이브러리를 로드 한다.

display_screen = pygame.display.set_mode((815, 85)) # 디스플레이 창 크기 설정

pygame.display.set_caption('MINI PYTHON PIANO')	# 디스플레이 이름

pygame.mouse.set_visible(1)	# 마우스 커서 활성화

white = (255, 255, 255)	# 색 지정

black = (0, 0, 0)

display_font = pygame.font.Font('/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf', 32) # 폰트 지정

text = (u"키보드 1~8까지 꾸욱 눌러 보세요. \n Esc키를 누르면 종료 됩니다.")	# 유니코드 인코딩으로 텍스트 설계

display_text = display_font.render(text, True, black, white)	# 설게한 텍스트를 랜더링 한다.

display_text_vis = display_text.get_rect()	# 디스플레이에 표시

display_text_vis.center = (340, 34)	# # 디스플레이에 표시되는 위치 설정

def mp(file):	# 소리 파일을 불러 오는 파일을 불러오는 함수
	pygame.mixer.music.load(file)
	
while True:

	display_screen.fill(white)	# 디스플레이의 배경색 지정
	
	display_screen.blit(display_text, display_text_vis)	# 디스플레이에 텍스트 표시
	
	pygame.display.update()	# 디스플레이를 계속 업데이트 한다.

	for event in pygame.event.get():	# 이벤트 시작
      
      
		if (event.type == KEYDOWN):	# 키를 눌렀을 경우 mp함수가 음악 파일을 불러오고 pygame모듈이 재생
			if (event.key == pygame.K_1):

				mp("1.mp3")
				pygame.mixer.music.play()
 
      
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_2):

				mp("2.mp3")
				pygame.mixer.music.play()
     
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_3):

				mp("3.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_4):

				mp("4.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_5):

				mp("5.mp3")
				pygame.mixer.music.play()
			
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_6):

				mp("6.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_7):

				mp("7.mp3")
				pygame.mixer.music.play()
		if (event.type == KEYDOWN):
     			if (event.key == pygame.K_8):

				mp("8.mp3")
				pygame.mixer.music.play()
				
		if (event.type == KEYUP):	# 키가 올라갔을때(땠을 때) 재생을 중단 시킴


     			pygame.mixer.music.stop()
      
      
		if (event.type == KEYUP):	# esc 키를 누르고 땠을때 종료 실행
      			if (event.key == pygame.K_ESCAPE):

      				pygame.quit()
	
		if event.type == QUIT:	# 창을 종료 했을때 정상 종료 수행
			pygame.quit()




-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 코딩이 완료 되었다면 실행해 보자.


user@user-test:~$ python py_piano.py



키보드의 키 1~8(도레미파솔라시도) 를 눌러 보고 눌렀다 때 보면서 음의 길이도 조절이 되는지를 테스트해 보자.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         






+ Recent posts