10. 나만의 뮤직박스
【파일구조】
c:\workshop\musicbox.py 1개
파이선에는 기본적으로 제공하는 다양한 종류의 함수들이 있다. 기본 함수 이외에도 다양한 함수를 사용하여 더 재미있는 프로그램을 만들 수 있다. 따라서 이번에 학습할 프로그램은 나만의 뮤직박스이다. 이 프로그램은 음악을 재생할 수 있는 프로그램으로써 그동안에 학습했던 내용을 가지고, 파이선으로 음악을 재생하는 방법을 학습하여 보도록 하자.
1음악 패키지 설치 및 임포트
파이선을 이용하여 컴퓨터에서 음악을 재생시키기 위해서는 음악 패키지를 설치한 후 음악 패키지 모듈을 임포트 시켜야 한다. 아래의 예문을 먼저 살펴보도록 하자.
# 음악 패키지 설치 및 임포트
from playsound import playsound
만약 음악 패키지 중 하나인 plysound 패키지가 설치되었다면 playsound 함수를 임포트 하기 위해서는 첫 부분에 예문처럼 입력해 주면 된다. 그러나 그전에 파이선에 패키지가 설치되어 있는지를 확인해 보아야 하고 패키지가 설치되어 있지 않다면 패키지를 설치하는 과정을 거쳐야 한다.
우선 pip에 대해서 알아야 봐야 하는데, pip은 파이선 모듈이나 패키지를 쉽게 설치할 수 있도록 도와주는 도구이다. pip을 이용해서 파이선 프로그램을 설치하면 의존성 있는 모듈이나 패키지를 함께 설치해 주기 때문에 매우 편리하다. 예를 들어 B라는 파이선 패키지를 설치하려면 반드시 A라는 패키지가 먼저 설치되어 있어야 하는 규칙이 있다고 할 때 pip을 이용하면 매우 편리하다. pip을 이용하여 B 패키지를 설치할 때 A 패키지가 자동으로 설치가 되기 때문이다. pip이 없었던 과거에는 이런 의존성들을 개발자가 미리 파악하고 설치해야 하는 불편함이 있었다.
파이선 3 버전을 사용하는 사용자는 pip이 이미 설치되어 있기 때문에 pip을 따로 설치할 필요가 없다.(파이선 2.7 버전 사용자는 pip이 자동으로 설치가 되지 않기 때문에 수동으로 pip을 설치해줘야 한다.)
파이선 터미널 창에 ‘pip install playsound’라고 입력하고 실행하면 설치가 진행된다.
pip install playsound
파이선 터미널 창에 ‘pip uninstall playsound’라고 입력하고 실행하면 삭제가 된다.
pip uninstall playsound
현재 파이선에 설치되어 있는 패키지를 확인하기 위해서는 ‘pip list’라고 입력하고 실행해 준다.
pip list
2음악파일 경로설정
# 음악파일 경로설정
m1=('c:/Users/user/Desktop/example/1-01.mp3')
m2=('c:/Users/user/Desktop/example/1-02.mp3')
m3=('c:/Users/user/Desktop/example/1-03.mp3')
m4=('c:/Users/user/Desktop/example/1-04.mp3')
다음으로는 미리 준비한 음악 4곡에 대한 경로를 설정해줘야 한다. 정확한 경로를 설정하기 위해서는 탐색기의 경로를 확인하거나 파일 속성에서 파일의 경로를 확인한 후 경로를 설정해준다. 이 과정에서 경로가 잘못 입력되어 프로그램이 실행되지 않는 경우가 많으니 주의해서 입력한다. m1~4까지 변수는 미리 선언하여 활용하면 매번 다시 경로를 적어야 하는 번거로움을 최소화할 수 있다.
다음의 코드는 이번에 배울 나만의 뮤직박스 개발하기 예제 코드이다. 나만의 뮤직박스 개발하기 예제 코드를 함께 해보기 위해서는 우선 음악파일(mp3) 4개가 필요하다. 개발하기 이전에 자신이 좋아하는 음악으로 준비하여 작업 폴더에 저장에 둔다.
3나만의 뮤직박스
가. 나만의 뮤직박스 프로그램
나만의 뮤직박스 프로그램을 만들기 위한 사전 준비가 끝났다면, 아래의 프로그램 코딩을 한 줄 한 줄 따라서 코딩하면 된다. 이 프로그램은 음악 패키지 모듈을 임포트 하여 모듈 안에 있는 함수를 사용하여 음악을 재생시켜주는 프로그램이다. 가장 먼저 나만의 뮤직박스 프로그램을 전체적으로 코딩한 후 하나씩 자세히 알아보도록 하자.
# 음악 패키지 설치 및 임포트
from playsound import playsound
# 음악파일 경로설정
m1=('c:/Users/user/Desktop/example/1-01.mp3')
m2=('c:/Users/user/Desktop/example/1-02.mp3')
m3=('c:/Users/user/Desktop/example/1-03.mp3')
m4=('c:/Users/user/Desktop/example/1-04.mp3')
# 음악 재생 안내문 출력하기
print("--------------------------")
print("- 나의 뮤직 플레이어 -")
print("- 1. 떴다떴다비행기 -")
print("- 2. 알파벳송 -")
print("- 3. 이야이야오 -")
print("- 4. 토이피아노 -")
print("-------------------------")
# 음악 재생 희망곡 입력받기
var1=int( ) # var1의 값을 정수형으로 입력
var1=input("어떤 음악을 재생할까요?") # var1의 값을 입력
# 음악재생하기
if '1' in var1: # var1의 값이 1인 경우
print('당신의 선택:', var1) # 출력
print('1번 노래를 재생합니다.') # 출력
playsound(m1) # m1 경로의 음악 재생
elif '2' in var1: # var1의 값이 2인 경우
print('당신의 선택:', var1) # 출력
print('2번 노래를 재생합니다.') # 출력
playsound(m2) # m2 경로의 음악 재생
elif '3' in var1: # var1의 값이 3인 경우
print('당신의 선택:', var1) # 출력
print('3번 노래를 재생합니다.') # 출력
playsound(m3) # m3 경로의 음악 재생
elif '4' in var1: # var1의 값이 4인 경우
print('당신의 선택:', var1) # 출력
print('4번 노래를 재생합니다.') # 출력
playsound(m4) # m4 경로의 음악 재생
else:
print('당신의 선택:', var1) # 출력
print('1~4번 중에 선택하여 주세요.') # 출력
나. 나만의 뮤직박스 프로그램 코딩 해설
1) 음악 패키지 임포트 및 음악 경로 설정
전체적인 프로그램을 코딩했다면, 가장 첫 줄부터 살펴보도록 하자. 첫 줄의 코딩은 음악 패키지를 임포트 하는 프로그램 코딩이 나온다. 음악 패키지 모듈의 이름은 playsound이며, playsound 안에 저장된 함수를 사용할 수 있다는 프로그램 코딩이다. 아래의 프로그램 코딩 부분을 보면 알 수가 있다.
from playsound import playsound # 음악 패키지 설치 및 임포트
m1=('c:/Users/user/Desktop/example/1-01.mp3') # 음악파일 경로설정
m2=('c:/Users/user/Desktop/example/1-02.mp3') # 음악파일 경로설정
m3=('c:/Users/user/Desktop/example/1-03.mp3') # 음악파일 경로설정
m4=('c:/Users/user/Desktop/example/1-04.mp3') # 음악파일 경로설정
그리고 다음에 나오는 프로그램 코딩은 음악파일 경로를 설정하는 프로그램 코딩이 나온다. 경로를 설정하기 위해서 각 변수를 선언하게 되는데, 경로를 저장하는 변수는 m1, m2, m3, m4 변수이다. 이 변수에 각 경로를 저장하게 되는데 m1의 경우 음악 파일의 경로는 “c:/Users/user/Desktop/example/1-01.mp3”과 같다. 만약 경로를 변경하고 싶다면, 경로의 위치 값을 변경하면 되는데, 예를 들어 d 드라이브 안에 음악 파일이 있다면, “d:\1-01.mp3”라고 프로그램 코딩을 하면 된다.
2) 음악 재생 안내문 출력
앞에서 음악 모듈 임포트와 음악 파일의 경로를 설정했다면, 음악 재생에 관한 간단한 안내문을 출력하여 사용자가 나만의 뮤직박스 프로그램을 사용할 수 있도록 도와준다. 아래의 음악 재생 안내문 출력하기 부분을 살펴보도록 하자.
# 음악 재생 안내문 출력하기
print("--------------------------")
print("- 나의 뮤직 플레이어 -")
print("- 1. 떴다떴다비행기 -")
print("- 2. 알파벳송 -")
print("- 3. 이야이야오 -")
print("- 4. 토이피아노 -")
print("-------------------------")
음악 재생 안내문 출력은 사용자 화면에 1~4번 곡을 선택할 수 있도록 내용을 출력하여 준다. 따라서 모든 코딩은 print() 함수를 사용하였고, 1번은 떴다떴다비행기, 2번은 알파벳송, 3번은 이야이야오, 4번은 토이피아노라는 글이 화면에 출력되게 된다. 따라서 사용자는 이 안내에 따라 음악을 선정하여 들을 수 있다.
3) 나만의 뮤직박스 실행
음악을 선택할 수 있도록 안내되었다면, 다음으로는 희망곡을 입력받아 재생하여 사용자에게 들려줄 수 있어야 한다. 아래의 프로그램 코딩은 희망곡을 입력받아 재생할 수 있는 코딩으로써 한 줄씩 자세히 알아보도록 하자.
# 음악 재생 희망곡 입력받기
var1=int( ) # var1의 값을 정수형으로 입력
var1=input("어떤 음악을 재생할까요?") # var1의 값을 입력
# 음악재생하기
if '1' in var1: # var1의 값이 1인 경우
print('당신의 선택:', var1) # 출력
print('1번 노래를 재생합니다.') # 출력
playsound(m1) # m1 경로의 음악 재생
elif '2' in var1: # var1의 값이 2인 경우
print('당신의 선택:', var1) # 출력
print('2번 노래를 재생합니다.') # 출력
playsound(m2) # m2 경로의 음악 재생
elif '3' in var1: # var1의 값이 3인 경우
print('당신의 선택:', var1) # 출력
print('3번 노래를 재생합니다.') # 출력
playsound(m3) # m3 경로의 음악 재생
elif '4' in var1: # var1의 값이 4인 경우
print('당신의 선택:', var1) # 출력
print('4번 노래를 재생합니다.') # 출력
playsound(m4) # m4 경로의 음악 재생
else:
print('당신의 선택:', var1) # 출력
print('1~4번 중에 선택하여 주세요.') # 출력
가장 먼저 희망 곡을 선택에 대한 값을 받기 위해서 var1의 변수에 값을 저장 받게 된다. 그런데 여기서 var1의 값은 숫자 값으로 입력받아야 하므로 “var1=int()” 먼저 선언한 후, 다음 프로그램 코딩에서 input()을 통해 값을 입력받아야 한다.
var1 변수에 값을 입력받았다면, 다음의 조건문에서 조건에 따라 음악을 재생시켜주게 되는데, 만약 var1 변수의 값이 1인 경우에는 “if ‘1’ in var1:”이 실행되어 조건문 안에 프로그램 코딩을 실행시키게 된다. 따라서 가장 먼저 실행되는 프로그램 코딩은 print() 함수의 내용인 “당신의 선택:1”이 출력되게 되며, 다음으로는 “1번 노래를 재생합니다.”라는 문구가 사용자에게 출력되게 된다.
print() 함수에 모든 내용들이 출력되고 나면, 다음으로 playsound() 함수가 호출되게 되는데, 이 함수는 가장 첫 줄에 코딩되었던 playsound 모듈 안에 있는 함수이다. 따라서 playsound 모듈을 임포트하지 않으면 사용할 수 없다. 그래서 가장 playsound 모듈을 임포트를 했기 때문에 이 함수를 사용할 수 있게 되는데 playsound() 함수 안에는 경로를 저장한 변숫값을 인자 값으로 넘겨주게 된다. 따라서 1번 곡의 경로 값을 가진 m1의 변수의 값을 playsound() 함수에 인자 값으로 넘겼을 경우에는 m1의 경로에 있는 음악 파일이 재생하게 된다.
이렇게 var1 변수의 값에 따라 음악을 선택하여 재생하게 되는데, var1변수의 값이 2인 경우에는 “elif ‘2’ in var1:” 조건문 안에 있는 프로그램 코딩이 실행하게 된다. 여기서도 마찬가지로 print() 함수 안에 모든 내용이 출력되게 된다. 따라서 “당신의 선택:2”와 “2번 노래를 재생합니다.”라는 내용이 출력되게 된다. 그리고 같은 방법으로 playsound() 함수가 사용되며, m2의 음악 파일 경로가 인자 값으로 사용되어 m2의 음악 파일이 재생하게 된다. 이처럼 var1의 값이 3과 4인 경우에는 각각 같은 내용을 출력하고 playsound() 함수에서 m3와 m4의 음악 파일 경로를 인자 값으로 보내, 각각의 음악 파일을 재생하게 된다. 그리고 마지막으로 음악 파일의 값이 1~4가 아닐 경우에는 else 조건문이 실행되어 “당신의 선택:”과 “1~4번 중에 선택하여 주세요.”라고 출력한 후 프로그램을 종료하게 된다.
여기서 나만의 뮤직박스 프로그램을 변형하여 프로그램 한다면, playsound() 함수를 연속으로 사용하여, 연속 재생을 할 수도 있으며, 반복문을 넣어 음악이 끝나고 나면 다시 선택하여 프로그램을 반복적으로 실행시킬 수도 있다.
지금까지 파이선을 활용하여 컴퓨터의 언어를 학습하여 보았다. 프로그램 언어는 외국어를 배우는 것과 비슷하여 시작이 어렵게 느껴질 수 있지만, 반복적인 학습과 창의적으로 자신이 원하는 프로그램을 코딩하고, 배워나간다면 무엇보다 재미있는 언어이다. 따라서 파이선을 입문 단계로 이번 학습을 마친 후에는 좀 더 발전적으로 여러 가지 프로그램을 찾아보며 학습할 수 있었으면 한다.